admin 管理员组

文章数量: 887021


2023年12月16日发(作者:format函数格式化字符串)

C++常见选择填空习题集

第一章 概述

一、选择题

1。 关于C++与C语言的关系描述中,错误的是( )

A. C语言与C++是兼容的 B。 C语言是C++的一个子集

C. C++和C语言都是面向对象的 D。 C++对C语言进行了一些改进

2. 不可以作为C++用户标识符的是( )

A。 Printf B。 _123 C. While D. case

3. 由C++目标文件连接而成的可执行文件的缺省扩展名为( )

A. cpp B。 obj C。 lib D. exe

4. 关于C和C++的描述中,正确的是( )

A. C是面向过程,C++是纯面向对象 B. C++是C的超集

C。 C++是对C的错误的修改 D。 C++和C没有关系

5。 C++对C作了很多改进,从面向过程成为面向对象的主要原因是( )

A。 增加了一些新的运算符 B. 允许函数重载,并允许设置参数默认值

C. 规定函数必须用原型 D. 引进了类和对象的概念

6。 将高级语言编写的源程序翻译成目标程序的是( )

A。 解释程序 B。 编译程序 C. 汇编程序 D. 调试程序

7。 C++语言是从早期的C语言逐渐发展演变而来的,与C语言相比,它在求解问题方法上进行的

最大改进是( )

A. 面向过程 B。 面向对象 C。 安全性 D. 复用性

8. C++语言支持过程程序设计方法和( )设计方法。

A。 面向对象 B. 面向函数 C. 面向用户 D。 面向问题

9。 关于C++和C的关系中,使C发生了质的变化,即从面向过程变成为面向对象的是( )

A。 增加了新的运算符 B。 允许函数重载,并允许缺省参数

C。 规定函数有原型 D. 引进了类和对象的概念

10。 C++语言最有意义的方面是支持( )

A。 面向事件 B. 面向程序 C。 面向对象 D. 面向用户

11.下列说法中,正确的是( )

A. C++程序总是从第一个定义的函数开始执行

B. C++程序总是从主函数开始执行

C。 C++函数必须有返回值,否则不能调用此函数

D。 C++程序中有调用关系的所有函数必须放在同一个源程序文件中

12。 下列描述中,正确的是( )

C++常见选择填空习题集

A. 程序就是软件 B。 软件开发不受计算机系统的限制

C. 软件既是逻辑实体,又是物理实体 D. 软件就是程序、数据与相关文档的集合

13. 为了使模块尽可能独立,要求( )

A. 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B。 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C. 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D。 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

14. 下列说法中正确的是( )

A。 数据流图详细描述了系统中对象数据是如何计算的

B. 数据流图详细描述了操作和约束的含义

C。 数据流图中不能有过程

D。 数据流图定义了对象的操作

15。 在C++语言中,自定义的标识符( )

A。 能使用关键字并且不区分大小写 B. 不能使用关键字并且不区分大小写

C。 能使用关键字并且区分大小写 D. 不能使用关键字并且区分大小写

16. 不能用于组成C++程序标识符的是( )

A. 连接符 B。 下划线 C。 大小写字母 D. 数字字符

17。 下列标识符中都是合法的是( )

A. _key, example, a_b B。 5ap, test1, _3a

C。 bcp, @mail, _c_d D. INL, _paper, union

18。 下列符号中,不可作为分隔符的是( )

A。 逗号 B。 分号 C。 问号 D. 英文句号

19. 下列变量名中,合法的是( )

A. CHINA B。 byte—size C. double D。 A+a

20。 在C++语言中,自定义的标识符( )

A。 能使用关键字并且不区分大小写 B. 不能使用关键字并且不区分大小写

C。 能使用关键字并且区分大小写 D. 不能使用关键字并且区分大小写

21. C++程序的基本单位是( )

A。 字符 B. 程序行 C。 语句 D. 函数

22. 注释的目的主要是用来提高( )

A. 可读性 B. 可移植性 C。 运行效率 D. 编码效率

23. 程序中的注释部分( )

A。 参加编译,并会出现在目标程序中 B. 参加编译,但不会出现在目标程序中

C。 不参加编译,但会出现在目标程序中 D。 不参加编译,也不会出现在目标程序中

24. 在一个C++程序中( )

A。 main函数必须出现在所有函数之前 B。 main函数可以在任何地方出现

C。 main函数必须出现在所有函数之后 D. main函数必须出现在固定位置

C++常见选择填空习题集

25。 C++语言可执行程序的开始执行点是( )

A. 程序中第一条可执行语言 B。 程序中第一个函数

C。 程序中的main函数 D。 包含文件中的函数

26. 以下关于C++语言的叙述中,错误的是( )

A。 大写字母和小写字符的意义相同

B. 有些不同类型的变量可以在一个表达式中运算

C. 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型

D。 同一个运算符号在不同的场合可以有不同的含义

二、填空题

1。 判断一种计算机语言是否为面向对象程序设计语言的三个基本特征是封装性 、继承性 和 多态性 .

2。 在面向对象语言中 可扩充性 是关键。

3. 在C++语言中,“/*…*/”主要用于多行 行注释,“//”用于单 行注释。

4。 C++程序的实现经过编辑 、编译 和运行 步骤。

5。 在一个好的程序中,注释可提高程序的 程序的可读性。

6。 C++源程序文件的默认扩展名为。cpp .

7. C++程序在编译中会出现的两类错误分别是致命 错误和警告 错误.

8. C++编译器进行编译的过程可详细地分为三个子过程,它们分别是预处理过程、编译过程和连接过程。

第二章 数据类型与表达式

一、选择题

1. 常量3。14的数据类型是( )

A. double B. float C. void D. 字符串

2。 设有定义:char ch;,以下赋值语句正确的是( )

A. ch=’123'; B. ch='xff'; C. ch=’08’; D. ch=’';

3。 英文大写字母B的ASCII码为42H,英文小写字母b的ASCII码为( )

A. 43H B。 62H C。 74H D. 84H

4。 unsigned不能修饰的类型是( )

A. int B。 char C。 float D。 long int

5。 下列字符常量表示中,错误的是( )

A。 .105. B. .*。 C. .4f. D。 。a。

6。 signed不能修饰的类型是( )

A. int B。 char D. long int

7. 下列字符串常量表示中,错误的是( )

A. "”Yes” or "No"” B。 ".OK!。”

C. ”abcdn" D。 ”ABC"

C++常见选择填空习题集

8. 下列十六进制的整型常量表示中,错误的是( )

A。 0xaf B. 0X1b C。 2fx D. 0xAE

9。 下列double型常量表示中,错误的是( )

A. E15 B。 .25 C。 3E5 D. 3E05

10. 设有定义char ch;,正确的赋值语句是( )

A。 ch=.123。; B. ch=。xff。; C。 ch=.08。 D. ch=..

11在C++语言中,080是( )

A. 八进制数 B. 十进制数 C. 十六进制数 D。 非法数

12。 关于字符’0'的下列描述中不正确的是( )

A。 常用来作为字符串的结束标志 B. 在计算机中存储时占一个字节的内存

C. 是空格字符的转义表示形式 D. 作为逻辑值使用时等价于逻辑“假”

13。 在32位机器环境下,若有int a[10];,则表达式sizeof(a)/sizeof(int)的值是( )

A. 10 B. 4 C。 40 D。 2

14. 在C++语言中,char型数据在内存中的存储形式是( )

A。 ASCII码 B. 补码 C。 反码 D。 原码

15. 字符串””ABC”"的长度是( )

A。 11 B。 7 C。 8 D。 6

16。 设:int a=2, b=2;,则a++ +b的结果是( )

A。 2 B. 3 C。 4 D. 5

17。 若有定义:int x=2;,则表达式x〈<2的结果为( )

