发布时间 : 星期三 文章全国计算机等级考试二级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 { 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