全国C语言二级笔试
余年寄山水
607次浏览
2020年07月28日 17:22
最佳经验
本文由作者推荐
阿克曼函数-裴怎么读
第一题:是非题(共10分,每项1分)
1. 函数调用语句:func(rec1,rec2+rec3,(rec4,rec5);中,含有的实参个数是5。
A. 对
B. 错
2. C语言中“/ ”运算符的运算对象必须是整型。
A. 对
B. 错
3. 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是2。
A. 对
B. 错
4. 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为5.
A. 对
B. 错
5. 若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是 NULL。
A. 对
B. 错
6. 用do-while语句构成的循环,在while后的表达式为零时结束循环。
A. 对
B. 错
7. 有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 *(P+8)。
A. 对
B. 错
8. 在C程序中,可把整型数以二进制形式存放到文件中的函数是fprintf函数.
A. 对
B. 错
9. C语言的子程序有过程和函数两种。
A. 对
B. 错
10. C语言的函数可以嵌套定义。
A. 对
B. 错
第二题:单选题(共45分,每项1.5分)
11. 下面叙述中正确的是____。
A.全局变量在定义它的文件中的任何地方都是有效的
B.全局变量在程序的全部执行过程中一直占用内存单元
C.同一文件中的变量不能重名
D.使用全局变量有利于程序的模块化和可读性的提高
12. 设有说明:char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为________。
13. C程序的基本结构单位是____。
A.文件
B.语句
C.函数
D.表达式
14. 在以下一组运算符中,优先级最高的运算符是________。
A)<=
B)=
C)%
D)&&
15. 有整型变量x,单精度变量y=5.5,表达式:x=float(y*3+((int)y)%4)执行后,x的值为____。
A. 17
B. 17.5000
C. 17.5
D. 16
16. 有这样的定义float*p[4];则下面的叙述中正确的是____。
A.此定义不正确,形如char*p[4];的定义才是正确的
B.此定义正确,p是指向一维实型数组的指针变量,而不是指向单个实型变量的指针变量
C.此定义不正确,C一语言中不允许类似的定义
D.此定义正确,定义了一个指针数组
17. C语言的if语句中,用作判断的表达式为____。
A.任意表达式
B.逻辑表达式
C.关系表达式
D.算术表达式
18. 整型变量x=1,y=3,经下列计算后,x的值不等于6的是____。
A. X=(x=1+2,x*2)
B. X=y>2?6:5
C. X=-9-(--y)-(--y)
D. X=y*4.8/2
19. 能正确表示逻辑关系:" a≥10或a≤0 "的C语言表达式是________。
A)a>=10 or a<=0
B)a>=0 | a<=10
C)a>=10 && a<=0
D)a>=10 || a<=0
20. 下面说法中正确的是____。
A.编写C
程序时,应该控制嵌套循环的重数
B.编写C程序时,变量名应尽可能简短
C.编写C程序时,应多用goto语句,以增加效率
D.编写C程序时,要尽可能的简洁而新颖,可理解性是第二位的
21. 下列说法中错误的是____。
A.一个数组只允许存储同种类型的变量
B.如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,多余的数组元素会被自动初始化为最后一个给定元素的值
C.数组的名称其实是数组在内存中的首地址
D.当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改
22. 已定义两个字符数组a,b,则以下正确的输入格式是________。
A)get(a, b);
B)scanf("%s%s", a, b);
C)scanf("%s%s", &a, &b);
D)gets("a"),gets("b");
23. 下面对typedef的叙述中不正确的是________。
A)用typedef可以定义各种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已经存在的类型用一个新的标识符来代表
D)使用typedef有利于程序的通用和移植
24. 下面叙述中正确的是____。
A.调用函数时的实参只能是有确定值的变量
( )语句中的括号中,可以是变量,常量或有确定值的表达式
C.C语言中,函数调用时实参变量和形参变量间的参数传递方式都不是值传递
D.实参和形参若类型不匹配,编译时将报错
25. C语言的switch语句中case后____。
A.只能为常量
B.只能为常量或常量表达式
C.可为常量或表达式或有确定值的变量及表达式
D.可为任何量或表达式
26. 下面说法中错误的是____。
A.结构体变量的地址和结构体变量的成员的地址均可以被引用
B.两个相同类型的结构体变量可以相互整体赋值
C.可以对结构体变量进行整体输入输出
D.被定义为指向某结构体类型的变量的指针不能直接指向结构体中的某一成员
27. C语言函数的隐含存储类别是____。
er
28. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类型是________。
A)extern
B)register
C)auto
D)static
29. 下列叙述中正确的是____。
A.将指向函数的指针作为函数的参数,虽然可以提高效率,但是容易造成混乱,所以不符合结构化程序设计的原则。
B.数组名实际上是此数组的首地址,所以数组名相当于一个指针变量
C.若定义数组a[2][3],则a+1和*(a+1)完全等价
D.某函数的形参为一个数组,则调用此函数时只能将数组名作为对应的实参
30. C语言中,逻辑“真”等价于____。
A.大于零
的数
B. 大于零的整数
C. 非零的数
D.非零的整数
31. 不合法的标识符是________。
_do
C._123
D.a1
32. 下面说法中错误的是____。
A.共用体变量的地址和它各成员的地址都是同一地址
B.共用体内的成员可以是结构变量,反之亦然
C.在任一时刻,共用体变量的各成员只有一个有效
D.函数可以返回一个共用体变量
33. 将字符串s1赋给另一个字符串s2,可以采用的方法是____。
(s1,s2)
(s1,s2)
C.s1=s2
(s2,s1)
34. ________是构成C语言程序的基本单位。
A.函数
B.过程
C.子程序
D.子例程
35. C语言中,要求运算对象必须是整型数据的运算符是________。
A.%
B.!
C.%和/
D.==
36. 下面叙述中错误的是____。
A.函数的形式参数,在函数未被调用时就不被分配存储空间
B.若函数的定义出现在主调函数之前,则可以不必再加说明
C.若一个函数没有return语句,则什么值也不会返回
D.一般来说,函数的形参和实参的类型应该一致
37. 以下叙述中不正确的是________。
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
38. 函数调用:strcat(strcpy(str1,str2),str3)的功能是________。
A)将串str1复制到串str2中后再连接到串str3之后
B)将串str1连接到串str2之后再复制到串str3之后
C)将串str2复制到串str1中后再将串str3连接到串str1之后
D)将串str2连接到串str1之后再将串str1复制到串str3中
39. 用数组名作为函数调用的实参,传递给形参的是________。
A.数组的首地址
B.数组第一个元素的值
C.数组中全部元素的值
D.数组元素的个数
40. 在宏定义#define PI 3.14159中,用宏名PI代替一个________。
A.单精度数
B.双精度数
C.常量
D.字符串
第三题: 简单程序(共15分,每项1 .5分)
41. 以下程序运行后,输出结果是________。
#include
{ int x=1, y=0, a=0, b=0;
switch(x)
{ case 1: switch(y)
{ case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;
case 3: a++; b++;
}
printf("
a=%d, b=%d", a, b);
}
A)a=1,b=0
B)a=2,b=1
C)a=1,b=1
D)a=2,b=2
42. 对于如下的结构定义,若对变量person的出生年份进行赋值,________是正确的赋值语句。
struct date
{ int year,month,day; };
struct worklist
{ char name[20];
char sex;
struct date birthday;
}person;
=1976
=1976
=1976
D.29 =1976
43. 不能表示a数组元素的表达式是________。
若有以下定义和语句:
int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a;
A)*p
B)a[10]
C)*p++
D)a[p-a]
44. 以下程序的输出结果是________。
main()
{ int y=30; prt(&y); }
prt(int *x)
{ printf("%d
",++*x); }
A.30
B.31
C.32
D.29
45. 循环语句 for(a=0,b=0;a<3&&b!=3;a++,b+=2)________。
A.是无限循环
B.循环次数不定
C.循环3次
D.循环4次
46. 以下程序的输出结果是________。
main()
{ int i=1;
while(i<=10)
if(++i%3!=2)continue;
else printf("%d,",i);
printf("
"); }
A.2,
B.2,5,8,
C.2,5,
D.2,5,8,11,
47. 设有说明:char *s="TAB-123m'&+"; 指针s所指的字符串的长度是________。
A.8
B.10
C.9
D.说明不合法
48. 以下程序的输出结果是________。
#define MUL(x,y) (x)*y
main()
{ int a=3,b=4,c;
c=MUL(a++,++b);
printf("%d
",c); }
A.12
B.15
C.20
D.30
49. 执行以下程序后,输出的结果是________。
main()
{ int y=10;
do { y--; } while( --y );
printf("%d
",y--);
}
A)-1
B)1
C)8
D)0
50. 以下程序的输出结果是________。
main()
{ int a[]={1,2,3,4,5,6}, *p=a;
*(p+2)+=2;
printf("%d,%d
",*p,*(p+2)); }
A.0,5
B.1,5
C.0,4
D.1,4
第二卷 主观题
填空题(共30分,每项2分。注意:添两个空的题的时候,要按照从上至下,从左至右的顺序添入答题卡!)
1. 若x为int类型,请以最简单的形式写出与逻辑表达式 !x 等价的C语言关系表达式________。
2. 下面程序是从键盘输入的字符中统计数字字符的个数,请填空。
#include "stdio.h"
main()
{ int n=0,c;
while((c=getchar())!='*')
if(_________)n++;
printf("%d
",n);
}
3. 以下程序的输出结果是________。
main()
{ int x,y,z;
x=1; y=2; z=3;
x=y--<=x||x+y!=z;
printf("%d,%d",x,y);
}
4. 要使以下程序段输出10个整数,请填入一个整数。(写最小的数)
for( k=0; k<=________; printf( "%d
", k+=2 ) );
5. 表达式:W*x+z-y 所求得值的数据类型是________。(写汉字)
设有以下变量定义,并已赋确定的值
char w; int x; float y; double z;
6. 下面程序把从终端读入的10个整数以二进制方式写到一个名为的新文件中,请填空。
#include "stdio.h"
FILE *fp;
main()
{ int i, j;
if((fp=fopen(________, "wb"))==NULL) exit(0);
for(i=0; i<10; i++)
{ scanf("%d", &j);
fwrite(&j, sizeof
(int), 1,________);
}
fclose(fp);
}
7. 下面程序利用函数plus求变量a与b的和,填空并写出程序的运行结果________。
int a=5; int b=7;
main()
{ int a=4,b=5,c;
c=plus(a,b);
printf("A+B=%d
",c);
}
plus(int x,int y)
{ int z;
z=x+y;
________
}
8. 下面程序可求出矩阵a的主对角线上的元素之和。请填空。
main()
{ int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,j,k;
for(j=0;j<3;j++)
for(k=0;k<3;k++)
if( ________ )sum=sum+ ________;
printf("sum=%d
",sum);
}
9. 下面程序的功能是将字符串 a 下标值为偶数的元素由小到大排序,其它元素不变。请填空。
#include "stdio.h"
main()
{ char a[]="labchmfye",t;
int i,j;
for(i=0;i<7;i+=2)
for(j=i+2;______________ ; j++)
if(______________)
{ t=a[i]; a[i]=a[j]; a[j]=t; j++; }
puts(a); putchar('
');}
10. 下面程序的功能是把位置指针移到离文件"test"开头10个字节处,然后由getc()函数取出文件指针指向的字符。请填空。
#include "stdio.h"
main()
{ FILE ________;
if((fp=fopen( ________,"rb"))==NULL)
{ printf("Can't open file
"); exit(1); }
fseek(fp,10l,0);
printf("%c",getc(fp));
}