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

内容发布更新时间 : 2024/5/2 20:31:10星期一 下面是文章的全部内容请认真阅读。

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

程序运行后的输出结果是( )。 A.ABE B.BDI C.BCF D.BCD

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

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

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

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

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

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

A.p=\ B.p=\ C.p=0; D.p=\【解析】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.30 B.40 C.10 D.20

【解析】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

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

A.2,4,8, B.3,6,9, C.3,5,7, D.1,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)); }

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

A.al2xyz B.12yz C.a2yz D.bc2yz

【解析】C。第一次执行字符串的复制函数后,字符串a中的值是a2,第二次执行的是字符串的连接函数,连接后,a字符串变成了a2yz,再输出,所以运行结果为a2yz。本题最主要的是了解字符串名加一个整型常量所代表的字符串是什么,比如:有char a[10]=\定义,则字符串a的值是abc;而字符串a+1的值是bc;字符串a+2的值是c;字符串b+3的值是\\0,即不空串。

30.以下选项中,合法的是( )。

A.char str3[]={’d’,’e’,’b’,’u’,’g’,’\\0’}; B.char str4;str4=\C.char name[10];name=\

D.char strl[5]=\,str2[6];str2=strl;

【解析】A。选项B不能把一个字符串赋值给一个字符变量str4;选项C和D犯了同样的错误是把字符串赋给了数组名,数组名是一个指针常量,常量是不能被赋值的。

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

{ char *s=\,a=0; while(s[k+1]!=’\\0’) { k++;

if(k%2==0){a=a+(s[k]-’0’+1);continue; } a=a+(s[k]-’0’);

printf(\,k,a); }

程序运行后的输出结果是( )。 A.k=6 a=11 B.k=3 a=14 C.k=4 a=12 D.k=5 a=15 【解析】C。输出结果:k=1 a=2 k=2 a=4

k=3 a=7 k=4 a=12 32.有以下程序: #include main()

{char a[5][10]={\,\,\,\,int i,j; char t:

\for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(a[i][0]>a[j][0])

{t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;} puts(a[1]); }

程序运行后的输出结果是( )。 A.fwo B.fix C.two D.owo

【解析】A。for循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不变。排序方法是类冒泡排序。

33.有以下程序: #include int a=1,b=2;

void funl(int a,int b) {printf( \,a,b); } void fun2() { a=3;b=4; } main()

{ funl(5,6);fun2(); printf(\,a,b); }

程序运行后的输出结果是( )。 A.1 2 5 6 B.5 6 3 4 C.5 6 1 2 D.3 4 5 6

【解析】B。funl是输出局部变量的值,fun2是把全局变量的值改成3和4,所以输出的结果是5634。当全局变量与局部变量同名时,在