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

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

考察知识点:指针与指针变量的概念,指针与地址运算符

解析:答案A中&aa[O]表示aa[0]的地址,加上1就是aa[1]的地址。同样aa[1]的地址也可以直接用&aa[1]或aa+1表示。

(238)以下程序的输出结果是________。 f(int b[],int m,int n) {int i,s=0;

for(i=m;i

main()

{inc x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(“%d\\n”,x); }

A)10 B)18 C)8 D)15 参考答案:A

考察知识点:函数的正确调用,嵌套调用,递归调用 解析:本题中,主函数调用f函数,在f函数中执行了两次循环,第一次i=3,s=O+b[i]=4,然后i的值被修改成5,仍然满足循环条件;进入第二轮循环,s=4+b[5]=4+6=10,随后,i的值被修改成7,不再满足循环条件,退出循环,返回s的值。所以最后输出结果是10。

(239)若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s;

则对s数组元素的正确引用形式是_______。

A)ps+1 B)*(ps+3) C)ps[O][2] D)*(ps+1)+3 参考答案:C

考察知识点:一维数组和多维数组的定义、初始化和引用

解析:选项A得到的是s数组第一行的地址,选项B得到的是s数组第三行第零列元素的地址,而选项D得到的是s数组第一行第三列元素的地址。只有选项C正确引用了ps数组第零行第二列的元素.

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

{ int b[3][3]={0,1,2,0,1,2,O,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++)t=t+b[i][b[j][j]]; printf(“%d\\n”,t); }

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

考察知识点:循环的嵌套

解析:本程序中,有两个循环语句嵌套使用,在第一次外循环中,i=O,执行内循环时,将j赋值为i的值0,执行一次t=t+b[i][b[j][j]],得到t=1,退出内循环,接着进入第二次外循环,在第二次外循环结束时t=2,然后执行第三次外循环,得到t=4,退出循环,输出t的值。

(242)在说明语句:int*f();中,标识符f代表的是_______。

A)一个用于指向整型数据的指针变量 B)一个用于指向一维数组的行指针 C)一个用于指向函数的指针变量 D)一个返回值为指针型的函数名 参考答案:D

考察知识点:返回指针值的指针函数

解析:一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。int?f()表示f是一个函数,它带回一个指针值,这个指针是指向一个整型数据的。

(243)不合法的main函数命令行参数表示形式是________。

A)main(int a,char*c[]) B)main(int arc,char**arv) C)main(int argc,char*argv) D)main(int argv,char*arge[]) 参考答案:C

考察知识点:指针数组,指向指针的指针,main函数的命令行参数 解析:本题主要考查了对main函数参数的了解,main函数可以有两个形参,一般形式是:main(int argc,char*argv[]),也就是说,它的第一个形参是一个整型变量。第二个形参是一个指针数组,其元素指向字符型数据。

(245)若有以下定义: struct link { int data;

struct link *next; }a,b,c,*p,*q;

且变量a和b之间已有如图所示的链表结构: 指针p指向变量a,q指向变量c。则能够把c插入到a和b之间并形成新的链表的语句组是________。

A)a.next=c;c.next=b; B)p.next=q;q.next=p.next; C)p->next=&c;q->next=p->next; D)(*p).next=q;(*q).next=&b; 参考答案:D

考察知识点:用指针和结构体构成链表,单向链表的建立、输出、删除与插入

解析:本题考的是指针的运用。即先将元素a的指针指向q指针所指向的元素即c,然后将c的指针指向b元素,采取的是直接取元素地址的方式。

(249)用链表表示线性表的优点是_______。

A)便于插入和删除操作 B)数据元素的物理顺序与逻辑顺序相同 C)花费的存储空间较顺序存储少 D)便于随机存取 参考答案:A

考察知识点:链表的结构

解析:链式存储结构克服了顺序存储结构的缺点:它的结点空问可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。故链式存储结构下的线性表便于插入和删除操作。

(260)若有以下程序: main()

{ int k=2,i=2,m; m=(k+=i*=k);

printf(“%d,%d\\n”,m,i); }

执行后的输出结果是_______。

A)8,6 B)8,3 C)6,4 D)7,4 参考答案:C

考察知识点:复合的赋值运算符 解析:在赋值符“=”之前加上其他运算符,可以构成复合的运算符。此运算为右结合性。即从右往左计算。i*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。

(261)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是_______。 A)6 B)0 C)2 D)1 参考答案:D

考察知识点:运算符的优先级

解析:在本题中,运算符的优先级分别为:!>/>+,->&&。 即:!(3+4)+5-1&&4+5/2 =0+5-1 &&4 +2 =4&&6=1。

(263)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:

main()

{ int n,k;

float score,sum,ave; sum=O.O;

for(n=1;n<=10;n++) { for(k=1;k<=4;k++)

{ scanf(“%f”,&score); sum+=score; }

ave=sum/4.0;

printf(“NO%d:%f\\n”,n,ave); } }

上述程序运行后结果不正确,调试中发现有一条语句在程序中的位置不正确。这条语 句是_______。

A)sum=O.O; B)sum+=score;

C)ave=sum/4.0; D)printf(“NO%d:%f\\n”,n,ave); 参考答案:A

考察知识点:for循环语句的使用

解析:题目中要求每位学生的平均分数,首先要求每位学生的总分,也就是程序中的sum,所以sum应在第一个for循环体内赋初值,如果在循环体外赋初值就会得到所有学生的分数总和,不合题意。

(265)若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是_______。 A)p=q; B)*p=*q; C)n=*q; D)p=n; 参考答案:D

考察知识点:指针变量的引用 解析:指针变量不同于整型变量和其他类型的变量,它是用来存放地址(指针)的,不能将一个整型变量(或任何其他非地址类型的数据)赋给一个指针变量,这样的赋值是不合法的。本题中的答案D就属于这种情况,所以p=n;是非法的赋值语句。

(266)有以下程序

Void fun(char*c,int d)

{ *c=*c+1;d=d+1;

printf(“%c,%c,”,*c,d); } main()

{ char a=‘A’,b=‘a’;

fun(&b,a); printf(“%c,%c\\n”,a,b); }

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

A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,a 参考答案:D

考察知识点:函数的调用

解析:将a,b代入函数得*&b=*&b+1=a+1=b,所以打印出第一个字母b。a=a+1=A+1=B,打印出第二个字符B。a=‘A’,输出字母A;b=‘a’,输出字母a。

(269)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) { int i,t;

for(i=0;i

{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main()

{ int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8);

for(i=6;i<10;i++)s+=b[i]; printf(“%d\\n”,s); }

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

A)22 B)10 C)34 D)30 参考答案:A

考察知识点:对数组的操作

解析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。

(272)以下叙述中错误的是_______。

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件

c)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据 D)不可以用FILE定义指向二进制文件的文件指针 参考答案:D

考察知识点:对文件的操作 解析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCⅡ文件和二进制文件,所以,可以用FILE定义指向二进制文件的文件指针。

(273)有以下程序 #include

main(int argc,char*argv[])