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

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

参考答案:C

考察知识点:指针和数组

解析:本题中char*p=a+5;即相当于p=&a[5],而--p,是先要减1,则printf语句要输出的值就是a[4]。

(164)下列程序的运行结果是_______。 void fun(int *a,int *b) { int*k:

k=a;a=b;b=k; } main()

{ int a=3,b=6,*x=&a,*y=&b; fun(x,y);

printf(“%d%d”,a,b); }

A)6 3 B)3 6 C)编译出错 D)O 0 参考答案:B

考察知识点:函数的调用和变量的作用域

解析:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。

(169)以下程序的输出结果是_______。 main()

{ int i,k,a[10],p[3]; k=5;

for(i=0;i<1O;i++)a[i]=i;

for(i=0;i<3;i++)p[i]=a[i*(i+1)]; for(i=0;i<3;i++)k+=p[i]*2; printf(“%d\\n”,k); }

A)20 B)21 C)22 D)23 参考答案:B

考察知识点:循环语句和数组 解析:按照程序的流程走一遍,可以得到,p[0]=0,p[1]=2,p[3]=6;执行三次 k+=p[i]*2,相当于k=5+0*2+2*2+6*2=21。

(171)main(int argc,char*argv[])

{ while(--argc>0)

printf(“%s”,argv[argC)); printf(“\\n”); }

假定以上程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所 在目录的DOS提示符下键入:PROG ABCDEFGHIJKL/,则输出结果为_______。

A)ABCDEFG B)IJHL C)ABCDEFGHIJKL D)IJKLABCDEFGH 参考答案:C

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

解析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指

针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc中存放命令行中命令字和参数的总和的个数,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[O]存放命令字字符串,argv[1]用来存放第一个参数的字符串,argv[2]用来存放第2个参数的字符串,依次类推。题中argc的值是2,执行完—argc后为1,输出argv[1],此数组存在第一个参数的字符串ABCDEFGHIJKL。

(172)以下程序的输出结果是_______。 long fun(int n) { long s;

if(n==1||n==2)s=2; else s=n-fun(n-1); return s; }

main()

{ printf(“%ld\\n”,fun(3));}

A)1 B)2 C)3 D)4 参考答案:A

考察知识点:递归函数

解析:这是一个递归函数。递归的结束条件是,n=1或者n=2。按照程序顺序,即可得出本题结果为1。

(173)以下程序的输出结果是_______。 #define SQR(X) X*X main()

{ int a=16,k=2,m=1;

a/=SQR(k+m)/SQR(k+m); printf(“%d\\n”,a); }

A)16 B)2 C)9 D)1 参考答案:B

考察知识点:宏定义

解析:C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。在做这道题时,也不妨运用置换法。得到:a/=k+m*k+m/k+m*k+m=16/7=2。注:a为整型,所以在做除法时,自动取整。

(174)假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q 所指结点从链表中删除并释放该结点的语句组是_______。

A)flee(q);p->next=-q->next; B)(*p).next=(*q).next;free(q); C)q=(*q).next;(*p).next=q;free(q);

D)q=q->next;p->next=q;p=p->next;free(p); 参考答案:B

考察知识点:链表的应用

解析:选项A的错误在于,先已经把q结点给释放,无法再进行余下语句了:选项C和D的错误在于因为有了q=(*q).next做了赋值,则free(q)释放了原来q后面的一个结点。

(175)以下程序的输出结果是_______。 main()

{ int x=05;char z=‘a’;

printf(“%d\\n”,(x&1)&&(Z<‘Z’)); }

A)O B)1 C)2 D)3 参考答案:B

考察知识点:综合应用 解析:“&”是位运算符表示按位与运算。“&&”是逻辑运算符,当其两边的表达式都为真时返真值。关系表达式(x&1)&&(z<’z’),(x&1)为真,(z<’z’)也为真,两者相与,自然也为真,以整型输出,则输出1。

