全国计算机等级考试二级C语言选择题 下载本文

内容发布更新时间 : 2024/6/27 15:33:01星期一 下面是文章的全部内容请认真阅读。

{ char a,b,c,d;

scanf(\,&a,&b);

c=getchar(); d=getchar(); printf(\,a,b,c,d); }

当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)

12 34

则输出结果是( )。 A) 12 34

B) 12 C) 1234 D) 12 3

参考答案:D

【解析】按照从键盘输入的数据可以判断字符1给了变量a,字符2给了变量b,字符即回车给了变量c,字符3给了变量d。所以打印输出的结果为D)选项。

下关于逻辑运算符两侧运算对象的叙述中正确的是( )。 A) 可以是任意合法的表达式 B) 只能是整数0或非0整数 C) 可以是结构体类型的数据 D) 只能是整数0或1 参考答案:A

【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。

有以下程序:

#include main()

{ int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;

printf(\,%d,%d,%d\\n\,a,b,c,d); }

程序输出( )。 A) 1,1,2,0 B) 0,0,0,3 C) 编译有错 D) 0,1,2,0 参考答案:C

【解析】本题中if(a=1)b=1;与else d=3;之间多了语句c=2;所以会出现else语句的位

5

置错误的编译失败提示。

有以下程序:

#include main()

{ int x=1, y=0, a=0, b=0; switch (x)

{ case 1: switch(y)

{ case 0: a++; break; case 1: b++; break; }

case 2: a++; b++; break; case 3: a++; b++; }

printf(\=%d, b=%d\\n\, a, b); }

程序的运行结果是( )。

A) a=2,b=2 B) a=2,b=1 C) a=1,b=1 D) a=1,b=0

参考答案:B

【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case 2语句的a++;b++;a为2,b为1。所以结果为B)。

以下程序段中的变量已正确定义:

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

for( k=1; k<3; k++ );printf(\; 程序段的输出结果是( )。 A) ** B) **** C) *

D) ******** 参考答案:C

【解析】由于内层循环 for( k=1; k<3; k++)后面直接跟了空语句\;\所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个\*\,选择C)。

有以下程序段: #include

6

inti, n;

for( i=0;i<8;i++ ) { n = rand() % 5; switch (n) { case 1:

case 3:printf(\, n); break; case 2:

case 4:printf(\, n); continue; case 0: exit(0); }

printf(\,n); }

以下关于程序段执行情况的叙述,正确的是( )。

A) for循环语句固定执行8次

B) 当产生的随机数n为4时结束循环操作 C) 当产生的随机数n为1和2时不做任何操作 D) 当产生的随机数n为0时结束程序运行

参考答案:D

【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。简单的说break是结束整个循环体,而continue是结束单次循环。B)选项中当产生的随机数n为4时要执行打印操作。C)选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。由于存在break语句所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。

有以下程序:

#include int f(int x); main()

{ int n=1,m;

m=f(f(f(n)));printf(\,m); }

int f(int x)

{ return x*2; }

程序运行后的输出结果是( )。

A) 8 B) 2 C) 4 D) 1

参考答案:A

【解析】第一次调用m=f(f(f(1))),第二次为m=f(f(2)),第三次为m=f(4),即返回值为8。

以下叙述中错误的是( )。

7

A) 可以给指针变量赋一个整数作为地址值 B) 函数可以返回地址值

C) 改变函数形参的值,不会改变对应实参的值

D) 当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

参考答案:A

【解析】不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。

设已有定义:float x;,则以下对指针变量p进行定义且赋初值的语句中正确的是( )。 A) int *p=(float)x; B) float *p=&x; C) float p=&x; D) float *p=1024; 参考答案:B

【解析】指针是用来存放地址的变量,用 (类型名 *指针变量名)的形式定义。赋值时应将某个变量地址即&x 赋给指针变量,所以选择B)。

以下数组定义中错误的是( )。 A) int x[2][3]={1,2,3,4,5,6}; B) int x[][3]={0};

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

D) int x[2][3]={{1,2},{3,4},{5,6}}; 参考答案:D

【解析】D)选项中x[2][3]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。

有以下程序:

#include

void fun( int a[],int n) { inti, t;

for(i=0;i

main()

{ int k[10]={ 1,2,3,4,5,6,7,8,9,10},i; fun(k,5);

for(i=2;i<8;i++) printf(\,k[i]); printf(\; }

程序的运行结果是( )。

A) 321678 B) 876543 C) 1098765 D) 345678

8