C++程序设计习题解析与实践教程
上QQ阅读APP看书,第一时间看更新

第1章 面向对象程序设计概述

一、填空题

1.程序设计语言历经了机器语言、______、高级语言(面向过程的高级语言)、面向对象的编程语言。

2.在软件开发方法中,应用最广泛的程序设计方法有两种:一种是面向过程的结构化程序设计方法;另一种是______的程序设计方法。

3.面向过程的程序设计方法适用于______系统的开发;面向对象的程序设计方法适用于______软件开发。

4.类是一组具有共同______和______的对象的抽象。

5.面向对象程序设计的基本特征主要有:抽象性、封装性、______、______、______。

6.抽象包含两个方面:数据抽象和______。

7.在面向对象程序设计中,将一组数据和这组数据有关的操作集合组装在一起形成对象,这个过程叫______。

8.______机制允许子类共享父类的数据和行为,是实现软件复用的一个重要手段。

9.不同类的对象调用相同名称的函数并导致完全不同的行为的现象称为______。

10.面向对象程序设计方法是针对开发较大规模的程序而提出,目的是______。

二、判断题

1.C++是一种纯正的面向对象的程序设计语言。

2.C++是C语言的超集,兼容C语言。

3.C语言适用于大型的、复杂的软件系统开发。

4.结构化程序设计的重要特征是继承和重用。

5.对象是描述其属性的数据及对这些数据施加的一组操作封装在一起构成的一个独立整体。

6.属性是类中所定义的数据,类的每个实例的属性值都相同。

7.封装是一种信息隐藏技术,即对象的内部对用户是隐藏的,用户可以直接访问。

8.结构化程序设计又称为面向对象的程序设计。

9.面向对象整个程序由不同类的对象构成,各对象是一个独立的实体,对象之间通过消息传递发生相互作用。

10.广泛使用的面向对象程序设计语言有C、C++、Visual Basic、C#、Java等。

三、选择题

1.面向对象程序设计与结构化程序设计的最根本不同之处在于( )。

A.运用自顶向下,化抽象为具体的方法

B.程序编码强调模块化原则

C.从描述问题的对象属性和行为着手

D.从问题的解决过程着手

2.在面向对象程序设计中,实现信息隐藏是依靠( )。

A.对象的继承

B.对象的抽象

C.对象的多态

D.对象的封装

3.类和对象的关系是( )的关系。

A.一一对应

B.抽象和具体

C.抽象和封装

D.继承与派生

4.在C++语言中,通过( )两个方面来实现多态性。

A.虚函数和派生

B.重载和继承

C.重载和虚函数

D.派生和继承

5.面向对象程序设计方法的优点是( )。

A.数据和操作数据的程序代码绑在一起构成对象

B.易修改、易维护、易扩充,可重用性高

C.采用与客观世界相一致的方法设计软件

D.克服了面向过程程序设计方法的缺点

6.C++是一种( )的程序设计语言。

A.面向对象

B.面向过程

C.面向对象和面向过程的一种混合编程语言

D.面向自然

7.( )是一种信息隐藏技术,即对象的内部对用户是隐藏的,不可直接访问。

A.继承

B.抽象

C.封装

D.多态

8.在 C++语言中,每个类成员可以设置为私有、保护和公有3种访问控制权限,对象的外部只能访问它的( )。

A.公有成员

B.私有成员

C.保护成员

D.3种成员都能访问

9.如果一个子类有多个父类,这种继承称为( )。

A.单继承

B.多继承

C.既是单继承,也是多继承

D.都不是

10.对C语言和C++语言的兼容性描述正确的是( )。

A.C++部分兼容C

B.C++兼容C

C.C++不兼容C

D.C兼容C++

四、程序阅读题

1.阅读下面程序,请写出程序的输出结果。

#include<iostream>

using namespace std;

int main()

{

enum Color {Red,Green,Blue};

Color color;

color=Red;

cout<<color<<",";

color=Green;

cout<<color<<",";

color=Blue;

cout<<color<<",";

cout<<Red+Green+Blue<<endl;

return 0;

}

2.写出下列程序的运行结果。

#include<iostream>

using namespace std;

struct MyStruct

{

int num;

char *str;

};

int main()

{

MyStruct my;

my.num=20;

My.str="Hello";

cout<<"The num of my is"<<my.num<<endl;

cout<<"The str of my is"<<my.str<<endl;

return 0;

}

3.写出下列程序的运行结果。

#include<iostream>

using namespace std;

union MyUnion

{

int num;

char ch;

};

int main()

{

MyUnion my;

my.num=20;

cout<<"The num of my is"<<my.num<<endl;

My.ch='A';

cout<<"The num of my is"<<my.num<<endl;

cout<<"The ch of my is"<<my.ch<<endl;

return 0;

}

4.写出下列程序的运行结果。

#include<iostream>

using namespace std;

int main()

{

int a[2][2]={1,2,3,4},*p;

p=a[0]+1;

cout<<*p<<endl;

return 0;

}

5.写出下列程序的运行结果。

#include<iostream>

using namespace std;

int main()

{

int i,j;

for(i=5;i>0;i--)

{

for(j=i;j>0;j--)

cout<<"*";

cout<<endl;

}

return 0;

}

五、程序设计题

