二级C语言真题库之选择题,全国计算机等级考试二级C语言真题库之选择题(16)

b的结果是"假"

D) \"是非法的

参考答案:C

【解析】A选项中,\0表示结束;B选项中,字符常量是用单引号括起来的一个字符; D选项中,\"是双引号符。因此C选项正确。

22.以下叙述中正确的是

A) 字符变量在定义时不能赋初值

B) 字符常量可以参与任何整数运算

C) 同一英文字母的大写和小写形式代表的是同一个字符常量

D) [email protected]

参考答案:B

【解析】A选项中,字符变量在定义时可以赋初值; C选项中,同一英文字母的大写和小写形式代表的是不同的字符常量;D选项中,转义字符以反斜线"\"开头的。因此B选项正确。

23.以下叙述中正确的是

A) 函数名允许用数字开头

B) 函数调用时,不必区分函数名称的大小写

C) 调用函数时,函数名必须与被调用的函数名完全一致

D) 在函数体中只能出现一次return语句

参考答案:C

【解析】B选项中,函数调用时,函数名称是需要区分大小写的;A选项中,函数名不允许以数字开头;D选项中,在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行。因此C选项正确。

24.以下叙述中正确的是

A) 如果p是指针变量,则&p是不合法的表达式

B) 如果p是指针变量,则*p表示变量p的地址值

C) 在对指针进行加、减算术运算时,数字1表示1个存储单元的长度

D) 如果p是指针变量,则*p+1和*(p+1)的效果是一样的

参考答案:C

【解析】B选项中,如果p是指针变量,则*p表示变量p所指向的地址的值;A选项中,如果p是指针变量,则&p表示变量p的地址;D选项中,如果p是指针变量,*p+1表示将p所指的值加上1,而*(p+1)表示的是先将指针右移一位再取所指向变量的值。因此C选项正确。

25.以下叙述中正确的是

A) 基类型不同的指针变量可以相互混用

B) 函数的类型不能是指针类型

C) 函数的形参类型不能是指针类型

D) 设有指针变量为 double *p,则 p+1 将指针p移动8个字节

参考答案:D

【解析】B选项中,所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数;C选项中,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型;A选项中,虽然不同基类型的指针变量占用字节数是相同的,但是不能混用。因此D选项正确。

26.如果定义

float a[10], x;

则以下叙述中正确的是

A) 语句 a = &x; 是非法的

B) 表达式 a+1 是非法的

C) 三个表达式 a[1]、*(a+1)、*&a[1]表示的意思完全不同

D) 表达式*&a[1]是非法的,应该写成 *(&(a[1]))

参考答案:A

【解析】B选项中,表达式a+1不是非法的;C选项中, *(a+1)即指a[1];D选项中,*&a[1]不是非法的。因此A选项正确。

27.有以下程序

#include main()

{

int a[ ] = { 2,4,6,8 }, *p=a, i;

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

a[i]=*p++;

printf( "%d\n" ,a[2] );

}

程序的输出结果是

A) 2

B) 8

C) 4

D) 6

参考答案:D

【解析】本题通过语句"*p=a"将一维数组a 的首地址的值赋值给变量p,即p的值为2。执行for循环,a[i]=*p++,指将p的值赋给a[i]后,再进行++操作,因此4次循环后a[2]的值为6。因此D选项正确。

28.以下叙述中正确的是

A) 语句 int a[4][3] = {{1,2}, {4,5}}; 是错误的初始化形式

B) 语句 int a[4][3] = {1,2,4,5}; 是错误的初始化形式

C) 语句 int a[][3] = {1,2,4,5}; 是错误的初始化形式

D) 在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

参考答案:D

【解析】二维数组在初始化时,可以省略第1维,但是不可以省略第2维。可以为部分数组元素初始化。B选项、C选项和A选项内的初始化都没有错误。因此D选项正确。

29.以下叙述中正确的是

A) 字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素

B) 不能用字符串常量对字符数组名进行整体赋值操作

C) char str[7] = "string!"; 在语法上是合法的,运行也是安全的

D) char *str; str = "Hello";与char str[]; str = "Hello";效果是一样的

参考答案:B

【解析】字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符 \0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个字节。选项A中有6个元素,其中包含结尾字符,C选项中字符串常量包含8个字符,所以不能赋值在str[7]中,D选项后者赋值错误。

30.以下叙述中正确的是

A) 在语句char str[] = "string!";中,数组str的大小等于字符串的长度

B) 语句 char str[10] = "string!"; 和 char str[10] = {"string!"}; 并不等价

C) 对于一维字符数组,不能使用字符串常量来赋初值

D) 对于字符串常量 "string!",系统已自动在最后加入了\0字符,表示串结尾

参考答案:D

