【C++程序设计选择题】 易错点总结

1、(3>4?3:4)<5?5:3>4?3:4的输出值为( ).
A) 3

B) 4

C) 5

D) 无值

答案:C
先算第一个括号里的,再从右到左算。

===================================================

2、程序填空:打印出2至99之间的所有素数( ).
#inlcude
#include
Void main()
{int i,n;
for(n=2;[1] ;n++)
{
int temp=int(srqt(n));//求出n的平方根并取整
for(i=2;(2) ;i++)
if(n%i==0) (3) ;
if(i>temp)cout<}
Cout<<’\n’;
}
A) (1) n<99 (2) i (3)break

B) (1) n<=99 (2) i (3)break

C) (1) n<=99 (2) i<=temp (3)break

D) (1) n<99 (2) i<=temp (3)break
答案:D

===================================================

3、下列语句段中,不是死循环的是( ).
A) int i=100;while (1){i=i%100+1;if (i= =20) break;}

B) int i=100,sum=0;for (i=1;;i++) sum=sum+1;

C) int k=0;do{++k;}while(k>=0);

D) int s=100;while (s++%3+5%3) ++s;

答案:A
A中注意,小数求余大数等于它自己。例如1%100=1.

===================================================

4、在switch语句中,每个语句所含关键字case后面必须是( )表达式.
A) 整型

B) 常量

C) 字符型

D) 枚举型

答案:B

===================================================

5、有一段程序:
int a,b;
char c,d;
cin>>a>>b;
cin.ignore(2);
cin>>c>>d;
cout<输入:34 3452 2345输出为( ).
A) 34, 3452, 3 ,4

B) 34, 3452, 4,5

C) 34, 3452, 2,3

D) 34, 3452, ,2

答案:A
cin.ignore(2)会把:空格2 这两个忽略,char c,d分别接收2后面的3和4

===================================================

6、设"int a=15,b=26;",则"cout<<(a,b);"的输出结果是( ).
A) 15

B) 26,15

C) 15,26

D) 26

答案:D
逗号运算符中整个表达式的值是最后一个表达式的值。

===================================================

7、语句while(w) … 中的表达式w的等价表示是( ).
A) w==0

B) w==1

C) w!=0

D) w!=1

答案:C
只要不等于0就是真,不一定要等于1.

===================================================

8、语句:I = strlen(“abc\0ABC”) 执行后,I的值为( ).
A) 8

B) 7

C) 4

D) 3

答案:D
strlen()函数,其功能是求字符串的长度,即字符串中包含的有效字符的个数(不包括字符 ‘\0’ )所以遇到\0就结束了

===================================================

9、应该如何用字符数组接收一串空格字符?( )
A) 用cin>>

B) 用cin.get()

C) 用cin.getline()

D) 上述方法都可以

答案:C
cin.get()是接收一个字符(包括空格和换行符和回车符等等),cin.getline()可以接收一串字符包括空格和换行符。

===================================================

10、下列给字符数组进行初始化中,( )是正确的.
A) char s1[ ]=“12345abcd”;

B) char s2[3]=“xyz”;

C) char s3[][3]={ ‘a’, ‘x’, ‘y’};

D) char s4[2[3]={“xyz”,“mnp”};

答案:A
A中:可以省略花括号。

B中:“xyz”实际是xyz\0,长度为4。

C中:这种情况需要参数来确定有几行数据。
而目前的参数列表无法确定是几行,只能确定有三个元素。
下面是几种合法的定义
char s3[][3]={{ ‘a’, ‘x’, ‘y’}}; //这个代表有一行
char s3[][3]={ {‘a’, ‘x’}, {‘y’}}; //这个是两行
char s3[][3]={ {‘a’}, {‘x’}, {‘y’}};//这个是三行

D中:2行3列,每行有三个元素,但是初始化的字符串“xyz”看起来是三个字母,但还有一个隐藏的字符串结束符\0,也就是"xyz"实际上是4个元素。于是溢出了。

===================================================

11、要求定义包含8个int类型元素的一维数组,以下错误的定义语句是( )
A) int N=8; int a[N];

B) #define N 3 int a[2*n+2];

C) int a[]={0,1,2,3,4,5,6,7};

D) int a[1+7]={0}

答案:A
int N=8,这里的N是个变量,定义数组时中括号里面不能是变量。

=========================================================

12、若有说明:int a[3][4]={0};则下面正确的叙述是( ).
A) 只有元素a[0][0]可得到初值0

B) 此说明语句不正确

C) 数组a中各元素都可得到初值,但其值不一定为0

D) 数组a中每个元素均可得到初值0

答案:D

===================================================

13、判断字符串s1是否大于字符串s2,应当使用( ).
A) if(s1>s2)

B) if(strcmp(s1,s2))

C) if(strcmp(s2,s1)>0)

D) if(strcmp(s1,s2)>0)

答案:D
strcmp()函数比较:
如果第一个字符串等于第二个字符串:返回0;
如果第一个字符串大于第二个字符串:返回1;
如果第一个字符串小于第二个字符串:返回-1;

===================================================