(179)在下列几种排序方法中,要求内存量最大的是_______。

A)插入排序 B)选择排序 C)快速排序 D)归并排序 参考答案:D

考察知识点:各种排序方法的实现过程及实现机制 解析:快速排序的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,再分别对这两部分记录继续进行排序,以达到整个序列有序:插入排序的基本操作是指将无序序列中的各死素依次插入到已经有序的线性表中,从而得到一个新的序列:选择排序的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置),然后对剩下的子表采用同样的方法,直到表空为止;归并排序是将两个或两个以上的有序表组合成一个新的有序表。

(186)以下有4组用户标识符,其中合法的一组是______。 A)FOR B)4d C)f2_G3 D)WORD -sub DO IF void

Case Size abc define 参考答案:C

考察知识点:c语言标识符

解析:c语言的标识符的定义为:以字母或下划线开头的由字母、数字字符、下划线组成的字符串,而且标识符不能与关键字相同。

(188)以下合法的赋值语句是______。

A)X=Y=100 B)D--; C)X+Y; D)C=int(A+B) 参考答案:B

考察知识点:c语言的赋值语句

解析:本题中的答案A与D都缺少“;”,而答案c中,表达式是不能独立成为语句的,答案B使用了C语言的自减运算符就相当于D=D-1,所以答案B为赋值语句。

(189)设x,y均为.int型变量,且x=10,y=3,则printf(“%d,%d\\n”,x--,--y);语句的输出结果是______。

A)10,3 B)9,3 C)9,2 D)10,2 参考答案:D

考察知识点:c语言的自减运算符 解析:c语言的自减运算符有前置与后置两种形式。当自减运算符前置时,变量先自减1后再参与表达式运算:而后置时,变量先参与表达式运算后再自减1。

(191)以下程序的输出结果是_________。 main() { int a=3;

printf(“%d\\n”,(a+=a-=a*a));

}

A)-6 B)1 C)2 D)-12 参考答案:D

考察知识点:c语言的赋值运算符

解析:首先a+=b相当于a=a+b;a-=b相当于a=a-b,且赋值运算符的结合方向是自右至左,所以表达式a+=a-=a*a。a先运算最右边的a*a得9,再运算a=a-9,即a=3-9,所以此时a的值由3变成了-6,最后运算a=a+(6),即a=(-6)+(-6)-12。

(198)若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是_______。 A)i=*p; B)*p=*&j; C)i=&j; D)i=**p; 参考答案:B

考察知识点:c语言中指针赋值运算

解析:指针是一种特殊的变量,它是用来存放变量地址的变量。本题中指针变量p用于存放整型变量i的地址,即指针变量p所指向的存储单元为变量i所在的存储单元,改变*p的值即为改变i的值。又因为”&”和”*”两个运算符的优先级别相同,按自右而左的方向结合,所以*&j先进行&j运算,得j的地址,再进行*运算,取所得地址里而的值,故*&j与j等价。

(203)以下程序的输出结果是_______。 main()

{ char st[20]= “hello\\0\\t\\\\”;

printf(“%d%d\\n”,strlen(st),sizeof(st)); }

A)99 B)520 C)1320 D)2020 参考答案:B

考察知识点:c语言的字符串与库函数

解析:c语言中字符串是以‘\\0’字符结束的,且strlen()函数计算的是‘\\0’字符前的所有字符的个数。本题中strlen(st)应为5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数足计算变量或数组的所分配到的内存空间的大小。所以本题的sizeof(st)为20。

(205)以下程序输出正确的是______。 amovep(n *p,int(*a)[3],int n) { int i,j;

for(i=0;i

main()

{ int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int*)malloc(100); amovep(p,a,3);

printf(“%d%d\\n”,p[2],p[5]);flee(p); }

A)56 B)25 C)34 D)程序错误 参考答案:A

考察知识点:指针与数组的操作