A. 2 B。 4 C。 8 D。 16

18。 已知:int a=5,b=6;,则下列表达式中,有二义性的是( )

A. a+b>>3 B. ++a+b++ C. b+(a=3) D. (a=3)-a++

19。 下列运算符中优先级最高的是( )

A。 = B。 && C. 〉= D。 +

20. 下列运算符中优先级最低的是( )

A. % B. %= C. & D. 〉〉

21。 表达式(—17)%5的值( )表达式(-17)%(-5)的值。

A。 大于 B. 等于 C。 小于 D。 不确定

22. 下列运算符中,结合性从左向右的是( )

A。 —〉 B. >> C. != D. ~

23. 若int a=2,b=3;,则表达式a++ +b++的值为( )

C++常见选择填空习题集

A. 11 B。 9 C. 7 D。 5

24。 设有定义int a; float f; double i;,表达式10+。a.+i*f的结果类型是( )

A。 int B. float C。 double D. 不确定

25。 sizeof(double)是一个( )

A. 整型表达式 B. 双精度表达式 C。 函数调用 D。 不合法

26。 下列关于类型转换的描述中错误的是( )

A。 在不同类型操作数组成的表达式中,表达式类型一定是最高类型double型

B. 逗号表达式的类型是最后一个子表达式的类型

C. 赋值表达式的类型是左值的类型

D. 在由低向高的类型转换中是保值映射

27。 下列说法中正确的是( )

A. 隐含类型转换可能会损失数据精度 B。 显式类型转换可能会损失数据精度

C. 隐含类型转换一定会损失数据精度 D. 显式类型转换一定会损失数据精度

28. 在隐含类型转换中,long、int、double三种类型之间的转换顺序为( )

A. long—〉int—>double B。 long—〉double—>int

C. int-〉double->long D。 int->long->double

29。 下列说法正确的是( )

A。 隐含类型转换可以从高类型转换为低类型

B. 显式类型转换不可以从低类型转换为高类型

C. 隐含类型转换可以在任何类型之间转换

D。 显式类型转换可以在任何类型之间转换

30. 设int n=10,i=4;,则表达式n%=i+1运算后n的值是( )

A。 0 B. 3 C。 2 D. 1

31. 下列运算符中,可以作用于浮点数的是( )

A。 ++ B。 % C. >> D。 &

32. 下列各运算符中,不可以作用于浮点数的是( )

A. / B。 && C。 || D。 ~

33. 下列运算符中,可以作用于浮点数的是( )

A。 ++ B. % C. >> D。 ^

34. 下列运算符中,结合性从左到右的是( )

A。 ?: B. *= C。 == D。 ++

35. 若有下面的定义,则表达式:a

int a=1, b=2, c=3, d=4;

A. 1 B。 2 C。 3 D。 4

36. 设x为int型变量,则执行下列语句后,x的值为( )

C++常见选择填空习题集

x=10;

x+=x—=x-x;

A. 10 B。 20 C. 30 D。 40

37。 若有下面的定义,则对语句c=a+b;的下列说法中正确的是( )

int a=12;

float b=1。2f, c;

A. 变量a转换为float类型

B. 变量b转换为int类型,运算结果再转换为float类型

C。 变量a和b都转换为一中间类型,运算结果再转换为float类型

D。 以上都不对

38. 执行下列语句后,a的值是( )

int a = 8;

a += a -= a*a;

A. -240 B。 64 C。 112 D. —112

39. 能正确表示“大于10且小于20的数”的C++表达式是( )

A. 10〈x〈20 B。 x〉10||x<20 C. x>10&x<20 D. !(x〈=10||x>=20)

40。 表示关系x≤y≤Z的C++语言表达式为( )

A。 (x<=y)&&(y〈=Z) B。 (x〈=y)AND(y〈=Z)

C. (x<=y〈=Z) D。 (x<=y)&(y<=Z)

41。 设x, y, z均为int型变量,则执行以下语句后,t的值为( )

x=y=z=1;

t=++x||++y&&++z;

A. 0 B。 1 C。 2 D. 不定值

42。 若有如下语句:

int a,b,c;

a=b=c=5;

则执行语句:

b+=++a&&++c>b;

后a、b、c的值分别为( )

A. 6,7,6 B. 6,6,6 C. 6,6,5 D。 6,1,6

43。 在C++中,const修饰符主要用于代替C语言中的( )关键字进行常量定义。

A. #include B。 static C. #define D. #ifdef

二、填空题

1. 在32位计算机中,若有double *p;,则p占用 4 字节的内存空间。

2. 在C++中,用同一个数据类型定义多个变量时需要用逗号分隔。

3. 变量的三要素分别是(变量的)类型、(变量的)名字(或变量名)、(变量的)值。

4. 表达式(—9)%4的值为-1 ,表达式9%(—4)的值为1 ,表达式(—9)%(-4)的值为-1

5。 在C++中,’0' 被用来作为字符串的结束符.

C++常见选择填空习题集

6. 空字符串的长度为1。

7。 在C++中,变量必须遵循先定义后使用的原则。

8. 在16位计算机中,int数据类型占用2个字节。

9. 数据类型转换分为 自动类型转换(隐含类型转换)和强制类型转换(显式类型转换)两种。

10. 在32位机器中,若有:int a[10];则表达式sizeof(a)/sizeof(int)的值为10。

11。 在32位机器中,若有:int a[10];则表达式sizeof(a)的值为40。

12。 变量的类型既规定了 占用内存字节数(大小) ,也规定了 合法操作。

13. 没有初始化的变量其存储的值要么是默认值,要么是

机器(计算机)决定。

15。 条件表达式的类型由:号前后两个子表达式的高类型决定.

16.赋值表达式的类型由赋值运算符的左值的类型决定。

17。 逻辑运算符&&和||的特点是在计算时存在短路现象.

18。 若有定义:

int a(4), b(2);

则表达式 a&&b||a++||(a—b*2) 运算完成后a的值为4 。

19。 设int型变量x的值为10,则表达式x〉10?x+100:x-100的值是-90。

三、写程序运行结果

1. #include

using namespace std;

int main()