14、What would be output by the following section of C++?( )
char szSource[] = “Copy this!”;
char szDest[4];
strcpy(szDest, szSource);
cout << szDest;
A) Copy

B) Cop

C) Copy this!

D) buffer overflow!

答案:D
strcpy中字符数组1的长度必须大于字符数组2的长度。

===================================================

15、What would be output by the following section of C++?( )
char s1[3]=“AB”;
strcat(s1, “EF”);
cout<
A) AB

B) ABE

C) ABEF

D) buffer overflow!

答案:D

===================================================

16、struct student
{
char name[10];
……
}std;
对name的操作错误的是( ),
A) cin>>std.name;

B) cin.getline(std.name,80)

C) std.name=“li”;

D) strcpy(std.name,“li”);

答案:C
字符数组不能直接赋值,要用strcpy()函数。

===================================================

17、定义共同体变量时对它初始化:union {int i; char c ; float f;}
A) a={10,‘A’,1.8}

B) a={10}

C) a={10,‘A’}:

答案:B
定义共用体时对它初始化,只允许有一个数赋给第一个成员。

===================================================

18、已知学生记录描述为:
struct student
{ int no;
char name [20];
char set;
struct {
int year;
int month;
int day;
}birth;
};
struct student s;
设变量s中的"生日"应是"1984年11月11日",下列对生日的正确赋值方式是( ).
A) year=1984;month=11;day=11;

B) birth.year=1984;birth.month=11;birth.day=11;

C) s.year=1984;s.month=11;s.day=11;

D) s.birth.year=1984;s.birth.month=11;s.birth.day=11;

答案:D

===================================================

19、下列那种数据类型占用空间最小( ).
A) 结构体

B) 共用体

C) 枚举体

D) 不确定

答案:D

===================================================

20、enum a {sum=9,mon=-1,tue};定义了( ).
A) 枚举变量

B) 3个标识符

C) 枚举数据类型

D) 整数9和-1

答案:C
定义一个枚举变量之前,必须先定义一个枚举类型。例如enum a a1,a2,a3 此时a1,a2,a3才是枚举变量。

===================================================

21、在下列程序段中,枚举变量c1,c2的值依次是( ).
enum color {red,yellow,blue=4,green,white} c1,c2;
c1=yellow;c2=white;
cout<
A) 1,6

B) 2,5

C) 1,4

D) 2,6

答案:A
每个枚举常量在默认的情况下第一个为0,第二个为1,以此类推。但是被赋值之后,后面一个枚举常量总是前面一个枚举常量+1.

===================================================

22、以下对C语言中共用体类型数据的叙述正确的是( ).
A) 可以对共用体变量名直接赋值

B) 一个共用体变量中可以同时存放其所有成员

C) 一个共用体变量中不能同时存放其所有成员

D) 共用体类型定义中不能出现结构体类型的成员

答案:C

===================================================

23、一个函数体中可以有多个return,可以通过( )执行返回操作.
A) 二个

B) 一个

C) 三个

D) 多个

答案:B

===================================================

24、C++作用域有:块作用域,文件作用域,还有( ).
A) 全局作用域、函数作用域、类作用域

B) 函数原型作用域、函数作用域、类作用域.

C) 函数作用域、文件作用域

D) 函数作用域、类作用域.

答案:B

===================================================

25、( )是C++程序的构成基础
A) 函数

B) 数据

C) 图像

D) 表格

答案:A

==================================================

26、内联函数的定义方法很简单,只要在函数定义前加上关键字( )即可
A) inline

B) online

C) offline

D) line

答案:A

==================================================

27、执行C++程序时内存分配状况如下( )
A) 程序区、静态存储区、动态存储区.

B) 静态存储区、动态存储区.

C) 程序区、动态存储区.

D) 程序区、静态存储区.

答案:A

==================================================

28、局部变量可分配在( )
A) 程序区、静态存储区、动态存储区

B) 静态存储区、动态存储区

C) 程序区、动态存储区

D) 程序区、静态存储区

答案:B

==================================================

29、函数原型声明,是将函数定义的头部搬到声明处并在尾部加分号,以下正确的是()
A) 可以省略参数名及类型

B) 可以省略参数类型

C) 只可以省略参数名

D) 可以省略返回值类型

答案:C

==================================================

30、全局变量要想在其它文件中使用应该( )
A) 在其它文件中用extern进行说明.

B) 在其定义文件中用extern进行说明.

C) 不用说明

D) 用static进行说明

答案:A

==================================================

31、若有下面的程序段char s[]=“china”;char *p; p=s; 则下列叙述正确的是( ).
A) s和p完全相同

B) 数组s中的内容和指针变量p中的内容相等

C) s数组长度和p所指向的字符串长度相等

D) *p与s[0]相等

答案:D

==================================================

32、若有语句int point,a=4;和 point=&a;下面均代表地址的一组选项是( ).
A) a,point,
&a

B) &*a,&a,*point

C) *&point,*point,&a

D) &a,&*point,point

答案:D
point存放地址, * point=a

==================================================

33、下列关于指针变量赋空值的说法错误的是( ).
A) 当赋空值的时候,变量指向地址为0的存储单元

