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
2、 D. lik 4. C++程序从上机到得到结果的几个操作步骤依次是( )。 A. 编译、 编辑、 连接、 运行 B. 编辑、 编译、 连接、 运行 C. 编译、 运行、 编辑、 连接 D. 编辑、 运行、 编辑、 连接 5. 以下标识符中不全是保留字的是( ) 。 A. case for int B. default then while C. bool class long D.
3、 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++语言用户标识符的一组标识符是( )。
4、 A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof 10. 存储以下数据, 占用存储字节最多的是( ) 。 A. 0 B. ‘0’ C. ”0” D. 0.0 11. 程序运行中需要从键盘上输入多于一个数据时, 各数据之间应使用( )符号作为分隔符。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号
5、D. 空格或回车 12. 设”int a=12;”, 则执行完语句”a+=a*a;”后, a的值是( )。 A. 12 B. 144 C. 156 D. 288 13. 假设在程序中 a、 b、 c 均被定义成整型, 所赋的值都大于1, 则下列能正确表示代数式的表示式是( )。 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;”, 则”cout<<(a,b);”的输出结果是(
6、 )。 A. 15 B. 26,15 C. 15,26 D. 26 15. 设x是一个bool型的逻辑量, y的值为10, 则表示式 x && y的值为( ) 。 A. 1 B. 0 C. 与x值相同 D. 与x值相反 16. x>0 && x<=10的相反表示式为( ) 。 A. x<=0 || x>10 B. x<=0 && x>10 C. x<=0 || x<=10 D. x>0 && x>10 17. x>0 || y==5的相反表
7、示式为( ) 。 A. x<=0 || y!=5 B. x<=0 && y!=5 C. x>0 || y!=5 D. x>0 && y==5 18.设x和y均为bool量, 则x && y为真的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 19.设x和y均为bool量, 则x || y为假的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假
8、 D. 其中一个为假 20. 字符串”a+b=12\n”的长度为( ) 。 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;
9、 C. const char ch; D. const bool mark=true;
23. 循环语句”for(int i=0; i
10、 C. n/2-1 D. n-1
25. 在下面循环语句中内层循环体S语句的执行总次数为( ) 。
for(int i=0; i 11、 B. 5 C. 6 D. 7
27. 在下面循环语句中循环体执行的次数为( ) 。
int i=0; do i++; while(i*i<10);
A. 4 B. 3 C. 5 D. 2
28. 当处理特定问题时的循环次数已知时, 一般采用( ) 来解决。
A. for循环 B. while循环 C. do循环 D. switch语句
29. 循环体至少被执行一次的语句为( ) 。
A. 12、 for循环 B. while循环 C. do循环 D. 任一种循环
30. switch语句能够改写为( ) 语句。
A. for B. if C. do D. while
31. do语句能够改写为( ) 语句。
A. 复合 B. if C. switch D. while
32. 在下面的一维数组定义中, 哪一个有语法错误。( )
A. int a[]={1,2,3}; B. int 13、 a[10]={0};
C. int a[]; D. int a[5];
33. 在下面的字符数组定义中, 哪一个有语法错误。( ) 。
A. char a[20]=”abcdefg”; B. char a[]=”x+y=55.”;
C. char a[15]; D. char a[10]=’5’;
34. 在下面的二维数组定义中, 正确的是( )。
A. int a[5][]; B. int a 14、[][5];
C. int a[][3]={{1,3,5},{2}}; D. int a[](10);
35. 假定一个二维数组的定义语句为”int a[3][4]={{3,4},{2,8,6}};”, 则元素a[1][2]的值为( ) 。
A. 2 B. 4 C. 6 D. 8
36. 假定一个二维数组的定义语句为”int a[3][4]={{3,4},{2,8,6}};”, 则元素a[2][1]的值为( ) 。
A. 0 B. 4 C. 15、 8 D. 6
37. 若定义了函数 double *function(), 则函数function的返回值为( ) 。
A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址
38. 以下说法中正确的是( ) 。
A. C++程序总是从第一个定义的函数开始执行
B. C++程序总是从main函数开始执行
C. C++函数必须有返回值, 否则不能使用函数
D. C++程序中有调用关系的所有函数必须放在同一个程序文件中
16、39. 以下叙述中不正确的是( ) 。
A. 在一个函数中, 能够有多条return语句
B. 函数的定义不能嵌套, 但函数的调用能够嵌套
C. 函数必须有返回值
D. 不同的函数中能够使用相同名字的变量
40. 函数重载是指( ) 。
A. 两个或两个以上的函数取相同的函数名, 但形参的个数或类型不同
B. 两个以上的函数取相同的名字和具有相同的参数个数, 但形参的类型能够不同
C. 两个以上的函数名字不同, 但形参的个数或类型相同
17、 D. 两个以上的函数取相同的函数名, 而且函数的返回类型相同
41. 以下关于函数模板叙述正确的是( ) 。
A. 函数模板也是一个具体类型的函数
B. 函数模板的类型参数与函数的参数是同一个概念
C. 经过使用不同的类型参数, 函数模板能够生成不同类型的函数
D. 用函数模板定义的函数没有类型
42. 下列( ) 的调用方式是引用调用。
A. 形参和实参都是变量 B.形参是指针, 实参是地址值
C. 形参是引用, 实参是变 18、量 D.形参是变量, 实参是地址值
43. 为了提高程序的运行速度, 可将不太复杂的功能用函数实现, 此函数应选择( ) 。
A. 内联函数 B.重载函数 C.递归函数 D.函数模板
44. 函数原型语句正确的是( ) 。
A. int Function(void a); B.void Function (int);
C. int Function(a); D.void int(double a);
45. C++中函数返回值的类型是由( ) 决 19、定的。
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复制到字符串p中 D.将字符串x反向存放 20、
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);
}
在主函数中用cout< 21、 B. 4 C. 5 D. 6
49. 以下正确的函数原型语句是( )。
A. double fun(int x,int y)
B. double fun(int x;int y)
C. double fun(int,int);
D. double fun(int x,y);
50. 以下正确的说法是( ) 。
A. 用户调用标准库函数前, 必须重新定义
B. 用户能够重新定义标准库函数, 若如此, 该函数将失去原有含义 22、
C. 系统不允许用户重新定义标准库函数
D. 用户调用标准库函数前, 不必使用预编译命令将该函数所在文件包括到用户源文件中
二、 填空题
1. C++语言是在_________语言的基础上发展起来的。
2. C++语言的编译单位是扩展名为__________的__________文件。
3. 行尾使用注释的开始标记符为__________。
4. 多行注释的开始标记符和结束标记符分别为__________和__________。
5. 用于输出表示式值的标准输出流对象是_________。
23、6. 用于从键盘上为变量输入值的标准输入流对象是________。
7. 一个完整程序中必须有一个名为________的函数。
8. 一个函数的函数体就是一条_________语句。
9. 当执行cin语句时, 从键盘上输入每个数据后必须接着输入一个________符, 然后才能继续输入下一个数据。
10. 在C++程序中包含一个头文件或程序文件的预编译命令为__________。
11. 程序中的预处理命令是指以______字符开头的命令。
12. 一条表示式语句必须以______作为结束符。
13. 在#include命 24、令中所包含的头文件, 能够是系统定义的头文件, 也能够是________定义的头文件。
14. 使用#include命令能够包含一个头文件, 也能够包含一个______文件。
15.一个函数定义由________和________两部分组成。
16.若一个函数的定义处于调用它的函数之前, 则在程序开始能够省去该函数的______语句。
17.C++头文件和源程序文件的扩展名分别为______和______。
18.程序文件的编译错误分为________和________两类。
19.当使用_______保留字作为函数类型时, 该函数不 25、返回任何值。
20.当函数参数表用______保留字表示时, 则表示该参数表为空。
21.从一条函数原型语句”int fun1(void);”可知, 该函数的返回类型为______, 该函数带有______个参数。
22. 当执行cout语句输出endl数据项时, 将使C++显示输出屏幕上的光标从当前位置移动到________的开始位置。
23. 假定x=5, y=6, 则表示式x++*++y的值为__________。
24. 假定x=5, y=6, 则表示式x--*--y的值为__________。
25. 假定x=5, y=6, 26、 则执行表示式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 cha 27、r类型的值域范围是________至__________之间的整数。
32. int和float类型的数据分别占用_________和__________个字节。
33. float和double类型的数据分别占用_________和________个字节。
34. bool和char类型的数据分别占用_________和________个字节。
35. unsigned short int和int类型的长度分别为_________和________。
36. 字符串”This\’s a book.\n”的长度为__________。
28、 37. 字符串”\nThis\’s a pen\n\n”的长度为__________。
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的值分别为__________和__________。
42. 假定x是一个逻辑量, 则x && tr 29、ue的值为__________。
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. 数学算式 30、的C++表示式为________________。
50. 数学算式的C++表示式为________________。
51. 数学算式的C++表示式为________________。
52. 设enum Printstatus{ready,busy,error}; 则 cout< 31、位有效数字。
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的值为______。
60. 表示式sq 32、rt(81)和pow(6,3)的值分别为______和______。
三、 程序填充题, 对程序、 函数或类中划有横线的位置, 根据题意按标号把合适的内容填写到程序下面相应标号的后面。
1. 斐波那契数列的第1和第2个数分别为0和1 , 从第三个数开始, 每个数等于其前两个数之和。求斐波那契数列中的前20个数, 要求每行输出5个数。
#include 33、6)< 34、 {
double x,p1=1,p2=1,s=0;
int i,j=1;
cout<<"输入x的值:";
cin>>x;
for(i=1;i<=10;i++) {
p1*=___(1)_____;
p2*=____(2)____;
s+=j*p1/p2; //j的值为(-1)i+1
j=____(3)____;
}
cout< 35、 }
(1) (2) (3)
3. 打印出2至99之间的所有素数(即不能被任何数整除的数)。
#include 36、 ___(2)___; i++)
if(n%i==0) ___(3)___;
if(i>temp) cout< 37、 cout<<"请输入两个正整数:";
cin>>a>>b;
while(a<=0 || __(1)___) {cout<<"重新输入:"; cin>>a>>b;}
while(b) {
int r;
r=a%b;
___(2)___; ___(3)___; //分别修改a和b的值
}
cout< 38、 (2) (3)
5. 把从键盘上输入的一个大于等于3的整数分解为质因子的乘积。如输入24时得到的输出结果为”2 2 2 3”, 输入50时得到的输出结果为”2 5 5”, 输入37时得到的输出结果为”37”。
#include 39、i=2;
do{
while(___(2)___) {
cout< 40、t f2(int a, int b)
{
int i=2, p=1;
do {
while(a%i==0 && ___(1)___) {
p*=i; a/=i; b/=i;
}
___(2)___;
}while(a>=i && ___(3)___);
return p*a*b;
}
(1) (2) (3)
41、 7. 在输出屏幕上打印出一个由字符’*’组成的等腰三角形, 该三角形的高为5行, 从上到下每行的字符数依次为1,3,5,7,9。
#include 42、
}
}
(1) (2) (3)
8. 统计字符串中英文字母个数的程序。
#include 43、t(s1)< 44、 (3)
9. 主函数调用一个fun函数将字符串逆序。
#include 45、 i++) {
char c=ss[i];
ss[i]=ss[n–1–i];
ss[n–1–i]=c;
}
}
(1) (2) (3)
10. 从一个字符串中删除所有同一个给定字符后得到一个新字符串并输出。
#include 46、],char c);
void main() {
char str1[len],str2[len];
char ch;
cout<<"输入一个字符串:";
cin>>str1;
cout<<"输入一个待删除的字符:";
cin>>ch;
delstr(str1,str2,ch);
cout< 47、r c)
{
int j=0;
for(int i=0; ___(1)___; i++)
if(___(2)___) b[j++]=a[i];
b[j]=___(2)___;
}
(1) (2) (3)
四、 写出程序运行结果
1. #include 48、 {
int a[8]={25,48,32,85,64,18,48,29};
int max,min;
max=min=a[0];
for(int i=0; i<8; i++) {
if(max>a[i]) max=a[i];
if(min 49、 }
2. #include 50、stream.h>
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=”<
void main()
{
int a=2,b=5,