【解析】字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符 \0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个字节。B选项中两者等价,C选项中可以使用字符串常量来给一维字符数组赋值,就像B选项中一样,A选项中数组长度比字符串长度小一个字节,字符串中包含隐含的结尾符。

31.设有定义

char str[] = "Hello";

则语句

printf("%d %d", sizeof(str), strlen(str));

的输出结果是

A) 5 5

B) 6 6

C) 6 5

D) 5 6

参考答案:C

【解析】本题考查sizeof和strlen对字符串的处理不同之处,sizeof求出字符串的字符个数,包括结尾符。Strlen求出字符串的实际字符,不包括结尾符。所以答案为6,5,C选项正确。

32.在32位编译器上,设有定义

char *str1 = "Hello", str2[] = "Hello"; ,

则以下语句

printf("%d %d", sizeof(str1), sizeof(str2));

的输出结果是

A) 5 6

B) 5 5

C) 6 6

D) 4 6

参考答案:D

【解析】本题主要考查了指向字符串的指针和字符数组,str1为一个字符指针,所以sizeof为4,str2为字符数组,其中包含6个字符,所以答案为4 6

33.以下叙述中正确的是

A) 任何情况下都不能用函数名作为实参

B) 函数既可以直接调用自己,也可以间接调用自己

C) 函数的递归调用不需要额外开销,所以效率很高

D) 简单递归不需要明确的结束递归的条件

参考答案:B

【解析】在某些情况下,函数名可以作为实参传递,所以A选项错误。函数递归调用使用栈区来递归,需要额外开销,并且效率不高,C选项错误。递归调用需要明确指出递归结束条件,否则就陷入死循环了。

34.以下叙述中正确的是

A) 函数的形式参数不属于局部变量

B) 对于变量而言,"定义"和"说明"这两个词实际上是同一个意思

C) 在复合语句中不能定义变量

D) 全局变量的存储类别可以是静态类

参考答案:D

【解析】声明变量不分配空间,定义变量要分配空间,所以B选项错误。符合语句中可以定义变量,所以C选项错误。函数的形参属于局部变量,所以A选项错误、

35.以下叙述中正确的是

A) 在一个程序中,允许使用任意数量的#include命令行

B) 在包含文件中,不得再包含其他文件

C) #include命令行不能出现在程序文件的中间

D) 虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接

参考答案:A

【解析】本题考查预处理中文件包含的概念,包含文件中可以包含其他文件,B选项错误,#include可以出现在程序文件的中间,C选项错误,包含文件被修改了,包含该文件的源程序必须重新进行编译和连接。

36.以下叙述中正确的是

A) 函数的返回值不能是结构体类型

B) 在调用函数时,可以将结构体变量作为实参传给函数

C) 函数的返回值不能是结构体指针类型

D) 结构体数组不能作为参数传给函数

参考答案:B

【解析】本题考查结构体变量作为函数参数,函数返回可以是结构体类型,也可以是结构体类型的指针,结构体数组可以作为参数传给函数。

37.以下叙述中正确的是

A) 结构体数组名不能作为实参传给函数

B) 结构体变量的地址不能作为实参传给函数

C) 结构体中可以含有指向本结构体的指针成员

D) 即使是同类型的结构体变量,也不能进行整体赋值

参考答案:C

【解析】本题考查结构体变量作为函数参数,结构体变量的地址可以作为参数传给函数,结构体数组名就是一个地址,可以传给函数,如果是同类型的结构体变量,可以整体赋值。

38.设有如下的说明和定义

struct {

int a;

char *s;

} x, *p = &x;

x.a = 4;

x.s = "hello";

则以下叙述中正确的是

A) (p++)->a与p++->a都是合语法的表达式,但二者不等价

B) 语句 ++p->a; 的效果是使p增1

C) 语句 ++p->a; 的效果是使成员a增1

D) 语句 *p->s++; 等价于 (*p)->s++;

参考答案:C

【解析】本题考查结构体变量的引用,++p->a的效果是使成员a增1,p++->a不合法,

*p->s++为字符e,与(*p)->s++不等价。

39.下面关于位运算符的叙述,正确的是

A) ||表示"按位或"的运算

B) #表示"按位异或"的运算

C) &表示"按位与"的运算

D) ~表示"按位异或"的运算

参考答案:C

【解析】本题考查位运算。^为按位异或,|为按位或,~表示按位取反。所以C选项正确。

40.下面关于"EOF"的叙述,正确的是

A) EOF的值等于0

B) EOF是在库函数文件中定义的符号常量

C) 文本文件和二进制文件都可以用EOF作为文件结束标志

D) 对于文本文件,fgetc函数读入最后一个字符时,返回值是EOF

参考答案:B

【解析】在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

11

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值