全国计算机等级考试二级C语言笔试题详解 联系客服

发布时间 : 星期三 文章全国计算机等级考试二级C语言笔试题详解更新完毕开始阅读

{ int i,len=O;

for(i=1;i

程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是: ex1 abcd efg 10/

则运行的结果是_______。

A)22 B)17 C)12 D)9 参考答案:D

考察知识点:指针数组作main函数的形参

解析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令字字符串ex1,argv[1]用来存放第一个参数的字符串abcd,argv[2]用来存放第二个参数的字符串efg,argv[3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。

(274)有以下程序 int fa(int x) { return x*x;} int fb(int x) {return x*x*x;}

int f(int(*f1)(),int(*f2)(),int x) { return f2(X)-f1(x);} main() { int i;

i=f(fa,fb,2);printf(“%d\\n”,i); }

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

A)-4 B)1 C)4 D)8 参考答案:C

考察知识点:函数的嵌套调用

解析:f(fa,fb,2)即为fb(2)-fa(2)=2*2*2-2*2=8-4=4。 (275)有以下程序

void ss(char*s,char t) { while(*s)

{ if(*S==t)*s=t-‘a’+‘A’; S++: } } main()

{ char strl[100]= “abcddfefdbd”,c=‘d’; ss(strl,c);printf(“%s\\n”,strl); }

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

A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd 参考答案:B

考察知识点:将字符串中指定的小写字母转换为大写字母 解析:在主函数中因为c被赋值为字符’d’,所以函数的功能是将字符串中的小写字母d转换为大写。

(276)设有如下定义: struct sk { int a; floatb: }data; int *p;

若要使p指向data中的a域,正确的赋值语句是_______。

A)p=&a; B)p=data.a; C)p=&data.a; D)*p。data.a 参考答案:C

考察知识点:指向结构体变量的指针

解析:将data.a的起始地址赋给指针变量p,也就是使p指向data.a。 (277)有以下程序 #include struct NODE

{ int num;struct NODE *next;} main()

{ struct NODE *p,*q,*r;

p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10;q->num=20;r->num=30: p->next=q;q->next=r;

printf(“%d\\n”,p->num+q->next->num); }

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

A)10 B)20 C)30 D)40 参考答案:D

考察知识点:用指针处理链表 解析:p->num即为10,q->next->num即为r->num,为30,所以p->num+q-> next-> ntun= 10+30=40。

(278)若有以下说明和定义 typedef int *INTEGER INTEGER p,*q;

以下叙述正确的是_______。

A)p是int型变量 B)p是基类型为int的指针变量

C)q是基类型为int的指针变量 D)程序中可用INTEGER代替int类型名 参考答案:B

考察知识点:用typedef定义类型

解析:typedef int *INTEGER;(声明INTEGER为整型指针类型);

INTEGER p,*q;(定义p,*q为整型指针类型),所以p是基类型为int的指针变量;*q是基类型为int的指针变量;程序中可用*INTEGER代替int类型名。

(279)有以下程序 main()

{ unsigned char a,b,c; a=0x3;b=a10x8;c=b<<1; printf(“%d%d\\n”,b,c); }

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

A)-11 12 B)-6 -13 C)12 24 D)11 22 参考答案:D

考察知识点:位运算

解析:0x3表示16进制表,”|”为按位或,”<<”为按位左移,将a,b转换为二进制数进行位运算,再将结果以十进制打印出来,结果为11 22。

(280)以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include

void f(char p[][10],int n) { chart[20];int i,j; for(i=0;i

if(strcmp(p[i],p[j])

{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}

} main()

{ char p[][10]={ “abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”};int i;

f(p,5);

printf(“%d\\n”,strlen(p[0])); }

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

A)6 B)4 C)5 D)3 参考答案:C

考察知识点:比较字符串的大小

解析:比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直至字符串结束。strcmp(字符串1,字符串2)的作用是比较字符串1和字符串2:字符串1=字符串2,函数值为0;字符串1>字符串2,函数值为1;字符串1<字符串2,函数值为-1。Strcpy(字符数组1,字符串2)的作用是将字符串2复制到字符数组1中去。结合本题可知,比较后的字符串数组为:

p[O]=“dcdbe” p[1]=“cd” p[2]=“abc” p[3]=“abbd” p[4]=\

所以,strlen(p[0])=5。

第6章 填空题详细解析

(1)设有以下定义和语句,则*(*(p+2)+1)的值为______。 int[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; 参考答案:60 知识点:指针数组

解析:本题定义了一个3行2列的二维数组a,并定义了一个指向两个元素的一维数组指针p,让p指向二维数组a的首行。则代码*(*(p+2)十1)中的p+2指向二维数组a的第三行a[2],*(p+2)指向a[2][0],*(p+2)+1指向a[2][1],*(*(p十2)+1)是引用a[2][1],其值是60.

(2)若要使指针p指向一个double类型的动态存储单元,请填空。 P=______malloc(sizeof(double)); 参考答案:(double*) 知识点:强制类型转换

解析:函数malloc返回的是void*,所以若要使指针指向一个double类型,则必须进行类型转换,类型转换格式为:(数据类型*)。

(3)函数mycmp(char*s,char*t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t时返回正值,当s

mycmp(char*s,char*t) { while(*s==*t)

{ if(*s==‘\\0’) return 0; ++s;++t; }

return(______); }

参考答案:*s-*t或-*t+*s 知识点:比较字符串的大小

解析:函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化来改变指针所指向的字符,要改变s和t所指不同字符的ASCII码的差值,必须使用“*s-*t”得出。

(4)下列程序的运行结果是______。 main()

{ union EXAMPLE