1、C+语言程序设计自测练习( 一) 一、 单项选择题 1. C+源程序文件的默认扩展名为( )。 A. cpp B. exe C. obj D. lik 2. 由C+源程序文件编译而成的目标文件的默认扩展名为( )。 A. cpp B. exe C. obj D. lik 3. 由C+目标文件连接而成的可执行文件的默认扩展名为( )。 A. cpp B. exe C. obj D. lik 4. C+程序从上机到得到结果的几个操作步骤依次是( )。 A. 编译、 编辑、 连接、 运行 B. 编辑、 编译、 连接、 运行 C. 编译、 运行、 编辑、 连接 D. 编辑、 运行、 编辑、 连接 5.
2、 以下标识符中不全是保留字的是( ) 。 A. case for int B. default then while C. bool class long D. goto return char 6. 能作为C+程序的基本单位是( )。 A. 字符 B. 语句 C. 函数 D. 源程序文件 7. 程序中主函数的名字为( ) 。 A. main B. MAIN C. Main D. 任意标识符 8. C+程序的基本模块为( ) 。 A. 表示式 B. 标识符 C. 语句 D. 函数 9. 可用作C+语言用户标识符的一组标识符是( )。A. void define +WORDB. a3_b3 _1
3、23 YNC. for -abc CaseD. 2a DO sizeof 10. 存储以下数据, 占用存储字节最多的是( ) 。 A. 0 B. 0 C. ”0” D. 0.0 11. 程序运行中需要从键盘上输入多于一个数据时, 各数据之间应使用( )符号作为分隔符。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 12. 设”int a=12;”, 则执行完语句”a+=a*a;”后, a的值是( )。 A. 12 B. 144 C. 156 D. 288 13. 假设在程序中 a、 b、 c 均被定义成整型, 所赋的值都大于1, 则下列能正确表示代数式的表示式是( )
4、。A. 1.0/a*b*c B. 1/(a*b*c) C. 1/a/b/(float)c D. 1.0/a/b/c 14. 设”int a=15,b=26;”, 则”cout0 & x=10的相反表示式为( ) 。A. x10 B. x10C. x=0 | x0 & x10 17. x0 | y=5的相反表示式为( ) 。A. x=0 | y!=5 B. x0 | y!=5 D. x0 & y=5 18设x和y均为bool量, 则x & y为真的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 19设x和y均为bool量, 则x | y为假的条件是(
5、)。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 20. 字符串”a+b=12n”的长度为( ) 。 A. 6 B. 7 C. 8 D. 9 21. 假定下列x和y均为int型变量, 则不正确的赋值为( ) 。 A. x+=y+ B. x+=y+ C. x=+y D. +x=+y 22. 下列的符号常量定义中, 错误的定义是( ) 。 A. const M=10; B. const int M=20; C. const char ch; D. const bool mark=true; 23. 循环语句”for(int i=0; in; i+) couti*i
6、;”中循环体执行的次数为( )。 A. 1 B. n-1 C. n D. n+1 24. 在下面循环语句中循环体执行的次数为( ) 。 for(int i=0; in/2) break; A. n/2 B. n/2+1 C. n/2-1 D. n-1 25. 在下面循环语句中内层循环体S语句的执行总次数为( ) 。 for(int i=0; in; i+) for(int j=i; jn; j+) S; A. n2 B. (n+1)/2 C. n(n-1)/2 D. n(n+1)/2 26. 在下面循环语句中循环体执行的次数为( ) 。 int i=0,s=0; while(s20) i+;
7、s+=i; A. 4 B. 5 C. 6 D. 7 27. 在下面循环语句中循环体执行的次数为( ) 。 int i=0; do i+; while(i*i10); A. 4 B. 3 C. 5 D. 2 28. 当处理特定问题时的循环次数已知时, 一般采用( ) 来解决。 A. for循环 B. while循环 C. do循环 D. switch语句 29. 循环体至少被执行一次的语句为( ) 。 A. for循环 B. while循环 C. do循环 D. 任一种循环 30. switch语句能够改写为( ) 语句。 A. for B. if C. do D. while 31. do语句
8、能够改写为( ) 语句。 A. 复合 B. if C. switch D. while 32. 在下面的一维数组定义中, 哪一个有语法错误。( ) A. int a=1,2,3; B. int a10=0; C. int a; D. int a5; 33. 在下面的字符数组定义中, 哪一个有语法错误。( ) 。 A. char a20=”abcdefg”; B. char a=”x+y=55.”; C. char a15; D. char a10=5; 34. 在下面的二维数组定义中, 正确的是( )。 A. int a5; B. int a5; C. int a3=1,3,5,2; D. i
9、nt a(10); 35. 假定一个二维数组的定义语句为”int a34=3,4,2,8,6;”, 则元素a12的值为( ) 。 A. 2 B. 4 C. 6 D. 8 36. 假定一个二维数组的定义语句为”int a34=3,4,2,8,6;”, 则元素a21的值为( ) 。 A. 0 B. 4 C. 8 D. 6 37. 若定义了函数 double *function(), 则函数function的返回值为( ) 。 A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址 38. 以下说法中正确的是( ) 。 A. C+程序总是从第一个定义的函数开始执行 B. C+程序总是从ma
10、in函数开始执行 C. C+函数必须有返回值, 否则不能使用函数 D. C+程序中有调用关系的所有函数必须放在同一个程序文件中 39. 以下叙述中不正确的是( ) 。 A. 在一个函数中, 能够有多条return语句 B. 函数的定义不能嵌套, 但函数的调用能够嵌套 C. 函数必须有返回值 D. 不同的函数中能够使用相同名字的变量 40. 函数重载是指( ) 。 A. 两个或两个以上的函数取相同的函数名, 但形参的个数或类型不同 B. 两个以上的函数取相同的名字和具有相同的参数个数, 但形参的类型能够不同 C. 两个以上的函数名字不同, 但形参的个数或类型相同 D. 两个以上的函数取相同的函数
11、名, 而且函数的返回类型相同 41. 以下关于函数模板叙述正确的是( ) 。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 经过使用不同的类型参数, 函数模板能够生成不同类型的函数 D. 用函数模板定义的函数没有类型 42. 下列( ) 的调用方式是引用调用。 A. 形参和实参都是变量 B.形参是指针, 实参是地址值 C. 形参是引用, 实参是变量 D.形参是变量, 实参是地址值 43. 为了提高程序的运行速度, 可将不太复杂的功能用函数实现, 此函数应选择( ) 。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 44. 函数原型语句
12、正确的是( ) 。 A. int Function(void a); B.void Function (int); C. int Function(a); D.void int(double a); 45. C+中函数返回值的类型是由( ) 决定的。 A. return语句中表示式的类型 B.该函数定义时的类型 C.调用函数时的调用语句 D.系统根据结果 46. 以下函数的返回结果是( ) 。 int function(char *x) char *p=x; while(*p+); return(p-x-1); A. 求字符串的长度 B.将字符串x连接到字符串p后面 C. 将字符串x复制到字符
13、串p中 D.将字符串x反向存放 47. 函数调用func(exp1,exp2),(exp3,exp4,exp5)中所含实参的个数为( )个。 A. 1 B. 2 C. 4 D. 5 48. 设有如下函数定义 int f(char *s) char *p=s; while(*p!=0) p+; return(p-s); 在主函数中用coutf(”good”)调用上述函数, 则输出结果为( ) 。 A. 3 B. 4 C. 5 D. 6 49. 以下正确的函数原型语句是( )。 A. double fun(int x,int y) B. double fun(int x;int y) C. dou
14、ble fun(int,int); D. double fun(int x,y); 50. 以下正确的说法是( ) 。 A. 用户调用标准库函数前, 必须重新定义 B. 用户能够重新定义标准库函数, 若如此, 该函数将失去原有含义 C. 系统不允许用户重新定义标准库函数 D. 用户调用标准库函数前, 不必使用预编译命令将该函数所在文件包括到用户源文件中二、 填空题 1. C+语言是在_语言的基础上发展起来的。 2. C+语言的编译单位是扩展名为_的_文件。 3. 行尾使用注释的开始标记符为_。 4. 多行注释的开始标记符和结束标记符分别为_和_。 5. 用于输出表示式值的标准输出流对象是_。
15、6. 用于从键盘上为变量输入值的标准输入流对象是_。 7. 一个完整程序中必须有一个名为_的函数。 8. 一个函数的函数体就是一条_语句。 9. 当执行cin语句时, 从键盘上输入每个数据后必须接着输入一个_符, 然后才能继续输入下一个数据。 10. 在C+程序中包含一个头文件或程序文件的预编译命令为_。 11. 程序中的预处理命令是指以_字符开头的命令。 12. 一条表示式语句必须以_作为结束符。 13. 在#include命令中所包含的头文件, 能够是系统定义的头文件, 也能够是_定义的头文件。 14. 使用#include命令能够包含一个头文件, 也能够包含一个_文件。 15一个函数定义
16、由_和_两部分组成。 16若一个函数的定义处于调用它的函数之前, 则在程序开始能够省去该函数的_语句。 17C+头文件和源程序文件的扩展名分别为_和_。 18程序文件的编译错误分为_和_两类。 19当使用_保留字作为函数类型时, 该函数不返回任何值。 20当函数参数表用_保留字表示时, 则表示该参数表为空。 21从一条函数原型语句”int fun1(void);”可知, 该函数的返回类型为_, 该函数带有_个参数。 22. 当执行cout语句输出endl数据项时, 将使C+显示输出屏幕上的光标从当前位置移动到_的开始位置。 23. 假定x=5, y=6, 则表示式x+*+y的值为_。 24.
17、假定x=5, y=6, 则表示式x-*-y的值为_。 25. 假定x=5, y=6, 则执行表示式y*=x+计算后, x和y的值分别为_和_。 26. 假定x=5, y=6, 则执行表示式y+=x-计算后, x和y的值分别为_和_。 27. C+常数0x145对应的十进制值为_。 28. C+常数0345对应的十进制值为_。 29. 十进制常数245对应的十六进制的C+表示为_。 30. 十进制常数245对应的八进制的C+表示为_。 31. signed char类型的值域范围是_至_之间的整数。 32. int和float类型的数据分别占用_和_个字节。 33. float和double类型
18、的数据分别占用_和_个字节。 34. bool和char类型的数据分别占用_和_个字节。 35. unsigned short int和int类型的长度分别为_和_。 36. 字符串”Thiss a book.n”的长度为_。 37. 字符串”nThiss a pennn”的长度为_。 38. 在C+中存储字符串”abcdef”至少需要_个字节。 39. 在C+中存储字符串”a+b=c”至少需要_个字节。 40. 假定x和y为整型, 其值分别为16和5, 则x%y和x/y的值分别为_和_。 41. 假定x和y为整型, 其值分别为16和5, 则x/y和double(x)/y的值分别为_和_。 4
19、2. 假定x是一个逻辑量, 则x & true的值为_。 43. 假定x是一个逻辑量, 则x | true的值为_。 44. 假定x是一个逻辑量, 则x & false的值为_。 45. 假定x是一个逻辑量, 则x | false的值为_。 46. 假定x是一个逻辑量, 则!x | false的值为_。 47. 假定x是一个逻辑量, 则x & !x的值为_。 48. 假定x是一个逻辑量, 则x | !x的值为_。 49. 数学算式的C+表示式为_。 50. 数学算式的C+表示式为_。 51. 数学算式的C+表示式为_。 52. 设enum Printstatusready,busy,error
20、; 则 coutbusy的输出结果是_。 53. 设enum Printstatusready=2,busy,error; 则coutbusy的输出结果是_。 54. 常数-4.205和6.7E-9分别具有_和_位有效数字。 55. 枚举类型中的每个枚举值都是一个_, 它的值为一个_。 56. 常数100和3.62的数据类型分别为_和_。 57. 若x=5, y=10, 则计算y*=+x表示式后, x和y的值分别为_和_。 58. 假定x和ch分别为int型和char型, 则sizeof(x)和sizeof(ch)的值分别为_和_。 59. 假定x=10, 则表示式x=10?20:30的值为_
21、。 60. 表示式sqrt(81)和pow(6,3)的值分别为_和_。三、 程序填充题, 对程序、 函数或类中划有横线的位置, 根据题意按标号把合适的内容填写到程序下面相应标号的后面。1. 斐波那契数列的第1和第2个数分别为0和1 , 从第三个数开始, 每个数等于其前两个数之和。求斐波那契数列中的前20个数, 要求每行输出5个数。#includevoid main() int f,f1,f2,i; cout” 斐波那契数列: n”; f1=0; f2=1; coutsetw(6)f1setw(6)f2; for(i=3;i=20;i+) f=_(1)_; coutsetw(6)f;if(_(2
22、)_) coutendl;f1=f2;f2=_(3)_; coutendl; (1) (2) (3) 2. 计算的值。 #include void main() double x,p1=1,p2=1,s=0; int i,j=1; coutx; for(i=1;i=10;i+) p1*=_(1)_; p2*=_(2)_; s+=j*p1/p2; /j的值为(-1)i+1 j=_(3)_; coutsendl; (1) (2) (3) 3. 打印出2至99之间的所有素数(即不能被任何数整除的数)。 #include #include void main() int i,n; for(n=2; _
23、(1)_; n+) int temp=int(sqrt(n); /求出n的平方根并取整 for(i=2; _(2)_; i+) if(n%i=0) _(3)_; if(itemp) coutn ; coutn; (1) (2) (3) 4. 采用辗转相除法求出两个整数的最大公约数。 #include void main() int a,b; coutab; while(a=0 | _(1)_) coutab; while(b) int r; r=a%b; _(2)_; _(3)_; /分别修改a和b的值 coutaendl; /输出最大公约数 (1) (2) (3) 5. 把从键盘上输入的一个
24、大于等于3的整数分解为质因子的乘积。如输入24时得到的输出结果为”2 2 2 3”, 输入50时得到的输出结果为”2 5 5”, 输入37时得到的输出结果为”37”。 #include void main() int x; coutx; while(_(1)_); int i=2; do while(_(2)_) couti ; x/=i; _(3)_; while(ix); if(x!=1) coutx; cout=i & _(3)_); return p*a*b; (1) (2) (3) 7. 在输出屏幕上打印出一个由字符*组成的等腰三角形, 该三角形的高为5行, 从上到下每行的字符数依次
25、为1,3,5,7,9。 #include void main() int i,j; for(i=1;_(1)_;i+) for(j=1;j=9;j+) if(j=5-i | _(2)_) cout ; else _(3)_; coutendl; (1) (2) (3) 8. 统计字符串中英文字母个数的程序。 #include int count (char str); void main() char s180; cout s1; cout ”count=”count(s1)=a & stri=z |_(1)_ ) _(2)_; _(3)_; (1) (2) (3) 9. 主函数调用一个fun
26、函数将字符串逆序。 #include #include _(1)_; void main( ) char s80; cins; _(2)_; cout”逆序后的字符串:”sendl ; void fun(char ss) int n=strlen(ss); for(int i=0; _(3)_; i+) char c=ssi; ssi=ssn1i; ssn1i=c; (1) (2) (3) 10. 从一个字符串中删除所有同一个给定字符后得到一个新字符串并输出。 #include const int len=20; void delstr(char a,char b,char c); void
27、main() char str1len,str2len; char ch; coutstr1; coutch; delstr(str1,str2,ch); coutstr2endl; void delstr(char a,char b,char c) int j=0; for(int i=0; _(1)_; i+) if(_(2)_) bj+=ai; bj=_(2)_; (1) (2) (3) 四、 写出程序运行结果 1. #include #include void main() int a8=25,48,32,85,64,18,48,29; int max,min; max=min=a0;
28、 for(int i=0; iai) max=ai; if(minai) min=ai; coutmax:maxendl; coutmin:minendl; 2. #include void main() int a,b; for(a=1,b=2; b50;) couta b ; a=a+b; b=a+b; coutendl; couta b endl; 3. #include const int M=3, N=4; void main() int i,j,s=0; for(i=1;i=M;i+) for(j=1;j=N;j+) s+=i*j; cout”s=”sendl; 4. #include void main() int a=2,b=5,