B) 赋值语句可以表达为变量名=′\0′;

C) 赋值语句可以表达为变量名=0;

D) 一个指针变量可以被赋空值

答案:A

当给指针赋空值的时候,是无效指针,不指向任何量。

===================================================

34、文本文件和二进制文件哪个占用存储更多( )
A) 二进制文件

B) 文本文件.

C) 一样多.

D) 不一定.

答案:A

===================================================

35、现有如下定义:int*p,s[20],i; p=s;表示数组元素s[i]的表达式不正确的是( ).
A) *(s+i)

B) *(p+i)

C) *(s=s+i)

D) *(p=p+i)

答案:C

===================================================

36、设p是double *指针变量,若p的值为1000,则p++的值为( ).
A) 1001

B) 1004

C) 1008

D) 1010

答案:C
double类型占8个字节,p指向地址,p++则增加八个字节,变成1008。即p+=n为:原地址+sizeof(double)×n

===================================================

37、希望定义指针p不能被改变,而它所指向的变量可以被改变,其定义形式为( ).
A) const int *p;

B) const int *const p;

C) int *const p;

D) int *p;

答案:C

===================================================

38、若有int m; int *p=&m; 则后一句是将( ).
A) m的值赋给p

B) m的值赋给p指向的空间

C) m的地址赋给p

D) m的地址赋给p指向的空间

答案:C

===================================================

39、若有说明:char c=‘9’,*sp1,*sp2;,以下均正确的一组一组赋值语句是( )
A) sp1=&c; sp2=sp1;

B) sp1=&c; sp2=&sp1;

C) sp1=&c; sp2=*sp1;

D) sp1=&c; *sp2=*sp1;

答案:A

===================================================

40、设有说明语句:char *str="\t’c\Language\n";,则指针str所指字符串的长度为( ).
A) 13

B) 15

C) 17

D) 说明语句不合法

答案:A
要注意转义字符,像\t和\\就只算一个字符。同时题目求的是字符串的长度,那么就是13。如果str[]是个字符数组,题目要求字符数组的长度,那就是14(字符数组长度要算上那个’\0’)

===================================================

41、下列选项中,全部都是C++关键字的选项为( ).
A) while IF static

B) break char go

C) sizeof case extern

D) switch float integer

答案:C
A中IF不是 ;B中go不是(goto是);D中integer不是(register是)
还有一些关键字很容易错:this、do、new、protected、typedef、virtual、volatile

===================================================

42、已知i=0,j=1,k=2,则逻辑表达式 ++i||–j&&++k的值为( ).
A) 0

B) 1

C) 2

D) 3

答案:B
++和- -的优先级大于逻辑运算与和或的优先级,且结合性从右到左,所以得到i=1;j=0;k=3。然后&&的优先级大于||的优先级。即1||0&&3

===================================================

43、C++程序从上机到得到结果的几个操作步骤依次是( ).
A) 编译、编辑、连接、运行

B) 编辑、编译、连接、运行

C) 编译、运行、编辑、连接

D) 编辑、运行、编辑、连接

答案:B

===================================================

44、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是( )。

A) 有零个或多个输入
B) 有零个或多个输出
C) 有穷性
D) 可行性

答案:B
算法特性:有穷性、确定性、可行性、有零个或多个输入、有一个活=或多个输出

===================================================

45、设变量a是整型,f是实型,i是双精度型,则表达式10+ ‘a’+i*f值的数据类型为( ) .
A) int

B) float

C) double

D) 不确定

答案:C
由低类型到高类型:char、short——>int——>unsigned——>long——>float——>double

===================================================

46、以下4个选项中,不能看作一条语句的是( )。

A.;
B.a=0,b=0,c=0;
C.if(a>0);
D.if(b==0)m=1;n=2;

答案:D
C语言的语句都用“;”结束。
如果只有一个分号,称为“空语句”。
用一对花括号把若干语句括起来构成一个语句组,称为“复合语句”,在语法上视为一条语句。
因此选项A是一条语句。
选项B是逗号表达式加分号构成的语句。
选项C是一条if语句,该语句的if子句是一条空语句。
选项D中“if(b==0)m=1;n=2;”是两个表达式语句。
所以,4个选项中选项D符合题意。

===================================================

47、下列常量中,( )不是字符常量.
A) ‘\005’

B) ‘\n’

C) ‘c’

D) “a”

答案:D
“”的是字符串,‘’的是一个字符。

===================================================

48、在下列double型常量表示中,( )是错误的.
A) E15

B) .35

C) 3.00E+05

D) 3.00E-05

答案:A
记得e前一定要有数字,像A中这个应该写1e15

===================================================

49、C语言中,字符型数据在内存中存储形式是( ) .
A) 原码

B) 反码

C) 补码

D) ASCII码

答案:D

===================================================

50、系统头文件内容不包括:( )
A) 对标准库函数的原型声明

B) 函数的调用顺序

C) 符号常量定义

D) 类型定义

答案:B

===================================================

51、带参数的宏定义常用内联函数实现,那么它与一般函数相比,哪一个更快?( )
A) 内联函数

B) 一般函数

C) 一样快

D) 不确定

答案:A

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值