c复习题及答案
集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)
一、选择题
1.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为
A 。
A. main
B. MAIN
C. name
D. function
2.若a,b均为int型变量,为了将10赋给a,将20赋给b,则对应以下cin语句的正确输入方式为 B 。(
cin >> a >> b;
A.1020
3.在以下关于C++语言的注释的叙述中,不正确的是 C 。
A.C++程序中,注释可用"/*"、"*/"形式表示,也可用"//"形式表示 B.C++编译器在编译一个程序时,将跳过注释,不对其进行处理
C.C++编译器在编译一个程序时,可发现注释中的单词拼写错误
D.程序中注释的多少不会影响所生成的可执行文件的长度
4.以下叙述不正确的是 C 。
A.在C++程序中,严格区分大小写字母
B.一个C++源程序有且仅有一个main函数
C.在C++程序中,注释只能位于一条语句的后面
D.一个C++程序总是从main函数开始执行
5.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是 D
A.增加了一些新的运算符
B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念
6.C++是 C
A.面向对象的程序设计语言
B.结构化程序设计语言
C.既是面向对象的程序设计语言又是结构化程序设计语言
D.非结构化程序设计语言
7.下列合法的标识符为 D
A. abde+
B. #KDJF
C. 67KDJ
D. DK3_
8.
关于字符串和字符的关系正确的是 C A. “A ”与’A ’是相同的
B. 字符串是常量,字符是变量
C. “A ”与’A ’是不同的
D. “A ”与“A ”是相同的
9. 下面关于语句的说法正确的是 B
A. 下面这两段程序的执行效果是一致的
B. 空语句是只有一个分号的语句,它其实什么也不干
C. 语句的构成不一定需要分号
D. 语句的书写对程序的运行不起作用,因此可以随便写都可以
10. 以下各标识符中,合法的用户标识符组为 D 。
A. PAd ,P#d ,b-b ,abc ,_0123,ssiped
B. cin ,a10,CPP ,float ,del_word ,signed
C. void ,max ,hiy ,
D. a ,temp ,_isw ,INT ,keep ,wind
11. 在VC++中,以下语句的输出为 D 。
short int k= -1;
cout << k << ',' << (unsigned short) k < A .-1,-1 B .-1,32767 C .-1,32768 D .-1,65535 12. 若给出以下程序,其输出为 B 。 #include using namespace std; int main ( ) { int a=4,b=7; cout << (a=a+1,b+a,b+1) << endl; return 0; if (x>y) {z=x; s=z*z;} else {z=y;s=1/(z*z);} if (x>y) z=x; s=z*z; else z=y;s=1/(z*z); } A.5 B.8 C.11 D.程序有错误,无法运行 13.字符串“\”EOF= -\61\””的长度是 A 。 A. 8 B. 9 C. 12 D.非法字符串 14.数学式x sin在C++程序中对应正确的表达式为 B 。 A.sqrt(sin(x)>0sin(x):-sin(x)) B.sqrt(fabs(sinx)) C.sqrt(sqrt(sinx*sinx)) D.fabs(sqrt(sin(x))) 15.下列 A 是C++语言的有效标识符 A._No1 B.No.1 C.12345 D.int 16.C++语言中,表示一条语句结束的标号是 B A.# B.; C.// D.} 17.每个C++程序中都必须有且仅有一个 C A.类B.预处理命令 C.主函数D.语句18.下列数据类型不是C++语言基本数据类型的是 D 。 A.字符型 B.整型 C.实型 D.数组 19.下列字符列中,可作为C++语言程序自定义标识符是 B 。 A.switch B.file C.break D.do 20.运算符 +、<=、=、% 中,优先级最低的运算符是 C 。 A. + B.<= C.= D.% 21.下列字符列中,可以作为“字符串常量”的是 B 。 A. ABC B.″xyz″ C.′uvw′ D.′a′ 22.设变量m,n,a,b,c,d均为0,执行(m = a= =b)||(n=c= =d)后,m,n的值是 D 。 A.0,0 B. 0,1 C. 1,0 D. 1,1 23.字符串"vm\x43\\\np\102q"的长度是 A 。 A. 8 B. 10 C. 17 D. 16 24.在C++语言中,自定义的标识符 D 。 A.能使用关键字并且不区分大小写 B.不能使用关键字并且不区分大小写 C.能使用关键字并且区分大小写 D.不能使用关键字并且区分大小写 25.设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是 C 。 A.3 B. 0 C. -40 D.–12 26.设a为5,执行下列代码后,b的值不为2的是 C 。 A.b = a/2 B.b = 6-(--a) C.b = a%2 D.b = a < 3 3: 2 27.设x和y均为bool量,则x && y为真的条件是 A 。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 28.若给定条件表达式(m)(a++): (a--),则其中表达式m C 。 A. 和(m= =0)等价 B. 和(m= =1)等价 C. 和(m!=0)等价 D. 和(m!=1)等价 29.在C++语言的if语句中,用作判断的表达式为 D 。 A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式 30.设i和k都是int类型,则以下for循环语句 B 。 for ( i=0, k= -1; k=1; i++, k++ ) cout << "****\n"; A. 判断循环结束的条件不合法 B. 是无限循环 C. 循环体一次也不执行 D. 循环体只执行一次 31.若有以下语句,则输出结果为 A 。 int a=2,b=1; cout << a>b"a大于b":"a小于b" << endl; A. a大于b B. a小于b C. 1 D. 输出语句有错 32.int k=10; while(k=0) k=k-1; 则下面描述正确的是 C 。 A. while循环执行10次 B. 循环是无限循环 C. 循环体语句一次也不执行 D. 循环体语句执行一次 33. int a=1,b=2,c=2,t; while(a cout< 运行结果为 D 。 A. 1,2,0 B. 2,1,0 C. 1,2,1 D. 2,1,1 34.int x=-1; do {x=x*x;} while(!x); 下列说法正确的是 C 。 A. 是死循环 B. 循环执行两次 C. 循环执行一次 D. 有语法错误 35.以下能正确计算1*2*3*…*10的程序段是 C 。 A. do {i=1;s=1; B. do {i=1;s=0; s=s*i; i++;} s=s*i;i++;} while(i<=10); while(i<=10); C. i=1;s=1; D. i=1;s=0; do {s=s*i; do{s=s*i; i++;} i++;} while(i<=10); while(i<=10); 36.以下描述正确的是 C 。 A. 由于do-while循环中循环体语句只是一条可执行语句,所以循环 体内不能使用复合语句 B. do-while循环由do开始,用while结束,在while(表达式)后面 不能写分号 C. 在do-while循环体中,一定要有能使while后面表达式的值变为 零(“假”)的操作 D. do-while循环中,根据情况可以省略while 37.C++中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 38.下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判断表达式 C. for循环中,不能用break语句跳出循环体 D. for循环的循环体语句中,可以包含多条语句,但必须用花括号括 起来 39.对for(表达式1;;表达式3)可理解为 B 。 A. for(表达式1;0;表达式3) B. for(表达式1;1;表达式3) C. for(表达式1;表达式1;表达式3) D. or(表达式1;表达式3;表达式3) 40.for(i=2;i= =0;) printf(“%d”,I--); 循环执行的次数是 B 。 A. 无限次 B. 0次 C. 1次 D. 2次 41.在C++编程语言中,以下正确的描述是 B 。 A. continue语句的作用是结束整个循环的执行 B. 只能在循环体内和switch语句体内使用break语句 C. 在循坏体内使用break语句或continue语句的作用相同 D. 从多层循环嵌套中退出,只能使用goto语句 42.下面程序段 D 。 for(t=1;t<=100;t++) {cin>>x; if(x<0) continue; cout< A. 当x<0时整个循环结束 B. x>=0时什么也不输出 C. cout永远也不执行 D. 最多允许输出100个非负整数 43.定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是 C 。 A. swap(int x, int y){ int t; t=x; x=y; y=t; } B. swap(int *x, int *y){ int t; t=x; x=y; y=t; } C. swap(int *x, int *y){ int t; t= *x; *x = *y; *y=t; } D. swap(int *x, int *y){ int *t; t=x; x=y; y=t; } 44.说明语句"int (*p) ( );"的含义是 C 。 A. p是一个指向一维数组的指针变量 B. p是指针变量, 指向一个整型数据 C. p是一个指向函数的指针,该函数的返回值是一个整型 D. 以上都不对 45.设有说明int (*p) [4 ]; 其中的标识符p是 C 。 A. 4个指向整型变量的指针变量 B. 指向4个整型变量的函数指针 C. 一个指向具有4个整型元素的一维数组的指针 D. 具有4个指向整型变量的指针元素的一维指针数组 46.若有如下声明,下列说法错误的是 C 。 struct em { char a; char b; }; A. struct是结构体类型关键字 B. em是结构体类型名 C. em 是用户声明的结构体变量 D. a,b是结构体成员名 47.若有下列定义,则对结构体变量的成员引用错误的是 C 。 struct date { int year; int month; int day; }; struct student { int no; char name[16]; date birthday; } stud; A. stud.no B. https://www.wendangku.net/doc/7813363369.html, C. stud.birthday D. 48.下列叙述中,不正确的是 B 。 A. 类的构造函数可以重载 B. 类的析构函数可以重载 C. 一个类可以不定义构造函数 D. 一个类可以不定义析构函数 49.已知宏定义: #define N 3 #define Y(n) ((N+1)*n) ((N+1)*5+1) 执行语句z=2*(N+Y(5+1)); 后,变量z的值是 B 。 A. 42 B. 48 C. 52 D. 出错 50.类的构造函数的作用是 C A)一般成员函数的初始化 B)类的初始化 C)对象的初始化 D)删除类创建的对象 51.下列说法正确的是 B A)内置函数在运行时是将该函数的目标代码插入每个调用该函数的地方B)内置函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内置函数必须在类体内定义 D)类的内置函数必须在类体外通过加关键字inline定义 二、填空题 1.程序的三种基本的控制结构是:顺序结构、选择结 构、选择结构 2.假定一个结构类型定义为: “struct D { int a ; union { int b ; double c ; } ; D * d[2] ; } ;”,则该类型的大小为 20 字节。 3.C++语言中的每条基本语句以;作为结束符,每条复合语句以}作为结束符。 4.关系表达式x+y>5的相反表达式为x+y<=5 。 5.下面的程序段中循环体的执行次数是 3 。 a=10;b=0; do{b+=2;a-=2+b;} while(a>=0); 6.下面程序段的运行结果为 ** 。 x=2; do{cout<<“*”;x--; } while(!x==0); 7.定义内置函数的方法是在函数的返回值类型之前增加关键字 inline 。 8.假定a为一个整型数组名,则元素a[4]的字节地址为a+16 。 9.假定一个一维数组的定义为“char 10.a[8] ;”,则该数组所含元素的个数为8 ,所占存储空间的字节 数为32 。 11.已知int a[3][2]={3, 2, 1}; 则表达式 “a[0][0]/a[0][1]/a[0][2]”的值是 1 。 12.若用数组名作为函数调用时的实参,则实际上传递给形参的是 数组首地址。 13.如果一个函数无返回值,定义它时函数类型应是 void 。 14.预处理命令以 # 开头。 15.假定a是一个二维数组,则a[i][j]的指针访问方式为*(a[i]+j) 或 *(*(a+i)+j) 16.。 17.C++在编译时,可以将所调用函数的代码直接嵌入到主调函数中, 而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函 数。 18.使用内置函数可以节省运行时间,但却增加了目标函数的 长度。 19.C++允许用同一函数名定义多个函数,这些函数的参数个数和参数 类型不同。这就是函数的重载。 20.利用C++编程语言可以建立一个通用函数,其函数类型和形参类型 不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 21.对一个类中的数据成员的初始化可以通过构造函数中的初始化表 实现,也可以通过构造函数中的函数体实现。 22.假定AB为一个类,则执行“AB 23.a[10];”语句时,系统自动调用该类的构造函数的次数为10 。 三、填空完成下面的程序 1. #include using namespace std; int main( ) { int a, b, c, x; cin>>a; cout<<"a="< cin>>b; cout<<"b="< cin>>c; cout<<"c="< if (a==b&&b==c) cout<<"the three numbers are eauql"< else { if(a>b && a>c) x=a; else if (b>c) x=b; else x=c; cout<<"the greatest number is:"< } return 0; } 2.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结 束循环,请填空完成程序。 int n=0,c; c=getchar( ); while( c!='\n' ) { if( c>='A'&&c<='Z'||c>='a'&&c<='z' ) n++; c=getchar( ); } 3.鸡、兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少 只,x代表有多少只鸡,y代表有多少只兔子,请填空完成程序。 for(x=1;x<=29;x++) {y=30-x; if( 2*x+4*y==90 ) cout< } 4.下面的程序是求2个或3个正整数中的最大数,用带有默认参数的函 数实现。请填空完成程序。 #include using namespace std; int main() {int max(int a,int b, int c=0 ); int a,b,c,m1,m2; cin>>a>>b>>c; m1= max(a,b,c); m2= max(a,b); cout<<"a,b,c三个正整数中的最大数为:"< cout<<"a,b两个正整数中的最大数为:"< return 0; } int max(int a, int b, int c) {if(b>a) a=b; if(c>a) a=c; return a; } 四、给出下列程序运行后的输出结果 1.# include using namespace std; void SB(char ch) { switch(ch) { case 'A': case 'a': cout <<"well!"; break; case 'B': case 'b': cout <<"good!"; break; case 'C': case 'c': cout <<"pass!"; break; default: cout <<"bad!"; break; } } int main( ) { char a1='B',a2='c',a3='f'; SB(a1);SB(a2);SB(a3);SB('A'); cout < return 0; } 答案:good! pass! bad! well! 2.#include using namespace std; int main() {int a,b; for(a=1,b=1;a<=100;a++) {if(b>=20) break; if(b%3= =1) {b+=3;continue;} b- =5; } cout< return 0; } 答案:8 3.#include using namespace std; main( ) {int i,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if (j%2) continue; x++; } x++; } cout<<“x=”< } 答案:x=8 4.#include using namespace std; main( ) {int i; for(i=1;i<=5;i++) {if(i%2) cout<<“*”; else continue; cout<<“#”; } cout<<“$\n”; } 答案:*#*#*#$ 5.#include using namespace std; void main( ) { int I,j,a=0; for(I=0;I<2;I++) { for(j=0;j<4;j++) { if(j%2) break; a++; } a++; } cout< } 答案:4 6.运行以下程序时,从键盘键入right请给出回车后运行的结果。 #include using namespace std; void main() {char c; while((c=getchar())!='') putchar(++c); } 答案:sjhiu 7.#include void main( ) {int I; for(I=1;I<=5;I++) switch(I%2) {case 0:I++; cout<<"#";break; case 1:I+=2; cout<<"*"; default: cout<<"\n"; } } 答案:* # 8.#include using namespace std; int a=5; int main ( ) { int a=10, b=20; { int a=0,b=0; for (int i=1; i<6; i++) {a+=i ; b+=a;} } cout < return 0; } 答案:10 20 9.#include using namespace std; int k=1; void f(int m) {m+=k; k+=m; {char k='B'; cout<< k - 'A' <<'\n'; } cout< } int main() {int i=4; f(i); cout< return 0; } 程序的输出第一行是 1 ,第二行是 5,6 ,第三行是4,6 。 10.# include # include int main( ) { char a[5]={"student", "worker", "cadre", "soldier", "peasant"}; char p1, p2; p1=p2=a[0]; for (int i=0; i<5; i++) {if (strcmp(a[i],p1)>0) p1=a[i]; if (strcmp(a[i],p2)<0) p2=a[i]; } cout < return 0; } 答案:worker cadre 11.#include using namespace std; int m[3][3]={ {1}, {2}, {3} }, n[3][3]={ 1, 2, 3 }; int main() { cout< return; } 程序的输出第一行是 3 ,第二行是 0 。 12.#include using namespace std; void f (int s[ ]) {static int j; do{s[j]+=s[j+1]; } while(++j<2); } int main() {int k, a[10]={1, 2, 3, 4, 5};