《C++程序设计》期末复习
一、选择题
1.设n=10,I=4,则赋值运算n%=I+1执行后,n的值是___________。A.0
2.要将用户自定义的类型转换为基本数据类型,最有可能使用________。A.转换函数3.如果有下面的定义和赋值,则使用不可以输出n中data的值。A.p.data
4.下列关于C++中的类型转换的说法中,错误的是()。
D.reinterpret_cast<>在进行类型转换时可以对数据类型进行检查,以确保转换的安全性5.下列关于类的定义格式的描述中,错误的是_____。C.类中成员函数都是公有的,数据成员都是私有的
6.下列关于数组下标的描述中,错误的是。B.数组元素下标是一个整常型表达式7.下列函数的功能是。D.求数组a的平均值
8.在32位机中,int型字宽为___________字节。B.4
9.若有以下程序段:
struct data{ int i ; char c; float f;} a;则以下语句正确的是。D.a.i=5;
10.最初的计算机编程语言是___________。A.机器语言
11.以下选项中,不是算法特点的是_____A.无穷性
12.下列for循环语句执行的次数是_____.
for(int i =0, x=0; ! x&&i <=5; i++) B.6
13.设有定义:
struct complex
{int real,unreal;} data1={1,8},data2;则以下赋值语句中错误的是_____。A.data2=(2,6);14.已知:int a[5] = {1, 2, 3, 4};下列数组元素值为2的数组元素是。B.a[1]
15.在链表指针为p的结点之后插入指针为s的结点,正确的操作是。
B.s->next=p->next;p->next=s;
16.继承具有___________,即当基本类本身也是某个类的派生类时,底层的派生类也会自动继承间接基类的成员。B.传递性
17.若要定义一个只允许该原文件中所有函数使用的全局变量,则该变量需要使用的存储类型是____。D.static
18.关于动态联编的下列描述中,___________是错误的。D.动态联编是在编译时确定操作函数的
19.指针可以用来表示数组元素,已知:int a[3][7],下列表示中错误的是____。A.*(a+1) [5] 20.对于int*pa[5];的描述,正确的是。D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针
21.下面程序的运行结果是。
void fun(char * *p) { + +p; cout<<*p;} void main( ) { char *a[ ]={"Morning","Afternoon","Evening","Night"};fun(a); } A.Afternoon
22.当定义一个结构体变量时,系统为它分配的内存空间是。D.结构中各成员所需内存容量之和
23.下列double型常量表示中,___________是错误的。A.E15
24.已知int i=0,j=1,k=2; 则逻辑表达式++i||--j&&++k 的值是_____B.1
25.下列关键字中,不属于定义自定义类型时使用的关键字是_____。D.default
26.下列说法正确的是。A.函数的调用可以嵌套,函数的定义不能嵌套
27.若要使用字符串类型(string类型),需在本文件的开头加上。
A.
28.下列的标识中,文件级作用域的是。C.外部静态类标识符
29.有关构造函数的说法,不正确的是___________。C.一个类只能有一个对象
30.如下说明语句,则下面叙述不正确的是。
struct stu { int a ;float b ;} stutype; C.stutype是用户定义的结构体类型名(变量名) 31.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过___________,派生出新的类。B.继承
32.下列运算符中,不能重载的是___________。A. ::
33.设int n=3;则++n的结果是___________ C.4
34.以下程序的运行结果是。
sub(int x, int y, int *z) { *z=y-x;}void main(){int a,b; sub(10,5,&a); sub(7,a,&b); cout << a << b << endl;}
C.-5,-12
35.定义以下结构体数组
struct c { int x; int y; }s[2]={1,3,2,7};
语句cout << s[1].x << endl; 的输出结果为。C.2
36.如果One类被声明为Two类的友元,那么。B. One类的每个对象都能访问Two类的私有数据成员。
37.重载函数在调用时选择的依据中,错误的是____。D.函数的返回类型
38.使用cin和cout进行输入输出操作的程序必须包含头文件___________?C.iostream.h 39.已知:int m=10; 下列表示引用正确的是。A.int &x=m
40.下面对继承关系描述中正确的是__。B.在公有继承中,基类中只有公有成员对派生类的对象是可见的。
41.下列数组的定义中,错误的是;;。B.char ca2="char";
42.已知int i=0,x=1,y=0; 在下列选项中使i的值变成1的语句是____C.if(x||y) i++;
44.若已定义char s[10]; 则在下面表达式中不表示s[1]的地址的是。B.s++
45.在int a[5]={1,3,5};中,数组元素a[1]的值是______。C.3
46.若有int *p[3] ,则下列表述中正确的是______
C. p 是一个有3个元素的指针数组,每个元素是一个int型的指针
47.___________是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。C.纯虚函数
48.在整型指针变量p1、p2的定义中,错误的是___。A. int x, *p1, p2=&x;
49.一个函数没有返回值的时候,应该选择的函数类型是_____。B.void
50.若有定义:double x = 3.14, * p = &x;,则*p等价于_______。D.x
51.基本类型到用户定义类型的转换通过___________实现。B.用户自定义类型的构造函数52.友元类的声明方法是:___________。A.friend class <类名>;
53.以下对结构变量成员不正确的引用是。
struct pupil { char name[20];int age; int sex } pup[5], *p=pup C.&(p->sex));
54.下列关于字符数组的描述中,错误的是。 D.字符数组就是字符串
55.在函数的声明时,下列选项中不必要的是_____.D.返回值表达式
56.下列十六进制的整型常数表示中,___________是错误的。C.2fx
57.下列对字符数组的初始化,正确的是______.A.char s1[]="abcd"
58.下列各循环语句中,不是死循环的是____.A.int i =100; while(1) {i=i%100+1; if(i==20) break;} 59.下列选项中,不是合法的浮点型数据的选线是_____。A.-1e3.5
60.按C++标识符的规定,合法的标识符是____ A._abc
61.设X为整型变量,不能正确表达数学关系1的表达式是:B.1< X< 5
62.C++程序中的简单语句必须以______结束。B.分号
二、判断题
63.一个C++程序可以有多个函数标准答案:1
64.计算机基本工作过程的执行者是软件,但软件是受硬件控制的。标准答案:0
65.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。答:1
66.C++支持两种类型的多态性是编译时多态和运行时多态。标准答案:1
67.注释可以出现在程序的任何地方。标准答案:1
68.用new开辟的内存单元无需主动收回,因为系统可以自动回收。标准答案:0
69.常对象需要引用常成员函数,而不能引用非常成员函数。标准答案:1
70.基本数据类型是C++的编程基础,常用的5种基本数据类型是整型、浮点型、字符型、布尔型和空值型。标准答案:1
71.运算符的操作数类型相同时,运算结果不一定是相同类型。标准答案:0
72.一个C++程序包括一个或多个主函数。标准答案:0
73.在多重循环中,內重循环的循环变量引用的次数比外重的多。标准答案:1 74.switch语句中必须有break语句,否则无法退出switch语句。标准答案:0
75.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类标准答案:0
76.派生类只继承基类中的公有成员和保护成员,而不继承私有成员。标准答案:0 77.计算机能解决计算型问题、反复型问题、逻辑型问题。标准答案:1
78.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的标准答案:0
79.构造函数是一个其名与类名相同的特殊的成员函数。标准答案:1
80.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数。标准答案:1 81.类中的成员函数都是公有的,数据成员都是私有的。标准答案:0
82.友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性。标准答案:1
83.下面程序的运行结果是?
#include void main()
{ int m[][3]={9,8,7,6,5,4,3,2,1},s=0;
for(int i=0;i<3;i++)
s+=m[i][i];cout<
84.写出下列程序的运行结果。
#include
struct MyStruct
{
int num;
char* str;
};
void main()
{
MyStruct my;
my.num=100;
my.str="Hello";
cout<<"The num of my is"<< my.num << "The str of my is" << my.str ;标准答案:
The num of my is100
The str of my is Hello
85.阅读下面的程序,写出运行结果。
#include < iostream >
using namespace std;
class A {
public:
A(){cout<<”A”;}
};
classB {public:B() {cout <<”B”;} }
classC:public A{
B b;
public:
C() {cout<<”C”;}
int main() { C obj; return 0;}
标准答案:ABC
86.下列程序的运行结果是。
void main( )
{
int i;
void add1(void),add2(void);
for (i=0;i<3;i++)
{ add1();
add2();
cout< } } void add1(void) { int x=0; x++; cout< } void add2(void) { static int x=0; x++; cout< } 标准答案: 1 1 1 2 1 3 87.下面代码片段的功能是?int int fun(int n) { if(n==0) return 0; else return n+fun(n-1); } int main() { int result=0; int n; cin>>n; result=fun(n); cout《result; return 0; } 标准答案:1到n的求和88.写出下列程序的输出结果。#includetrearn.h> class TestClass { public: TestClass ( ){val++;} static int val; }; int TestClass::val=0; void main() { TestClass cs1; cout << cs1.val << endl; TestClass cs2; TestClass cs3, cs4; cout << cs4.val << endl; 标准答案:1 4 90.写出以下程序的执行结果: #include < iostream.h > class Sample { private: int x; public: Sample(){x=0;} void disp() {cout<<”x=”<< endl; void operator++() { x+=10; } } void main() { Sample obj; obj.disp(); obj++; cout<<“执行bj++之后”<< endl; obj.disp(); 标准答案:x=0 执行obj++之后x=10 91.写出代码的输出结果 #include void main() { int x , y , z , f ; x = y = z =1; f = --x||y-- && z++; cout<<" x= "<< x < cout<<" y= "<< y < cout<<" z= "<< z < cout<<" f= "<< f < 标准答案: x=0 y=0 z=2 f=1 92.#include void main() { char * s = "123456"; s += 3; cout << s ; 标准答案:456 93.编写一段程序,输出1到100之间的不能被9整除的数。 标准答案: #include void main(){int i;for( i =1; i<100; i++){if (i%9 ==0)continue;cout< 94.定义一个学生结构student,包括学生的学号、姓名、性别和出生年日期。要求出生日期是结构类型,包括年、月、日。 标准答案: struct student { int number; char name; bool sex; struct date { int year; int month; int day; }birthday; }; 选择题 1.判断下面哪个if语句的条件为真___________。B.if ( 3 ) 4.通常拷贝构造函数的参数是___________。C.某个对象的引用名 5.下列对派生类的描述中,____是错误的。D.派生类中继承的基类成员的访问权限到派生类保持不变 6.虚函数使用关键字___________。A. virtual 9.已知:char s[ ]="abcd";输出显示字符'c'的表达式是(;;;;)。C.s[2] 10.下列关于运算符重载的描述中,正确的是___________。A. 不能改变运算符的优先级12.在类的定义体外定义成员函数时,需要在函数名前加上___________B.类域标记13.对于一个头指针为head的带头结点的链表,判定该表为空表的条件是。C.head→next==NULL 15.下列说法错误的是。 D.库函数只有标准库函数、第三方库函数和API函数三种,自己编写的函数不能成为库函数17.设char ch;以下正确的赋值语句是___________。D.ch='\\' 18.下列对基类和派生类关系的描述中,错误的是___________。B.派生类是基类的子集20.在一个被调用函数中,关于return语句使用的描述,错误的是_____。 D.被调用函数中,一个return语句可返回多个值给调用函数 22.以下哪个不是C++语言的编程软件?B.Matlab 24.下面程序的运行结果是。 int main () { double* pvalue = null; pvalue = new double; *pvalue = 29494.99; cout << *pvalue << endl; delete pvalue; return 0; } B.29495 25.函数模板____C.与某一具体的数据类型连用,就产生了函数模板的实例 26.友元运算符objl>obj2被C++编译器解释为_____。B.operator>(objl,obj2) 27.下列关于成员函数的描述中,错误的是____。A.成员函数的定义必须在类体外 29.在类的定义形式中,数据成员、成员函数和___________组成了类。A.成员的访问控制信息 31.如果一个类中,至少有一个纯虚函数,那么称该类为___________。B.抽象类 35.执行下列程序: char a[200]; cin.getline(a,200,''); cout< 若输入1234↙则输出? A.abcd 41.已知:double d[ ][3]={{1.2, 2.4, 3.6}, {4.8, 5.2},{6.4}};该数组的元素个数为。D.9 43.类型修饰符unsigned修饰___________类型是错误的。D.float 44.C++语言中允许的基本数据类型包括___________。D.整型、逻辑型、实型、字符型45.设int a=2,b=2;则++a+b的结果是___________ D.5 46.下列选项中,不能作为C++的分隔符的是_____. A.标识符 48.在c++语言中,下列变量命名正确的是___________。D.int _abc; 49.下列各种高级语言中,___________是面向对象编程语言。C.C++语言 51.假定A是一个类,那么执行语句“A a, b(3), *p;”调用了___________次构造函数。A.2 52.下列关于插入运算符”<<”的重载的描述中,错误的是()。C.重载的运算符必须定义为类的成员函数 56.下列关于指针的运算中,错误的是。D.两个指针在一定条件下,可以相加 58.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是。A.p=max; 60.下列正确的字符常量为______D.'\101' 判断题 63.算法常用的表示方法有自然语言法、流程图法、N-S图法以及伪代码法。标准答案:1 66.有一种只在循环语句或switch语句中使用的流程控制语句,表示该语句的关键字是braek。答案:1 68.运算符重载可以创建新运算符。标准答案:0 70.保护继承方式下基类的保护成员在派生类仍是保护成员。标准答案:1 71.友元类中的所有成员函数都是友元函数。标准答案:1 73.设int n=3;则n++的结果是5 标准答案:0 75.成员函数getline函数作用是读入一行字符。标准答案:1 76.析构函数是一个函数体为空的成员函数。标准答案:0 80.C++中有5个运算符不可以重载:类属关系运算符“.”、成员指针运算符“*”、作用域 运算符“::”、sizeof运算符和三目运算符“?:”。标准答案:1 82.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。标准答案:0 87.阅读下列程序,写出程序的输出结果。 #include < iostream > using namespace std; class A{ public: A() { cout << ‘A’; } ~A() { cout << ‘C’; } }; class B: public A{ public: B() { cout << ‘G’; } ~B() { cout << ‘T’; } }; int main() { B obj; return 0; } 标准答案:AGTC 88.写出代码的运行结果 #include void main() { int a= 1 , b = 2 ; cout<<(a++) +(++b)< cout< } 标准答案: 4 2 89.程序阅读,写出输出结果。 class Date { public: Date(int y,int m,int d) { year=y; month=m; day=d; } friend void Print(Date &); private: int year,month,day; }; void Print(Date &d) { cout << d.year << '/' << d.month << '/' << d.day << endl; } void main() { Date d1(2005,10,1),d2(2005,12,9); Print(d1); Print(d2); } 标准答案: 2005/10/1 2005/12/9 92.执行下列语句后,x和y的值分别是什么? int x ,y; x=y=1; ++x||++y; 标准答案: x=2y=1 95.将char*str=";aabadcdabdea";中a全部替换成c 标准答案: void main() { char *str="AABADCDABDEA"; int i; for (i=0;i < 12;i++ ) { if(*str=='A') *str='C'; } } 97.编写程序,实现以下功能。求100以内的自然数中奇数之和。 #include void main() { int s=0; for(int i=1;i<100;i+=2) s+=i; cout< } 98.设计一个c++程序,输出以下信息: *************** hello! *************** 标准答案: # include using namespace std; main() { cout<<" ***************"<<'\n'; cout<<" Hello!"<<'\n'; cout<<" ***************"<<'\n'; } 99.编写一段程序,实现以下功能。对候选人得票进行统计的程序。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。要求:程序定义一个全局的结构体数组leader,它有3个元素,每一元素包含两个成员,即name(姓名)和count(得票数)。 标准答案: #include struct person //声明结构体类型person { char name[20]; int count; }; int main( ) { person leader[3]={′li′,0,′zhang′,0,′fun′,0}; //定义person类型的数组,内容为3个候选人的姓名和当前的得票数 int i,j; char leader_name[20]; //leader_name为投票人所选的人的姓名for(i=0;i<10;i++) {cin>>leader_name; //先后输入10张票上所写的姓名 for(j=0;j<3;j++) //将票上姓名与3个候选人的姓名比较 if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; //如果与某一候选人的姓名相同,就给他加一票 } for(i=0;i<3;i++) //输出3个候选人的姓名与最后得票数 { cout << leader[i].name << leader[i].count << endl; } 100.编写一段程序,实现以下功能。 编写一个三角形类:实现三角形的三边及与三边相关的运算, 标准答案: class Triangle{ private: float a,b,c; //三边为私有成员数据 public: void Setabc(float x, float y, float z);//置三边的值 void Getabc(float &x, float &y, float &z);//取三边的值 float Perimeter(void);//计算三角形的周长 float Area(void);//计算三角形的面积 void Print(void);//打印相关信息 }; void Triangle::Setabc (float x,float y,float z) {a =x; b=y; c=z; } //置三边的值 void Triangle::Getabc (float &x,float &y,float &z) //取三边的值 {x=a; y=b; z=c;} float Triangle::Perimeter (void) {return (a+b+c)/2;} //计算三角形的周长 float Triangle::Area (void) //计算三角形的面积 {float area,p; p= Perimeter(); area=sqrt((p-a)*(p-b)*(p-c)*p); return area; } void Triangle::Print(void) //打印相关信息 { cout<<"Peri="<< Perimeter() << endl; cout<< "Area=" << Area() << endl; } void main(void) { Triangle Tri1; //定义三角形类的一个实例(对象) Tri1.Setabc (4,5,6); //为三边置初值 float x,y,z; Tri1.Getabc (x,y,z); //将三边的值为x,y,z赋值 Tri1.Print(); 2.已知int i=0,x=0;下面while语句执行时的循环次数为____.while(!x &&i<3) D.1 9.设struct {int a; char b; } Q, *p=&Q; 错误的表达式是。D.*p.b 11.虚基类的作用是_____C.为了解决同一基类被多次继承产生的二义性。 20.在int b[][3]={{1},{3,2},{4,5,6},{0}};中a[2][2]的值是______。C.6 25.下列运算符中,————优先级最高。D.* 32.下列关于友元函数的描述中,错误的是。B.友元函数只可访问类的私有成员37.静态链表中指针表示的是。C.下一元素地址 38.实现运行时的多态性,要使用___________。C.虚函数 42.下列关于常成员的描述中,错误的是。C.常数据成员的初始化是在类体内定义它 时进行的 48.在C++类体系中,不能被派生类继承的是___________。A.构造函数 52.链表不具有的特点是。B.可随机访问任一元素 59.下列选项中,全部是C++关键字的选项为______。C.sizeof case extern 60.假设i=2,执行下列语句后i的值为____ switch(i) { case 1:i++; case 2:i--; case 1:++i; break; case 2:--i; default: i++; B.2 69.用来给数组进行初始化的初始值表内的数据项的个数必须小于等于数组元素个数。标准答案:1 75.成员函数与一般函数一样可以重载、内联和设置参数的默认值。标准答案:1 78.for循环是只有可以确定的循环次数时才可是使用,否则不能使用for循环。标准答案:0 83.运行下列程序段,输出结果是。 struct country { int num; char name[10]; } x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"}; struct country *p; p=x+2; cout<< p->num<<’,’<<(*p).name[2] 标准答案: 3,a 90.语句cout << x[0].name << x[1].birthday.year; 的输出结果为___。 标准答案: guangzhou,2009 ; 92.阅读下面的代码,写出输出结果。 void main() { int w(5); do { switch(w%2) { case 1: w--; break; case 0: w++; break; } w--;