全国计算机等级考试二级语言试题分析 下载本文

22.下列叙述中正确的是( )。

A.可以用关系运算符比较字符串的大小 B.空字符串不占用内存,其内存空间大小是0 C.两个连续的单引号是合法的字符常量 D.两个连续的双引号是合法的字符串常量

【解析】D。比较两个字符串大小用函数strcomp(s,t),不能用关系运算符比较字符串的大小;空字符串有结束符(\\0),所以也要占用1字节;两个连续的单引号是不合法,单引号中间必须有一个字符(普通字符或转义字符);两个连续的双引号表示的是空字符串。

23.有以下程序: #include main()

{ rhar a=’H’;

a=(a>=’A’&&a<=’2’)(a-’A’+’a’):a; printf(\,a); }

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

【解析】D。多元运算符问号前面表达式为真,所以(a-’A’+’a’)赋值给a,括号里的运算是把大写字母变成小写字母,所以答案应为选项D。

24.有以下程序: #include int f(int x); main() { int a,b=0; for(a=0;a<3;a++)

{b=b+f(a);putchar(’A’+b);} }

int f(int x) { return x * xl; }

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

【解析】B。第一次循环时,b=1,输出结果为B; 第二次循环时,b=3,输出结果为D; 第三次循环时,b=8,输出结果为I。

25.设有定义:int x[2][3];,则以下关于二维数组X的叙述错误的是( )。

[0]可看做是由3个整型元素组成的一维数组 [0]和x[l]是数组名,分别代表不同的地址常量 C.数组X包含6个元素

D.可以用语句x[0]=0;为数组所有元素赋初值0

【解析】D。对于二维数组来说,数组的名字x是一个二级指针常量;第一维表示行地址,比如:x[0]表示第一行的地址,而且是个地址(一级指针)常量,所以x[0]是不能赋值的。

26.设变量P是指针变量,语句P=NULL;是给指针变量赋NULL值,它等价于( )。

=\ =\ =0; =\

【解析】C。在C语言中NULL等价于整数0。 27.有以下程序: #include <> main()

{int a[]={10,20,30,40},*p=a,j; for(i=0;i<=3;i++){a[i]=*p;p++;} printf(\,a[2]); }

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

【解析】A。for循环中第一次循环时,a[0]=*p,因为有p=a;故相当于a[0]=*a;根据一维数组的定式:a[i]=*(a+i),说明每次循环是将数组的当前元素赋值给自己,后面每次循环依此类推。所以,for循环结束后,数组a的值并没有变化,由于数组下标是由0开始,所以a[2]的值是30。

28.有以下程序: #include <> #define N 3

void fun(int a[][N],int b[]) { int i,j;

for(i=0;i

if(a[i][j]>b[i]) b[i]=a[i][j]; } } main()

{int x[N][N]={1,2,3,4,5,6,7,8,9},y[N],i; fun(x,y); for(i=0;i

printf(“%d,”,y[i]); }

程序运行后的输出结果是( )。 ,4,8, ,6,9, ,5,7, ,3,5,

【解析】B。fun函数功能是把数组a的每一行的最大值赋给b,a的第一行的最大值是3,第二行的最大值是6,第三行的最大值是9,所以答案是3,6,9。

29.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):

#include <> #include <> main()

{char a[10]=\,b[10]=\,c[10]=\ strcpy(a+1,b+2); puts(strcat(a,c+1)); }

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