{

float x;

int i;

x=12.6;

i=(int)x;

cout<<"x=”〈〈x〈〈endl;

cout<<"i="〈

x=12。6

y=12

2. #include

using namespace std;

int main()

{

int i;

char c1;

i='A’;

c1=’A’;

cout<

cout<〈c1〈〈’n’;

return 0;

65

A

C++常见选择填空习题集

3。 #include 〈iostream>

using namespace std;

int main()

{

cout〈〈"abc"abc"〈

cout<〈”abcabc”〈

abc"abc

abcabc

4。 #include 〈iostream>

using namespace std;

int main()

int i=1;

cout〈〈"i="<<++i<

cout〈〈"i=”〈

}

i=2

i=2

5。 #include

void main()

{

int a;

a=7*2+-3%5—4/3;

double b;

b=510+3.2-5。4/0。03;

cout<

int m(3),n(4);

a=m++ - -—n;

cout〈〈a<〈”t”〈〈m〈<”t”〈

10 333.2

0 4t3

6. #include

void main()

int x,y,z;

x=y=z=1;

-—x && ++y && ++z;

cout〈〈x〈〈't’<〈y<<’t’<

++x && ++y && ++z;

C++常见选择填空习题集

cout<〈x〈<'t’〈

++x && y-—||++z;

cout〈〈x〈〈’t'〈〈y〈〈't'〈〈z<〈’n’;

0 1 1

1 2 2

2 1 2

7。 #include

void main()

{

char x(’m’),y(’n');

int n;

n=x〈y;

cout〈〈n<

n=x==y-1;

cout〈〈n<〈endl;

n=(’y'!='Y')+(5>3)+(y-x==1);

cout〈〈n<

1

1

3

四、改错题

1。 下面程序要求输出x和y的值,x的值为10,y的值为11。

#include

using namespace std;

void main() {

const int x;

int y=10;

y=x++;

cout〈〈x,y;

}

第三章 语句

一、选择题

1。 关于switch语句的描述中,正确的是( )

A。 switch语句中default子句可以没有,也可有一个

B。 switch语句中每个case语句序列中必须有break语句

C++常见选择填空习题集

C. switch语句中default子句只能放在最后

D. switch语句中case子句后面的表达式只能是整型表达式

2. 下列关于goto语句的描述中正确的是( )

A。 goto语句可以在一个文件中随意转向

B. goto语句后面要跟上一个它所转向的语句

C。 goto语句可以同时转向多条语句

D. goto语句可以从一个循环体内转到循环体外

3. 与以下程序段等价的是( )

while(a) { if(b) continue; c; }

A。 while(a) { if(!b) c; } B. while(c) { if(!b) break; c; }

C。 while(c) { if(b) c; } D。 while(a) { if(b) break; c; }

4。 在设计C++程序时,应采用的原则之一是( )

A。 不限制goto语句的使用 B. 减少或取消注释行

C。 程序越短越好 D。 程序结构应有助于读者理解

5。 for(int m=n=0; !n&&m〈=10; m++);语句的循环次数为( )

A. 10 B. 11 C。 12 D. 无限

6. 下面的do语句的循环体执行次数为( )

int a=10;

do { a-—; }while(a!=0);

A。 10 B. 9 C. 11 D. 12

7。 下列for循环的循环体执行次数为(假设循环体中没有引用i和j)( )

for(int i=0, j=10; i=j=10; i++,j-—)循环体;

A。 0 B。 1 C. 10 D。 无限

8。 下列关于if语句的描述中错误的是( )

A. if语句中只有一个else子句 B. if语句中可以有多个else if子句

C。 if语句中if体内不能是开关语句 D. if语句的if体中可以是循环语句

9. 下面的程序( )

#include 〈iostream.h〉

void main()

{

int a=5, b=4, c=3;

if( a = b+c ) cout〈<”***”<〈endl;

else cout〈〈"$$$”〈

A. 有语法错误,不能通过编译 B。 可以通过编译但不能通过连接

C. 输出*** D。 输出$$$

10. 为了避免嵌套的if-else语句的二义性,C++规定else总是与( )组成配对关系。

A. 缩排位置相同的if B。 在其之前未配对的if

C++常见选择填空习题集

C。 在其之前未配对的最近的if D. 同一行上的if

11执行下列程序,输入为1时的输出结果是( )

#include

void main()

int k;

cin〉>k;

switch(k)

case 1: cout〈〈k++〈<” ”;

case 2: cout〈

case 3: cout〈

case 4: cout<〈k++〈<” ”; break;

default: cout〈<”Full!” 〈〈" ”;

}

cout<〈endl;

A。 1 B. 2 C。 2 3 4 5 D. 1 2 3 4

12。 下列while循环的循环次数为( )

while(int i=0)i-—;

A. 0 B. 1 C。 5 D。 无限

13。 下列do-while循环的循环次数为( )

已知:int i=5;

do { cout << i-— 〈

A。 1 B. 2 C. 5 D。 无限

14. 下列描述正确的是( )

A。不是每个C++程序都必须包含预处理命令#include

B. C++程序必须有return语句

C. C++程序中的变量必须定义在主程序内部

D. C++程序中所使用的符号常量可以不进行定义

15. 已知int x,y;,下列switch语句中,正确的是( )

A。 switch(x*y) B。 switch

{ {

case 1: x*y; break; case 1,5: x++;

case 2: break; case 3,7: y++;

} }

C。 switch(x) D. switch(x+y/100)

{ {

case x: x*x; break; case x: x*x/100; break;

case y: y*y; break; case y: y*y/100; break;

} }

C++常见选择填空习题集

16。 下列关于goto语句的描述中正确的是( )

A。 goto语句可以在一个程序中随意转向.

B。 循环体中不能出现goto语句

C。 goto语句后面要跟上一个它所要转向的语句

D。 goto语句不是结构化语句

17。执行以下程序段的输出结果是( )

int s1=0,s2=0,s3=0,s4=0;

for(int t=1;t<=4;t++)

switch(t){

case t〉=4:s1++;break;

case t〉=3:s2++;break;

case t〉=2:s3++;break;

default:s4++;

}

cout<〈s1〈〈',’〈

A. 1,1,1,2 B. 1,2,3,2 C. 1,1,2,2 D. 编译不通过

18。 执行for(int i=10; i>1; —-i) cout<〈。*.;语句段后,输出字符“*”的个数是( )

A. 7 B。 8 C。 9 D。 10

二、写程序运行结果

1。 写出下面的程序的运行结果

#include

#include

void main()

int i,j,k;

for(i=1; i〈=6; i++)

for(j=1; j<=20-2*i; j++) cout<〈" ";

for(k=1;k<=i; k++) cout〈〈setw(4)<〈i;

cout<

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

#include

#include

void main()

C++常见选择填空习题集

int i,j,k;

for(i=1; i〈=6; i++)

for(j=1; j〈=20—3*i; j++) cout << ” “ ;

for(k=1; k<=i; k++) cout << setw(3) 〈〈 k ;

for(k=i—1; k>0; k—-) cout 〈< setw(3) 〈< k ;

cout<

}

3。 #include

char input[]=”SSSWILTECH1111W1WALLMP1”;

void main()

{

int i;

char c;

for(i=2; (c=input[i])!=’0’; i++)

{

switch(c)

case ‘a’: cout〈〈’i’;

continue;

case ‘1': break;

case 1: while((c=input[++i])!=’1’ && c!=’0’);

case 9: cout<<’S’;

case ‘E':

case ‘L’: continue;

default: cout<

continue;

}

cout〈〈” “;

cout<

}

SWITCH SWAMP

4。 #include 〈iostream。h>

void main()

C++常见选择填空习题集

int a,b,c,s,i;

a=b=c=0;

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

{

cin〉>s;

switch(s%3)

case 0: a+=s; break;

case 1: b+=s; break;

case 2: c+=s; break;

}

cout〈〈a〈<”,”<

假定输入的10个整数为:12,34,54,51,9,45,63,27,6,35,写出该程序的运行结果。

267,34,35

5. #include 〈iostream.h〉

void main()

int i,j;

for(i=1; i<=4; i++)

for(j=(4—i)*2; j〉0; j—-)cout〈<” “;

for(j=1; j<=2*i—1; j++)cout〈〈”*";

cout<〈endl;

}

for(i=3; i〉=1; i—-)

for(j=(4-i)*2; j>0; j--)cout〈〈” “;

for(j=1; j<=2*i—1; j++)cout〈<"*”;

cout<

}

三、改错题

1。 水仙花数是一个三位数,其各位数字的立方和等于该数本身。以下程序输出所有的水仙花数。

C++常见选择填空习题集

#include

using namespace std;

void main() {

int i,a,b,c;

for (i=100;i<1000;i++);

a=i/100;

b=i%100/10;

c=i/10;

if (i=a*a*a+b*b*b+c*c*c)

cout<〈i〈

} }

2。 #include 〈iostream。h〉

#include

void main()

for(int n=1;n〈6;n++)

cout<〈setfill(’ ')<〈setw(n)〈〈’ '<

}

四、程序填空题

1。 求3到100之间的所有素数之和.

#include 〈iostream.h>

[1] #include

void main()

{

int sum=0;

for (int i=3; i〈=100; i++) {

int temp=int(sqrt(i));

for (int j=2; j〈=temp; j++)

if (i%j) [2] break;

if ([3] j〉temp) sum+=i;

cout<〈sum〈〈endl;

2。 展转相除法求两个整数a和b的最小公倍数。

#include

using namespace std;

void main() {

int a=10,b=15;

int temp,i=1;

if ( [1]a

while (i*a%b!=0) [2]i++ ;

C++常见选择填空习题集

cout〈< [3]i*a 〈〈endl;

}

3。下列程序计算1000以内能被3整除的自然数之和,请完成程序。

#include

void main()

{

int x=1, sum;

[1]sum=0;

while(1)

if( [2]x>1000 )break;

if( [3]x%3==0 )sum+=x;

x++;

}

cout〈〈sum<

第四章 函数与预处理

一、选择题

1。 若要定义一个只允许本源文件中所有函数能使用的全局变量,则该变量需要使用的存储类别是( )

A。 extern B. register C. auto D。 static

2. 函数的重载是指( )

A. 两个或两个以上的函数有相同的函数名,但函数形参的个数或类型不同

B. 两个以上的函数有相同的函数名和相同个数的参数,但形参的类型可以不同

C. 两个以上的函数有不同的函数名,但形参的个数或类型相同

D。 两个以上的函数有相同的函数名,并且函数的返回类型不同

3。 关于函数的描述中,正确的是( )

A。 函数的定义可以嵌套,函数的调用不可以嵌套

B。 函数的定义不可以嵌套,函数的调用可以嵌套

C. 函数的定义和函数的调用均可以嵌套 D。 函数的定义和函数的调用均不可以嵌套

4。 若有宏定义: #define S(x) (x)*(x) ,则表达式:2。7/S(3.0)在预编译过程中将( )

A。 被替换为2.7/3。0*3.0 B。 被替换为2.7/(3.0)*(3。0)

C。 被替换为2。7/((3.0)*(3。0)) D. 不能被替换

5。 关于内置函数的说法中,不正确的是( )

A。 内置函数不需要使用堆栈进行现场的保护与恢复

B. 内置函数以牺牲程序的存储空间换取程序的执行时间

C。 内置函数体内不能有循环语句

D。 类的内置函数必须在类体外通过加关键字inline定义

C++常见选择填空习题集

6. 在函数定义前加上inline表示该函数被定义为( )

A. 重载函数 B。 内置函数 C。 成员函数 D. 普通函数

7. 关于设置C++函数参数默认值的描述中,正确的是( )

A. 不允许设置函数参数的默认值

B. 只能在定义函数时设置函数参数的默认值

C。 设置函数参数默认值时,应该是先设置右边的再设置左边的

D. 设置函数参数默认值时,应该全部参数都设置

8。 若同时定义了下列四个选项格式的函数和模板,fun(8,3。1)调用的是( )

A. template〈class T1,class T2)fun(T1,T2) B。 fun(double,int)

C。 fun(char,char) D. fun(double,char)

9。 关于函数模板的叙述中,正确的是( )

A. 函数模板实际上是函数类型和形参类型不具体指定的通用函数

B. 函数模板可以用于描述函数体不同的一系列函数

C. 函数模板可以用于描述参数个数不同的一系列函数

D. 函数模板定义中typename和class的作用不同

10。 关于变量的存储类别的描述中,不正确的是( )

A. 变量的存储类别指的是变量值在内存中存储的方法

B。 变量的存储类别与变量值存在的时间有关

C. 变量的存储类别决定了变量占用内存的分配与释放时间

D。 变量的存储类别不能确定变量的作用域

11已知函数func的原型是:double func(double*pd,int &ri);

变量x和y的定义是:double x; int y;

把x和y分别作为第一参数和第二参数来调用func,正确的调用语句是( )

A。 func(x,&y); B. func(&x,y); C。 func(&x,&y); D。 func(x,y);

12。 关于递归函数的说法中,不正确的是( )

A. 递归函数可以改写为非递归函数 B. 递归函数应有递归结束的条件

C。 解决同一个问题的递归函数的效率比非递归函数的效率要高

D。 递归函数往往更符合人们的思路,程序更容易理解

13. 下列叙述中,正确的是( )

A。 预处理命令行必须位于源文件的开头

B. 在源文件的一行上可以有多条预处理命令

C。 宏名必须用大写字母表示

D. 宏替换不占用程序的运行时间

14. 关于函数模板的说法中,正确的是( )

A. 函数模板中typename和class用于定义不同的虚拟类型名

B。 能被函数模板代替的函数必须具有相同个数的形参

C。 函数模板的虚拟类型名由C++系统自动确定

D。 函数模板的虚拟类型名是在运行阶段确定实际类型的

15. 关于函数的说法中,错误的是( )

A。 函数定义是平行的 B. 函数可以嵌套调用 C. 函数可以嵌套定义 D。 函数可以递归调用

C++常见选择填空习题集

16。 定义一个函数模板要用到的第一个修饰符是( )

A。 typename B。 template C。 class D。 typedef

17. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )

A。 内置函数 B. 重载函数 C. 递归函数 D. 函数模板

18。 不是重载函数调用时选择依据的是( )

A. 参数个数 B. 参数类型 C。 函数名字 D. 函数类型

19. 关于局部变量的说法中,不正确的是( )

A。 函数声明中的形式参数名在函数被调用时分配内存空间

B. 不同的函数中可以定义同名的局部变量

C. 函数定义中的形式参数名也是局部变量

D. 局部变量只在定义它的函数或复合语句(块)中有效

20. 关于函数模板的叙述中,正确的是( )

A. 函数模板也是一个具体类型的函数

B. 函数模板的类型参数与函数的参数是同一个概念

C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数

D。 用函数模板定义的函数没有类型

21。 在函数的传值调用中,要求( )

A. 形参和实参类型任意,个数相等 B. 形参和实参类型相同,个数相等

C. 形参和实参对应类型一致,个数相等 D. 形参和实参对应类型一致,个数任意

22. 适宜定义为内置函数的是( )

A. 函数体含有循环语句 B. 函数体含有递归语句

C. 需要加快程序的执行速度 D. 函数代码多且不常调用

23. 设函数模板定义为

template〈class T>

T f(T x,T y){return x+y;}

对该函数模板使用不正确的是( )

A。 f(4,8); B. f(4.9,8。5); C. f(12.8f,45。9f); D。 f("123”,"456");

24. 若在程序中有一个名字为a1的全局标识符,在该程序的某函数中有一个同名的局部标识符,

如果在该函数中访问这个同名的全局标识符,则该全局标识符应表示为( )

A。 a1 B. a1:: C。 ->a1 D. ::a1

25. 下列条件编译命令中下划线处是( )

#if( )

语句1;

#else

语句2;

#endif

A. 整常量表达式 B任意标识符。 C. 任意表达式 D. 被定义的宏名

26. 在函数的返回值类型与返回值表达式的类型描述中错误的是( )

C++常见选择填空习题集

A。 函数返回值的类型在函数定义时确 定,在函数调用时是不能改变的

B。 函数返回值的类型就是返回值表达式的类型

C。 函数返回值表达式类型与函数返回值类型不同时,表达式类型应转换成函数返回值类型

D. 函数返回值类型决定了返回值表达式的类型

27. 适合于实现功能不复杂但又要求有较快执行速度的函数是( )

A。 内联函数 B。 重载函数 C。 递归函数 D. 嵌套函数

28. 在函数说明中,不必要的是( )

A。 函数的类型 B. 函数参数的类型 C。 函数的名字 D。 函数参数的名字

29. 属于文件级作用域的标识符是( )

A. 函数形参 B。 语句标号 C。 外部静态类标识符 D. 自动类标识符

30. 预处理命令在程序中都是以( )开头的。

A. * B. # C。 : D. /

31. 在带参数的宏定义中,程序中引用宏定义的实参( )

A. 只能是常量 B. 只能是整型量 C。 只能是整型表达式 D. 可以是任意表达式

32. 在下列存储类标识符中,可见性和存在性不一致的是( )

A。 外部类 B。 自动类 C。 内部静态内 D。 寄存器类

33。 作用域运算符的功能是( )

A. 标识作用域的级别 B。 指出作用域的范围 C. 给定作用域的大小 D。 标识某个成员属于哪个类

34. 下列说法正确的是( )

A. C++语言的函数原型与C语言的函数说明格式相同

B. 不允许在C++语言的函数原型中说明参数类型

C. 当函数自变量个数不确定时,系统不自动检测自变量

D。 不论函数自变量个数是否确定,系统都不自动检测自变量

35. 当函数的自变量个数不确定时,参数表用( )表示。

A. … B。 * C. 空格 D。 ?

36。 在C ++语言中规定函数的返回值的类型是由( )

A。 return语句中的表达式类型所决定

B. 调用该函数时的主调用函数类型所决定

C。 调用该函数时系统临时决定

D。 在定义该函数时所指定的函数类型所决定

37. 局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用( )

提供对全局变量的访问。

A. 域运算符 B. 类运算符 C。 重载 D. 引用

38. 在不同文件的函数中,对全局变量的引用要加上( )关键字。

A。 register B. auto C. static D。 extern

39. 下面程序段的输出结果为( )

C++常见选择填空习题集

#define PI 3。141593

#include

void main(void)

{ cout<<”PI="〈

A。 3.141593=3。141593 B。 PI=3.141593

C. 3。141593=PI D。 程序有错误,无输出结果

40. 以下的函数调用语句中实参的个数是( )

fun(a+b, (x, y), fun(n+k, d, (a, b)));

A。 3 B. 4 C. 5 D. 6

41。 下列标识符中,( )不是局部变量.

A. register类 B。 外部static类 C。 auto类 D. 函数形参

42. C++语言中允许同一程序中有相同的函数名存在,称为( )

A。 类型转换 B。 结构体 C。 函数重载 D. 函数原型

43。 下列关于C++函数的说法中正确的是( )

A。 若函数先定义后调用,则必须在调用前说明

B。 如函数先调用后定义,则必须在调用前说明

C。 不论函数定义与调用的先后,都必须在调用前说明

D. 不论函数定义与调用的先后,都不必在调用前说明

44。 若函数没有返回值,则该函数的类型应被说明为( )

A. void B。 int C. char D. double

45. 若一个函数被说明为void类型,则其含义是( )

A. 函数没有任何返回值 B。 函数没有参数表

C. 函数的作用域为全局 D. 函数的作用域为局部

46。 下列关于用#define定义的常量的说法中正确的是( )

A. 在函数中定义的常量的作用域从定义起到该函数结束

B。 在函数中定义的常量的作用域从定义起到#undef取消为止或文件结束

C. 在一个函数中定义的常量不能在同一个文件的后续的其它函数中取消

D. 在一个函数中定义的常量不能在同一个文件的后续的其它函数中重新定义

47. 下列关于内联函数的说法中不正确的是( )

A。 内联函数体内不能有循环语句 B。 内联函数体内不能有switch语句

C. 内联函数必须先定义后调用 D. 内联函数在被调用时发生控制转移

48. 下列关于寄存器类变量的说法中不正确的是( )

A。 寄存器类变量只能是局部变量或函数的形式参数

B。 寄存器类变量只能为int型或char型

C. 寄存器类变量不能进行取地址操作

D。 定义为寄存器类的变量只能存储在寄存器中

49. 在C++中,下列关于函数原型的描述中错误的是( )

C++常见选择填空习题集

A。 如果函数先定义后调用,则该函数不能有函数原型说明

B. 函数原型与函数定义在返回类型、函数名及参数表上必须完全一致

C。 函数原型不必包含参数的名字,而只要包含参数的类型

D. 函数原型说明是语句

50. 下列关于变量和作用域运算符的说法中错误的是( )

A。 在用一作用域中不能说明同名变量,但不同作用域中可以说明同名变量

B. 作用域运算符提供了在局部作用域内引用同名的全局变量的方法

C。 不同的作用域内可以定义同名的变量

D。 全局变量不能自动初始化

51. 下面程序中第8行中的::a的含义是( )

#include 〈iostream.h> //1

int a; //2

void main() //3

{ //4

int a; //5

{ //6

int a; //7

::a=5; //8

a=10; //9

} //10

} //11

A。 表示对第2行定义的变量a的引用 B. 表示对第5行定义的变量a的引用

C。 表示对第7行定义的变量a的引用 D。 不合法的引用

52。 下列关于预处理的描述中正确的是( )

A. 预处理命令在编译时被执行

B. 所有的预处理命令都是以#开头的

C。 预处理命令的主要作用是提高程序的运行效率

D。 预处理命令不是C++语言的必须组成部分

53. 若有宏定义语句为:

#define SQ(x) (x*x)

则执行下列语句后m的值为( )

int m=50/SQ(5);

A. 2 B。 10 C. 50 D。 1250

54. 下列关于内联函数的描述中错误的是( )

A。 内联函数是在程序编译时被执行的

B. 用inline修饰的函数原型其对应的函数也将成为内联函数

C。 内联函数不能是递归函数

D. 内联函数的主要作用是提高程序的运行效率

55. 下列关于函数的描述中错误的是( )

A. 函数形参的作用域是该函数的函数体

B. 所有的函数在定义它的程序中都是可见的

C. 调用系统函数时,要先将该系统函数的原型说明所在的头文件包含进去

C++常见选择填空习题集

D. 系统函数及其库不是C++语言所必须的

56。 下列关于存储类的说法中错误的是( )

A。 定义外部变量时不用存储类说明符extern,而说明外部变量时要用它

B. 内部静态类变量与自动类变量的作用域相同,但生存期不同

C. 内部静态类变量的可见性与存在性不一致

D. 静态生存期的标识符的寿命是短的,而动态生存期标识符的寿命是长的

57。 编译以下程序时,结果为( )

#include //第1行

#define aa 123; //第2行

void main(void) //第3行

{cout〈

A。 编译时第2行出错 B. 编译时第4行出错

C. 编译时第2行和第4行均出错 D. 编译时无错误

58. 通常情况下,函数模板中的类型参数个数不能是( )

A. 0 B。 1 C。 2 D. 3

59. 所有在函数中定义的变量,包括形式参数,都属于( )

A。 全局变量 B. 局部变量 C。 静态变量 D。 外部变量

60。 文件包含命令中对被包含的文件名的要求是( )

A。 必须为。h B。 不能用.h C. 必须是。cpp D。 不一定是.h

二、填空题

1。 若定义函数时没有指定返回类型,则系统认为该函数的返回类型是 int 类型。

2. 变量的四种存储类型分别是 静态(static)类型、自动(auto)类型、寄存器(register)类型 和 外部(extern)类型

3. 变量的四种作用域分别是 程序级、文件级、函数级 和 块级

4. 局部静态(static) 变量的存在性与可见性不一致.

5. 函数按存储类型可分为 内部函数(或static函数) 和 外部函数(或extern函数).

6. auto 、 extern 和 register 三种修饰符不允许修饰类的成员数据.

7. 在说明函数时,(函数)参数的名字 不是必须的.

8. 在C++语言中,函数原型和函数定义要求 返回类型 、 函数名 和 参数表

必须完全一致。

9。 若有说明语句为:double fun(void);,则该语句也可以写成 double fun();。

10. 所有的预处理命令都是以 # 开头的;

11。 用#define宏定义的宏名可以用 宏 #undef取消。

12。 计算函数参数顺序引起的二义性是由不同的 编译系统 决定的.

三、写程序运行结果

1. #include 〈iostream〉

using namespace std;

int f1(int a)

C++常见选择填空习题集

int b=0;

static int c=2;

b++;

c++;

return a+b+c;

int main()

{

int a=2;

cout<

cout<〈f1(a)〈

}

6

7

2. #include 〈iostream>

using namespace std;

void main() {

int a=5,b=7,c=10;

{

int b=8;

double c=8.8;

a=b;

{

int c=b;

}

cout〈〈a〈<","<

cout<〈a<〈","<

8,8,8.8

8,7,10

3。 #include 〈iostream>

using namespace std;

int i=10;

int f1(int j) {

static int i=20;

j=i—-;

return j;

}

int f2(int i) {

int j=15;

return i=j+=i;

}

void main() {

C++常见选择填空习题集

for (int j=1;j〈3;j++)

cout<

20,26

19,27

4. #include

using namespace std;

int main() {

int max(int a,int b,int c);

int max(int a,int b);

int a=—11,b=—10,c=-3;

cout〈〈max(a,b)<〈endl;

cout<

int max(int a,int b,int c) {

if (b>a) a=b;

if (c>a) a=c;

return a;

int max(int a,int b)

if (a〉b) return a;

else return b;

-10

—3

5。 #include

using namespace std;

long f(int n) {

if (n>2) return (f(n-1)+f(n-2));

else return (n);

}

void main() {

int a=4,b=2;

cout<

cout<〈f(b)<

}

5

2

6。 #include

using namespace std;

int a=5;

C++常见选择填空习题集

void main()

{

int b=a+20;

int a=10;

int a=0,b=0;

for (int i=1;i<6;i++) { a+=i; b+=a; }

cout〈<"a+b="<

cout<〈”a+b=”〈〈a+b〈〈endl;

}

a+b=50

a+b=35

7. 写出下面的程序的运行结果

#include

#define N 5

void func()

{

static int a;

int b=2;

cout〈〈(a+=3,a+b)<<” ”;

}

void main()

{

for(int i=1;i

cout<〈endl;

}

5 8 11 14

8. #include ”iostream.h"

void main()

{

int a=5,b=7,c=10;

cout<

int b=8;

C++常见选择填空习题集

float c=8。8;

cout〈

a=b;

{

int c;

c=b;

cout〈〈a〈〈","〈〈b<<","<

cout<〈a〈<","<

}

cout〈

}

9. #include 〈iostream.h>

int a;

void main()

{

int a(20);

int a;

a=10;

::a=5;

C++常见选择填空习题集

cout<〈a〈

}

cout〈

cout<<::a<

}

10

20

5

10。 假定输入的10个字符为“abcedfghij”,写出下面的程序的运行结果

#include

void fun(int m)

char ch;

if(m〈=1) { cin〉>ch; cout<

else

{

cin>>ch;

fun(m-1);

cout<

}

void main()

fun(10);

C++常见选择填空习题集

jihgfdeca

11. #include

void fun(int j)

static int a(10);

int b(1);

b++;

cout〈

a+=10;

void main()

for(int i=1;i<=4;i++) fun(i);

}

13

24

35

46

四、程序填空题

1。 下面的函数fun未使用中间变量实现对两个数的交换,请完成下列函数的定义。

void fun(int &x, int &y)

x+=y;

y= [1] x-y;

C++常见选择填空习题集

[2] x=x—y;

2。下面的函数bubble()是对整数数组a按升序排序的冒泡算法,其中,参数a存储将被排序的数据,

size是数组a中存储的元素数目,请完成该函数。

void bubble(int a[], int size)

{

[1]int temp ;

for(int p=1; [2]p〈size ; p++)

for(int i=0; [3] i

if(a[i]>a[i+1])

temp=a[i];

[4] a[i]=a[i+1];

[5] a[i+1]=temp;

3. 下面的函数Sort()用于对整数数组array按升序排序的选择排序算法,其中参数n表示array数

组中存储的数组元素数。例如,假设数组array中有10个元素,选择排序就是:先将10个数

中的最小数与a[0]对换;再将a[1]到a[9]中的最小数与a[1]对换,…。,直到排序完成。请完成

该函数。

void Sort( int array[], int n)

{

int k;

[1] int t;

for(int i=0; i〈n—1; i++)

C++常见选择填空习题集

[2] k=i;

for(int j= [3]i+1 ; j

if(array[j]〈array[k])k=j;

t=array[k];

[4] array[k]=array[i];

[5] array[i]=t;

}

4. 以下程序的功能是求三角函数sinx的近似值,其计算精度为0.000001。已知求sinx近似值的计

算公式为:

)!12(

)1(

!7!5!31sin)12(

1753

...。。.。

.

nxxxxxxnn。

其中,x的值为弧度.

当输入的x 值为度数时,将度数转化为弧度的公式为:

1801415926.3xy。

#include〈iostream。h〉

#include

double sin(double x,double eps)

{

double term,sum,y;

int n=1;

C++常见选择填空习题集

y=x*x;

term= [1] x;

sum=0;

while(fabs(term)〉=eps)

{

sum += [2]term ;

n++;

term = term*y/ [3]((2*n—1)*(2*n—2)) ;

term *= —1;

return [4] sum;

void main(void)

{

double x,y;

cout<<”请输入x的值(角度):" ;

cin〉〉x;

while(x〉360)x —= 360;

y= [5] 3。1415926*x/180;

cout〈〈"角度为"<

}

第五章 数组

C++常见选择填空习题集

一、选择题

1. 若有定义:char a[]=”xyz", b[]={'x’, 'y', 'z’};,则在下列叙述中正确的是( )

A。 数组a和b的长度相同 B。 数组a的长度小于数组b的长度

C。 数组a的长度大于数组b的长度 D. 数组b以'0'结束,而a不是

2. 若有定义:int b[][3]={{1},{3,2},{4,5,6}},{0}};,则b[2][2]的值是( )

A。 0 B。 2 C. 5 D。 6

3。 给字符数组进行初始化的选项中,正确的是( )

A. char s1[ ]="12345abcd"; B. char s2[3]=”xyz”;

C。 char s3[][3]={ 'a’, 'x’, ’y'}; D。 char s4[2[3]={"xyz",”mnp"};

4. 关于数组的说法中,不正确的是( )

A。 数组是数据的集合

B。 数组是有类型属性的

C。 C++不允许动态改变数组的大小

D. 不能一次引用整个数组中的全部元素值

5。 将两个字符串连接起来组成一个字符串的函数是( )

A。 strlen B。 strcpy C. strcat D. strcmp

6。 关于C++语言的数组的描述中,正确的是( )

A。 数组的名字就是指向该数组第一个元素的指针

B. 长度为n的数组,下标的范围是1~n

C. 数组的大小在运行时确定

D. 数组只能通过值参数和引用参数两种方式传递给函数

二、写程序运行结果

1。 #include 〈iostream〉

using namespace std;

int main()

int a[3][2]={{1,4},{2,5},{3,6}};

int b[2][3],i,j;

for (i=0;i〈=2;i++)

for (j=0;j〈=1;j++) b[j][i]=a[i][j];

for (i=0;i<=1;i++) {

for (j=0;j<=2;j++)

cout<〈b[i][j];

cout〈

}

123

456

2。 #include

using namespace std;

void main() {

int a[5]={66,48,19,79,47};

int min=a[0],max=a[0];

for (int i=0;i〈5;i++) {

if (min>a[i]) min=a[i];

if (max〈a[i]) max=a[i];

}

cout〈<"min="<〈min〈〈endl;

cout〈<”max=”<〈max〈〈endl;

}

min=19

max=29

3. #include

using namespace std;

int main()

int i, j, row=0, column=0, max;

int a[3][4]={{6,1,2,88},{2,5,6,56},

max=a[0][0];

C++常见选择填空习题集

,—6,12,67}};

{-3

C++常见选择填空习题集

for (i=0;i〈=2;i++)

for (j=0;j〈=3;j++)

if (a[i][j]>max)

max=a[i][j];

row=i;

column=j;

}

cout<

cout<

88

03

4。 #include 〈iostream〉

using namespace std;

void main()

int a[8]={36,25,48,14,55,40,50,24};

int max,pre;

max=pre=a[0];

for (int i=1;i〈8;i++)

if (a[i]>max)

C++常见选择填空习题集

pre=max;max=a[i];

}

else if (a[i]>pre)

pre=a[i];

cout<〈”pre=”〈〈pre<

cout<<"max=”<〈max〈

}

pre=50

max=55

5。 #include

int i(10);

static int reset(){ return i; }

static int next(int j)

{

j=i++;

return j;

static int last(int j)

static int i(20);

j=i——;

return j;

static int other(int i)

{

C++常见选择填空习题集

int j(15);

return i=j+=i;

}

void main()

int i=reset();

for(int j(1); j<=3; j++)

{

cout<

cout<

cout〈

cout<

}

6。 #include 〈iostream.h>

void main()

int data[10]={1,7,2,564,23,456,64,45,6345,33};

int i,j,temp;

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

for(j=0;j〈9—i;j++)

C++常见选择填空习题集

if(data[j]

temp=data[j+1];

data[j+1]=data[j];

data[j]=temp;

}

for(i=0;i<10;i++)cout<〈data[i]<〈” ”;

cout<

}

7。 假定输入的10个字符为:75,78,76,75,81,92,60,55,70,78,写出下面的程序的运行结果

#include

int a[10];

int c;

void main()

int i=0,j;

int x;

while(i〈10)

{

cin>>x;

for(j=0;j

if(j>=c)a[c++]=x;

i++;

}

for(i=0;i

for(j=i;j〈c;j++)

if(a[i]〈a[j]) { x=a[i]; a[i]=a[j]; a[j]=x;

for(i=0;i

cout〈

四、程序填空题

1. 统计字符串中英文字母个数的程序.

#include

using namespace std;

int count (char str[]);

void main()

char s1[80];

cout〈<”Enter a line:";

[1] cin>>s1;

cout<<"count="〈

C++常见选择填空习题集

}

C++常见选择填空习题集

int count (char str[])

{

int num=0;

for (int i=0;str[i];i++)

if (str[i]〉=’a' && str[i]<='z' || str[i]>=’A' && str[i]<='Z’)

[2] num++;

return [3] num;

}

2.如果矩阵A乘以B得到C,则必须满足如下的规则:

⑴矩阵A的列数等于矩阵B的行数;

⑵矩阵A的行数等于矩阵C的行数;

⑶矩阵B的列数等于矩阵C的列数;

矩阵相乘的乘法公式为: 。。

..

nkkjikijbac1

下面的函数MultiMatrix()用于求解整数矩阵的乘积,其中参数a、b和c分别表示存储乘数、

被乘数以及乘积结果的二维数组,arow和acol、brow和bcol以及crow和ccol分别表示矩

阵a的行数和列数、矩阵b的行数和列数以及矩阵c的行数和列数,且该函数被调用时的实

参满足:acol〈=4、bcol〈=5及ccol〈=5。MultiMatrix()函数当提供的矩阵不满足矩阵相乘的条

件时该函数返回1,否则返回0,请完成该函数。

int MultiMatrix(int a[][4], int arow, int acol,

int b[][5], int brow, int bcol,

int c[][5], int crow, int ccol)

{

if(acol!=brow)return 1;

C++常见选择填空习题集

if( [1]crow!=arow )return 1;

if( [2]ccol!=bcol )return 1;

for(int i=0; i

for(int j=0; [3] j

{

[4] c[i][j]=0;

for(int n=0; [5]n

c[i][j]+=a[i][n]*b[n][j];

return 0;

3. 下面的函数fun未使用中间变量实现对两个数的交换,请完成下列函数的定义.

插入排序是通过把数组中的元素插入到适当位置来进行排序的.插入排序的步骤为:

(1)将数组中的头两个元素按排序顺序排列

(2)把下一个元素(第3个元素)插入到其对应于已排序元素的排序位置

(3)对于数组中的每个元素重复(2),即把第4个元素插入到适当文职,然后是第5个,等等,

直到所有元素都插入排序完成

下面的程序利用了插入排序函数isort()进行排序,并在主函数中将排序前和排序后的数组元素

打印,请将程序补充完整。

#include

void isort(int a[],int size)

/*a为被排序数组,size为a中包含的元素个数*/

int inserter,index;

for(int i=1;i< [1] size;i++)

C++常见选择填空习题集

{

inserter=a[i];

index=i—1;

while(index>=0 && [2] inserter〈a[index])

{

a[index+1]=a[index];

index-—;

a[index+1]= [3] inserter;

void main()

int array[]={55,2,6,4,32,12,9,73,26,37};

int len= [4]sizeof(array)/sizeof(int) ;

for(int i=0;i

cout<

isort(array, [5] len);

for(int i=0;i〈len;i++) cout〈

cout〈〈endl;

}

C++常见选择填空习题集

第六章 指针

一、选择题

1. 下列关于函数参数的描述中错误的( )

A. 函数的形参在定义时不占用内存的存储单元

B。 在函数的传值调用中将用实参来初始化形参

C. 在函数的传址调用中形参不需要分配存储空间

D. 在函数的传引用调用中形参是实参的别名

2. 关于函数的说法中,错误的是( )

A。 函数名代表函数的入口地址

B。 函数指针就是返回指针值的函数

C。 函数指针可以作为另一个函数的参数

D. 在32位系统中,函数指针变量的存储空间是4个字节

3. 关于指针运算的说法中,不正确的是( )

A。 两个指针在一定条件下可以进行相等或不等的运算

B. 可以用空指针赋值给指针变量

C. 一个指针可以加上两个整数之差

D. 两个指针在一定条件下可以相加

4。 已知:const char *p=”abc”;,则下列语句合法的是( )

A。 p[2]='k'; B. *p[2]=’k’; C. *p=”xyz”; D. p=”xyz”;

5. 若有语句:char* p=new char[30];,则释放p所指向的动态内存应使用的语句是( )

A. delete p; B. delete *p; C. delete &p; D. delete[] p;

6. 若有变量定义:int x=5;,则将rx定义为变量x的引用的是( )

A。 int rx=x; B. int rx=&x; C. int *rx=&x; D。 int &rx=x;

C++常见选择填空习题集

7。 传递引用调用方式起着( )的作用。

A. 传值调用C。 在函数的传址调用中形参不需要分配存储空间

B. 函数指针就是返回指针值的函数

D. 两个指针在一定条件下可以相加

8。 关于引用的叙述中,不正确的是( )

A. 每一个引用都是其所引用对象的别名,因此必须初始化

B. 形式上针对引用的操作实际上作用于它所引用的对象

C。 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行

D。 不需要单独为引用分配存储空间

9。 若有定义:int a[5],*p=a;,则不合法的表达式是( )

A. p=p+1 B. a=a+1 C. p—a D。 a+2

10。关于delete的描述中,正确的是( )

A。 delete是函数

B. 它必须用于new返回的指针

C。 对一个指针可以连续使用多次delete

D. delete[]只能删除一维的动态数组

11。引用调用的调用方式是指( )

A。 形参和实参都是变量 B. 形参是指针,实参是地址值

C. 形参是引用,实参是变量 D。 形参是变量,实参是地址值

12. 下面程序段的运行结果是( )

char a[]=”abcdefgh”;

char *p=a;

p+=3;

cout〈

C++常见选择填空习题集

A。 4 B。 8 C。 9 D。 12

13。 若有定义:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p=&a[0][0];

下列选项中的表达式能表示a[2][2]的是( )

A。 p[2][2] B。 *(*(p+2)+2) C. *(p+10) D。 *(p+8)

14. 若有定义:int *p=new int;,则下列说法中不正确的是( )

A。 声明了一个指向整型变量的指针p

B。 可以用*p来表示所指向的整型变量

C. 通过运算符new,分配了一个整型数据的空间,并将其起始地址赋给指针p

D。 系统为指针变量p分配了一个整型数据的存储空间

15。 定义函数指针的是( )

A。 int *p( ); B. int (*p)( ); C。 (int *) p( ); D. (int *p)( );

16。 在int a=5, *p=&a;中,*p的值是( )

A。 变量a的地址 B。 无意义 C. 变量p的地址 D。 5

17. 在int a=5, *p=&a;中,p的值是( )

A. 变量a的地址 B。 无意义 C。 变量p的地址 D。 5

18. 已知:int a[3][7];,下列格式中不表示数组元素的是( )

A。 *(a+1)[5] B。 *(*a+3) C. *(*(a+1)) D. *(&a[0][0]+2)

19. const char *ptr;语句的含义是( )

A. 定义指向字符常量的指针 B. 定义指向字符的常量指针

C. 定义指向字符串常量的指针 D。 定义指向字符串的常量指针

20. char * const ptr;语句的含义是( )

A. 定义指向字符常量的指针 B. 定义指向字符的常量指针

C++常见选择填空习题集

C. 定义指向字符串常量的指针 D. 定义指向字符串的常量指针

21。 对下面语句的描述中,正确的是( )

const int* x; //(1)

int* const x; //(2)

const int* const x; //(3)

A。 语句(1)的含义是指针变量x不能更改

B. 语句(2)的含义是指针变量x所指向的值不能更改

C. 语句(3)的含义是指针变量x及其所指向的值均不能更改

D. 语句(1)和语句(2)是相同含义的不同定义方式

22. 定义数组指针的是( )

A。 int *p[5]; B。 int (*p)[5]; C。 (int *)p[5]; D. int *p[];

23。 下列关于delete运算符的描述中,错误的是( )

A。 它必须用于new返回的指针

B. 它也适用于空指针

C。 对一个指针可以使用多次该运算符

D。 指针名前只用一对方括号符,不管删除数组的维数

24. 下列说法正确的是( )

A。 数组的下标表示法处理速度比指针表示法处理速度慢

B. 数组的下标表示法处理速度比指针表示法处理速度快

C. 数组的下标表示法处理速度和指针表示法处理速度相同

D. 数组的下标表示法处理速度和指针表示法处理速度不可比较

25。 已知:char * const p=”abc”;,则下列语句合法的是( )

A. p[2]='k’; B。 *p[2]=’k'; C。 *p=”xyz"; D. p=”xyz”;

C++常见选择填空习题集

26。 下列表示中,函数指针的引用格式是( )

A. (*p)(5) B。 *p[5] C。 *p(5) D。 (*p)[5]

27。 对于int *pa[5];的下列描述中正确的是( )

A。 pa是一个指向数组的指针,所指向的数组是5个int型元素

B。 pa是一个指向某数组中第5个元素的指针,该元素是int型变量

C。 pa[5]表示某个数组的第5个元素的值

D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针

28。 下列语句错误的是( )

A。 char *p="John”; p[2]='a’;

B。 char name[5]=”John"; name[2]='a';

C。 char name[5]=”John”, *p=name; p[2]=’a’;

D。 char name[5]=”John”, *p=&name[2]; *p='a’;

29。 有如下定义语句:int a[]={1,2,3,4,5};,则对语句int *p=a;正确的描述是( )

A. 语句int *p=a;定义不正确

B。 语句int *p=a;初始化变量p,使其指向数组对象a的第一个元素

C. 语句int *p=a;是把a[0]的值赋给变量p

D. 语句int *p=a;是把a[1]的值赋给变量p

30. 若0≤i〈5,则对如下语句定义中,对数组元素表示错误的是( )

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

p=a;

A。 *(a+i) B. a[p—a] C。 p+i D。 *(&a[i])

31。 已知:int m=10; ,则下列表示引用的方法中正确的是( )

A. int &x=m; B. int &y=10; C. int &z; D. float &t=&m;

32。 若有定义:

C++常见选择填空习题集

int x[5], *p=a;

则p的值为( )

A. 5 B。 数组x的首地址

C。 数组x的首元素 D. 无具体值

33。 下列关于指针的说法中正确的是( )

A。 不可以将一个数组名赋给一个指针

B. 在使用一个指针之前,必须先赋初始值

C. 指针类型和它所指向的变量的类型不一样

D。 指针类型与它所指向的变量的类型可相同可不相同

34. void类型主要用于说明( )

A. 常量和指针 B。 函数和变量 C。 函数和指针 D。 常量和变量

35. 下列关于数组作为函数参数的说法中不正确的是( )

A。 数组名作函数参数时向函数传递的是数组的首地址

B. 数组作函数参数时对实参数组的元素数没有限制

C。 被调用函数中对形参数组元素值的改变将被带回到实参数组中

D. 实参用数组时,被调用函数的形参可以用相应类型的指针

36。 设有说明语句:char *s[]={”Student”,”Teacher”,"Father”,”Mother”}, *ps=s[2];

则执行语句:cout<<*s[1]〈<',’〈〈ps〈〈’,’<<*ps〈〈’n’;

时的输出结果为( )

A。 T,Father,F B。 Teacher,F,Father

C. Teacher,Father,Father D. 语法错误无输出

二、填空题

1. 假设p是一个指针,则a=*p++的运算过程是:首先进行a=*p的赋值操作(或a=*p) ,

C++常见选择填空习题集

然后再进行指针的p加1操作(或p++)。

2。 若程序中有说明语句:int (*p)(void);,则p的含义是:指向无参数、返回值为int型的函数的指针

3. 若程序中有说明语句:int *p(void);,则p的含义是:无参数、返回值为int型的函数名

4。 若程序中有说明语句:int (*p)[3];,则p的含义是:指向第二维有3个元素的、int型数组的指针

5. 若程序中有说明语句:int *p[3];,则p的含义是:具有三个元素、每个元素是一个int型指针的一维数组名

6。 若指针p所指向的对象的值为10,p+1所指向的对象的值为20,则*++p的值为20。

7. 定义为void类型的指针变量可以被赋给指向 任何类型 的指针。

8. 若有如下定义语句:

int a(5); //(1)

int &b=a; //(2)

int *p=&a; //(3)

则(2)和(3)两句中的&符号的含义分别是 引用定义 和 取地址运算 。

9. 说明为void类型的指针可以被赋给指向 任何类型 的指针.

10。 假定p为指向一维数组b[10]中元素b[5]的指针,则p+4所指向的元素为 b[9]。

11。 假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;"语句后,p所指对象

的值为 26。

三、写程序运行结果

1。 #include 〈iostream>

using namespace std;

void fn(int &x)

C++常见选择填空习题集

static int y=10;

x+=y; y+=x;

cout<

}

void main()

{

int y=1;

for (int i=0; i〈2; i++) fn(y);

}

11,21

32,53

2. #include 〈iostream〉

using namespace std;

void main() {

char t[][3][5]={ "abcd”, ”efgh”, "ijkl”, "mnop”, ”qrst", ”uvwx”};

cout<

cout〈〈**t〈<"t”<<*(*(t+1)+1)〈〈 "t”<〈t[0][2]<< ”t"<〈**t+1〈

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

#include 〈iostream.h〉

int a[8]={1,3,5,7,9,11,13};

void fun(int *pa,int n)

{


本文标签: 函数 类型 程序 定义