1.定义一个学生结构体 student,包括学生的学号、姓名、性别和出生日期。出生日期要求包括年、月、日。编写程序输出一个学生的所有信息。

2.输入一个字符,如果该字符是英文字母,则打印该英文字母的 ASCⅡ码,要求可以输入任意字符。

3.编写程序将成绩分数的百分制转换为等级制,即 A(分数≥90)、B(90>分数≥80)、C (80>分数≥70)、D(70>分数≥60)、E(分数<60=五等。

4.编写输入、输出10个朋友数据的通讯录程序,每个朋友的数据包括姓名、地址、邮编、电话、传呼、手机等数据。

5.将一个数组中的值按逆序重新存放,例如,原来顺序为5,4,3,2,1,改为1,2,3,4,5。

参考答案

一、填空题

1.汇编语言 2.面向对象 3.小型、大型 4.属性、行为 5.继承性、多态性

6.过程抽象 7.封装 8.继承 9.多态性 10.提高软件开发的效率

二、判断题

1.× 2.√ 3.× 4.× 5.√ 6.× 7.× 8.× 9.√ 10.×

三、选择题

1.C 2.D 3.B 4.C 5.B 6.C 7.C 8.A 9.B 10.B

四、程序阅读题

1.阅读下面程序,请写出程序的输出结果。

答:

0,1,2,3

2.写出下列程序的运行结果。

答:

The num of my is 20

The str of my is Hello

3.写出下列程序的运行结果。

答:

The num of my is 20

The num of my is 65

The ch of my is A

4.写出下列程序的运行结果。

答:

2

5.写出下列程序的运行结果。

答:

*****

****

***

**

*

五、程序设计题

1.定义一个学生结构体 student,包括学生的学号、姓名、性别和出生日期。出生日期要求包括年、月、日。编写程序输出一个学生的所有信息。

答:

#include<iostream>

using namespace std;

struct student

{ int number;

char name[8];

bool sex;

struct date

{ int year;

int month;

int day;

} birthday;

};

int main()

{

student stu;

stu.number=10020;

stu.name="wangfang";

stu.sex=0;

stu.birthday.year=1998;

stu.birthday.month=11;

stu.birthday.day=26;

cout<<"输出学生的信息:"<<endl;

cout<<stu.number<<" "<<stu.name<<" ";

cout <<stu.sex<<" "<<stu.birthday.year;

cout<<stu.birthday.month<<stu.birthday.day<<endl;

return 0;

}

2.输入一个字符,如果该字符是英文字母,则打印该英文字母的 ASCⅡ码,要求可以输入任意字符。

答:

#include<iostream>

using namespace std;

int main()

{

char ch;

cin>>ch;

if((ch>='A'&&ch<='Z')‖(ch>='a'&&ch<='z')

cout<<(int)ch<<endl;

return 0;

}

3.编写程序将成绩分数的百分制转换为等级制,即 A(分数≥90)、B(90>分数≥80)、C (80>分数≥70)、D(70>分数≥60)、E(分数<60)五等。

答:

#include<iostream>

using namespace std;

int main()

{

float score;

cout<<"please input score":<<endl;

cin>>score;

if((score>=90)

cout<<"A";

else if((score>=80)

cout<<"B";

else if((score>=70)

cout<<"C";

else if((score>=60)

cout<<"D";

else cout<<"E"<<endl;

return 0;

}

4.编写输入、输出10个朋友数据的通讯录程序,每个朋友的数据包括姓名、地址、邮编、电话、QQ、手机等数据。

答:

#include "stdio.h"

struct AddressBook

{

char name[10]

char address[30]

char mailnumber[7]

char telphone[12]

charqq[16]

char movephone[1]

}

void main()

{

int i

AddressBook fd[10]

for(i=0;i<10;i++)

{

printf("请输入第%d个朋友的信息:\n",i+1);

printf("姓名:");

scanf("%s",&fd[i].name)

printf("地址:");

scanf("%s",&fd[i].address)

printf("邮编:");

scanf("%s",&fd[i].mailnumber)

printf("电话:");

scanf("%s",&fd[i].telphone)

printf("QQ:");

scanf("%s",&fd[i].qq)

printf("手机:");

scanf("%s",&fd[i].movephone)

}

for(i=0;i<10;i++)

{

printf("\n第%d个朋友的信息:\姓名:%s\n 地址:%s\n 邮 编:%s\n 电话:%s\n QQ:%s\n 手机:%s\n",i+1,fd[i].name,fd[i].address,fd[i].mailnumber,fd[i].telphone,fd[i].qq,fd[i].move phone)

}

}

5.将一个数组中的值按逆序重新存放,例如,原来顺序为5,4,3,2,1,改为1,2,3,4,5。

答:

#include <stdio.h>

#include <malloc.h>

int main()

{

int *a;

int n;

int i;

int t;

puts("输入数组元素个数");

scanf("%d",&n);

a=(int *)malloc(sizeof(int)*n);

puts("输入数组中的每一个元素:");

for(i=0;i<n;++i)

scanf("%d",&a[i]);

for(i=0;i<n/2;++i)

{

t=a[i];

a[i]=a[n-i-1];

a[n-i-1]=t;

}

puts("逆序输出该数组:");

for(i=0;i<n;++i)

printf("%4d",a[i]);

printf("\n");

return 0;

}