1、省高等学校计算机等级考试(二级C语言)选择题试题库 答案 试题 C 1. 在C语言源程序中,以下叙述正确的是( )。 A. main函数必须位于文件的开头 B. 每行只能写一条语句 C. 程序中的一个语句可以写成多行 D. 每个语句的最后必须有点号 C 2. 关于C语言的源程序的叙述中,错误的是( )。 A. C语言的源程序由函数构成 B. main函数可以书写在自定义函数之后 C. 必须包含有输入语句 D. 一行可以书写多个语句 C 3. 关于C语言数据类型的叙述,正确的是( )。 A. 枚
2、举类型不是基本类型 B. 数组不是构造类型 C. 变量必须先定义后使用 D. 不允许使用空类型 C 4. C程序中main函数的位置( )。 A. 必须在最开始 B. 必须在系统库函数后面 C. 可以在自定义函数后面 D. 必须在最后 B 5. C语言的函数体由( )括起来。 A. ( ) B. { } C. [ ] D. /* */ D 6. 关于C语言的叙述中,不正确的是( )。 A. C程序可由一个或多个函数组成 B. C程序必须包含一个main()函数 C. C程序的基本组成单位是函数 D.
3、 注释说明只能位于一条语句的后面 D 7. 以下叙述不正确的是( )。 A. C程序的执行总是从main函数开始 B. 一个C源程序必须包含一个main函数 C. C语言程序的基本组成单位是函数 D. 在编译C程序源程序时,可发现注释中的拼写错误 C 8. 结构化程序设计的三种基本结构是( )。 A. 函数结构、分支结构、判断结构 B. 函数结构、嵌套结构、平行结构 C. 顺序结构、分支结构、循环结构 D. 分支结构、循环结构、嵌套结构 C 9. 对于C语言源程序,以下叙述错误的是( )。 A. 可以有空语句 B. 函
4、数之间是平等的,在一个函数部不能定义其它函数 C. 程序调试时如果没有提示错误,就能得到正确结果 D. 注释可以出现在语句的前面 D 10. 下面关于C语言用户标识符的描述,正确的是( )。 A. 不区分大小写 B. 用户标识符不能描述常量 C. 类型名也是用户标识符 D. 用户标识符可以作为变量名 D 11. 以下( )是正确的变量名。 A. 5f B. if C. f.5 D. _f5 D 12. 以下( )是正确的常量。 A. E-5 B. 1E5.1 C. 'a12' D. 32766L D
5、 13. 以下( )是正确的变量名。 A. a.bee B. -p11 C. int D. p_11 C 14. 以下( )是正确的字符常量。单引号括起来 A. "c" B. '\\'' C. 'W' D. "\32a" A 15. 以下( )是不正确的字符串常量。双引号括起来 A. 'abc' B. "12'12" C. "0" D. " " B 16. 以下( )是错误的整型常量。 A. -0xcdf B. 018 //八进制数不能超过8 C. 0xe D. 011 B 17.
6、 以下( )是正确的浮点数。 A. e3 //e前面必须有数字,指数必须为整数 B. .62 C. 2e4.5 D. 123 A 18. 若有说明语句:char c='\95'; 则变量c包含( )个字符。 A. 1 \ddd :表示1到3位八进制数所代表的字符 B. 2 \xhh表示 1到2位十六进制数所代表的字符 C. 3 D. 语法错误 A 19. 若有定义:int a=2; 则正确的赋值表达式是( )。 A. a-=(a*3) B. double(-a)//(double)(-a) C. a*3 D. a
7、4=3 C 20. 语句x=(a=3,b=++a);运行后,x、a、b的值依次为( )。 A. 3,3,4 //逗号运算符与逗号表达式 B. 4,4,3 C. 4,4,4 D. 3,4,3 B 21. 语句a=(3/4)+3%2;运行后,a的值为( )。 A. 0 B. 1//注意除号/ 两边均为整型时,结果为整数(不含小数点) C. 2 D. 3 A 22. char型变量存放的是( )。//考查变量类型 A. ASCII代码值 B. 字符本身 C. 十进制代码值 D. 十六进制代码值 C 23.
8、若有定义:int x,a;则语句x=(a=3,a+1);运行后,x、a的值依次为( )。 A. 3,3//考查逗号表达式与逗号运算符 B. 4,4 C. 4,3 D. 3,4 B 24. 若有定义:int a; 则语句a=(3 * 4)+ 2 % 3;运行后,a的值为( )。 A. 12 B. 14 C. 11 D. 17 A 25. 若有定义:int a,b; double x,则以下不符合C语言语法的表达式是( )。 A. x%(-3) //%两侧均应为整型数据 B. a+=-2 C. a=b=2 D. x=a+b
9、B 26. 若有定义:int x=2,y=3;float i;,则以下符合C语言语法的表达式是( )。 A. x=x*3=2//x*3不是一个变量名 B. x=(y==1) C. i=float(x)//应改为i=(float)x D. i%(-3) //%两侧均应为整型数据 C 27. 设double型变量a,b,c,e均有值;对代数式(3ae)/(bc),不正确的C语言表达式是( )。 A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c//改为3*a*e/b/c D. a*e/c/b*3 B 28. 下面
10、叙述正确的是( )。 A. 2/3 与 2.0/3.0 等价 B. (int)2.0/3 与 2/3 等价 C. ++5 与 6 等价//单独写++5是错误的,可以写成a=++5 D. 'A'与"A"等价 A 29. 下面叙述中,错误的是( )。 A. 其算术运算对象不包含函数 B. %(模运算符)的运算对象只能为整型量 C. 算术运算符的结合方向是"自左至右" D. 自加和自减运算符的结合方向是"自右至左" A 30. 下面叙述正确的是( )。//++ --只能用于变量,而不能用于常量或表达式 A. 强制类型转换运算的优先级高于
11、算术运算 B. 若a和b是整型变量,(a+b)++是合法的 C. 'A'*'B' 是不合法的 D. "A"+"B"是合法的 B 31. 若有定义:int k,i=2,j=4; 则表达式 k=(++i)*(j--) 的值是( )。 A. 8 B. 12//注意前缀 后缀的区别 C. 6 D. 9 C 32. 设整型变量a为5,使b不为2的表达式是( )。 A. b=(++a)/3 B. b=6-(--a) C. b=a%2//结果为1 D. b=a/2 C 33. 若有定义:int a=1,b=2,c=3; 则语句 ++a
12、b&&++c;运行后b的值为( )。 A. 1 B. 0 C. 2 //注意运算的不完全性 D. 3 B 34. 若有定义:int i,j;则表达式(i=2,j=5,i++,i+j++)的值是( )。 A. 7 B. 8 C. 9 D. 10 B 35. 若有定义:int a,b;则表达式(a=2,b=5,a*2,b++,a+b)的值是( )。 A. 7 B. 8 C. 9 D. 10 B 36. 若有定义:int m=5,n=3;则表达式(m+1,n+1,(--m)+(n--))的值是( )。 A
13、 6 B. 7 C. 8 D. 9 B 37. 已知 int a;使用scanf()函数输入一个整数给变量a,正确的函数调用是( )。 A. scanf("%d",a); B. scanf("%d",&a); C. scanf("%f",&a); D. scanf("%lf",&a); D 38. 已知 double a;使用scanf()函数输入一个数值给变量a,正确的函数调用是( )。 A. scanf("%ld",&a); B. scanf("%d",&a); C. scanf("%7.2f",&a);//输入数据时不能规
14、定精度 D. scanf("%lf",&a); B 39. 已知 char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是( )。 A. scanf("%d",&a); B. scanf("%lf",&a);//字符型变量与整型等价,但不与浮点型等价 C. scanf("%c",&a); D. scanf("%u",&a); B 40. putchar()函数的功能是向终端输出( )。// char *str0;….;puts( str0); A. 多个字符 B. 一个字符 C. 一个实型变量值 D. 一个整型变量表
15、达式 D 41. getchar()函数的功能是从终端输入( )。 A. 一个整型变量值 B. 一个实型变量值 C. 多个字符 D. 一个字符 D 42. 若有定义:int x=1234,y=123,z=12;则语句printf("%4d+%3d+%2d", x, y, z);运行后的输出结果为( )。 A. 123412312 B. 2 C. 1234+1234+1234 D. 1234+123+12 A 43. 已有如下定义和输入语句, int a; char c1,c2; scanf("%d%c%c",&a,&c1,&c2
16、); 若要求a、c1、c2的值分别为10、A和B,正确的数据输入是( )。 A. 10AB//输入数据时,遇空格、回车、TAB、与非法输入 或按规定的宽度结束 B. 10 A B C. 10A B D. 10 AB B 44. 已有如下定义和输入语句: int a,b; scanf("%d,%d",&a,&b); //“格式控制”字符串中除了格式说明还有其他字符,则输入//时应在相应位置输入 若要求a、b的值分别为10和20,正确的数据输入是( )。 A. 10 20 B. 10,20 C. a=10,b=20 D. 10;20
17、 D 45. 以下程序的运行结果是( )。 void main() { int a=65; char c='A'; printf("%x,%d",a,c); } A. 65,a B. 41,a C. 65,65 D. 41,65 A 46. 下面叙述中,( )不是结构化程序设计中的三种基本结构之一。 A. 数据结构 B. 选择结构 C. 循环结构 D. 顺序结构 A 47. 下面叙述中,( )不是结构化程序设计三种基本结构的共同特点。 A. 先判断后执行 B. 单入口,单出口 C. 程序中没
18、有执行不到的语句 D. 无死循环 A 48. 结构化程序设计不包括( )。 A. 最优化 B. 自顶而下,逐步细化 C. 模块化设计 D. 结构化编码 D 49. 以下运算符中优先级最高的是( )。 A. > B. || C. && D. + //初等运算符()[] 单目 算术 关系 逻辑(不含!) 赋值 逗号 A 50. 若有定义:int x=3,y=4;则表达式 !x||y 的值为( )。 A. 1 B. O C. 3 D. 4 A 51. 若有定义:int i=7,j=8;则表达式 i>=
19、j||i 20、有定义:int a=5,b=2,c=1;则表达式a-b 21、确的表达式是( )。
A. a%10
B. a=int(3e2)
C. 2*a=a++
D. a=a+a=a+3与C 同属一类错误
A
58. 设单精度型变量f、g的值均为2.0,使f为4.0的表达式是( )。
A. f+=g
B. f-=g+2
C. f*=g-6
D. f/=g*10
B
59. 若有定义:float x=3.5;int z=8;则表达式 x+z%3/4 的值为( )。
A. 3.75
B. 3.5
C. 3
D. 4
A
60. 若有定义:int a=1,b=2,c=3,d=4,x=5,y=6; 22、则表达式 (x=a>b)&&(y=c>d) 的值为( )。
A. 0
B. 1
C. 5
D. 6
A
61. 若有定义:int a=2,b=3; float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值是( )。//(float)(a+b)/2=2.5
A. 3.5
B. 3.0
C. 2.5
D. 2.0
C
62. 若有定义:int b=7; float a=2.5,c=4.7;则表达式a+(b/2*(int)(a+c)/2)%4的值是( )。
A. 2.5 //(b/2*(int 23、)(a+c)/2)=10 注意运算顺序
B. 3.5
C. 4.5
D. 5.5
C
63. 若有定义:int a=6,b=2;char c1='a',c2='b';则表达式a+b%5+c2-c1的值是( )。
A. 7
B. 8
C. 9
D. 表达式错误
B
64. 以下的if语句中,x的值一定被重新赋值的是( )。
A. if(x==y) x+=y;
B. if(x>y && x!=y );//注意if语句后的空语句;
x+=y;
C. if(x!=y)
scanf("%d",&x);
else
24、 scanf("%d",&y);
D. if(x 25、
D. if (x%2==1) x=0; else x=1;
B
67. 若有定义:int x=1,y=2,z=4;则以下程序段运行后z的值为( )。
if(x>y) z=x+y;
else z=x-y;
A. 3
B. -1
C. 4
D. 不确定
D
68. 若有定义:int a=1,b=2,c=3;则执行以下程序段后a,b,c的值分别为( )。
if (a 26、
69. 以下程序段运行后变量a的值为( )。
int x=6,y=5;
int a;
a=(--x==y++)?x:y+1;
A. 0
B. 1
C. 6
D. 5
C
70. 以下程序的运行结果是( )。//注意分支中有无break的区别
void main()
{
int n='e';
switch(n--)
{
default: printf("error ");
case 'a':
case 'b': printf("good "); break;
case 'c': printf( 27、"pass ");
case 'd': printf("warn ");
}
}
A. error
B. good
C. error good
D. warn
C
71. 以下程序的运行结果是( )。
void main()
{
int n='c';
switch(n++)
{
default: printf("error "); break;
case 'a':
case 'b': printf("good "); break;
case 'c': printf("pass ");
28、 case 'd': printf("warn ");
}
}
A. pass
B. warn
C. pass warn
D. error
D
72. 以下程序的运行结果是( )。
void main( )
{ int n=5;
if(n++>=6)
printf("%d\n",n);
else
printf("%d\n",++n);
}
A. 4
B. 5
C. 6
D. 7
B
73. 设有整型变量x,下述语句( )不会出现死循环。
A. for(;;x+=1);
B. fo 29、r(;(x=getchar())!='\n';);
C. while(1) {x++;}
D. for(x=10;;x--);
B
74. 对于整型变量x,与while(!x)等价的是( )。
A. while(x!=0)
B. while(x==0)
C. while(x!=1)
D. while(~x)
A
75. 对于整型变量x和y,语句
for(x=0,y=0;(y!=123)&&(x<4);x++) y++;
中的“y++;”被执行( )。
A. 4次
B. 0次
C. 123次
D. 3次
B
30、76. 在c语言中while循环和do--while循环的主要区别是( )。
A. do--while循环体可以使用break语句,while循环体不能使用break语句
B. do--while的循环体至少无条件执行一次,while的循环体不是
C. do--while循环体可以使用continue语句,while循环体不能使用continue语句
D. while的循环体至少无条件执行一次,do--while的循环体不是
B
77. 以下程序段运行后,循环体运行的次数为( )。
int i=10,x;
for (;i<10;i++) x=x+i;
A. 31、10
B. 0
C. 1
D. 无限
D
78. 以下程序段运行后变量n的值为( )。
int i=1,n=1;
for (;i<3;i++)
{continue;n=n+i;}
A. 4
B. 3
C. 2
D. 1
B
79. 以下程序的运行结果是( )。
void main()
{
int sum = 0, item = 0;
while(item < 5)
{
item++;
sum += item;
if(sum==5)
break;
}
pr 32、intf("%d\n",sum);
}
A. 10
B. 15
C. 5
D. 6
C
80. 以下程序的运行结果是( )。
void main()
{
int sum = 0, item = 0;
while(item < 5)
{
item++;
sum += item;
if(sum>=6)
break;
}
printf("%d\n",sum);
}
A. 10
B. 15
C. 6
D. 7
B
81. 以下程序的运行结果是( )。
void m 33、ain()
{
int sum = 0, item = 0;
while(item < 5)
{
item++;
if(item == 2)
continue;
sum += item;
}
printf("%d\n",sum);
}
A. 10
B. 13
C. 15
D. 1
A
82. 下列数组定义中,正确的是( )。
A. int a[5]={0};
B. int a[]={0 1 2}; // int a[]={0 , 1,2}; 注意元素与元素之间加逗号
C. in 34、t a[5]=0; // int a[5]={0};
D. int a[]; //必须指明数组大小
A
83. 下列数组定义中,正确的是( )。
A. int a[10];
B. int n=10,a[n]; //下标必须是常量表达式
C. int N=10;int a[N];
D. int n;scanf("%d",&n); int a[n];
A
84. 已知 int a[10]; 则对a数组元素引用不正确的是( )。
A. a[10]//10个元素的数组下标围从0到9 ,故此题越界
B. a[3+5]
C. a[10-10]// 35、引用数组元素时,下标可以是整型常量或整型表达式
D. a[5]
B
85. 若有定义:int a[3]={0,1,2};则a[1]的值为( )。
A. 0
B. 1
C. 2
D. 3
A
86. 若有定义:int a[5]={1,2,3,4,5};则语句a[1]=a[3]+a[2+2]-a[3-1];运行后a[1]的值为( )。
A. 6
B. 5
C. 1
D. 2
D
87. 以下能对一维数组a进行正确初始化的语句是( )。
A. int a[5]=(0,0,0,0,0);
B. int a[5]=[0]; //注 36、意使用大括号
C. int a[5]={1,2,3,4,5,6,7};//多余2个
D. int a[]={0};//定义一个只有一个元素的一维数组,指为0
D
88. 下面程序段的运行结果是( )。
int i=0,a[]={3,4,5,4,3};
do{
a[i]++;
}while(a[++i]<5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
A. 4 5 6 5 4
B. 3 4 5 4 3
C. 4 5 5 5 4
D. 4 5 5 4 3
C
89. 下面程序段的运行结果是( ) 37、
int i=0,a[]={7,5,7,3,8,3};
do{
a[i]+=2;
}while(a[++i]>5);
for(i=0;i<6;i++)
printf("%d ",a[i]);
A. 9 7 9 5 10 5
B. 9 5 9 3 10 3
C. 9 5 7 3 8 3
D. 7 5 7 3 8 3
A
90. 下面程序段的运行结果是( )。
int i=0,a[]={1,2,3,4,5};
do{
a[i]+=10;
}while(a[++i]>2);
for(i=0;i<5;i++)
print 38、f("%d ",a[i]);
A. 11 2 3 4 5
B. 1 2 3 4 5
C. 11 12 13 14 15
D. 11 12 3 4 5
C
91. 设有如下程序段:
int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j 39、3,4,5,6,7,8}; //考查二维数组的初始化
则数组a的行数是( )。
A. 2
B. 3
C. 4
D. 无法确定的
D
93. 以下数组定义中,正确的是( )。
A. int a[2][3]={1,2,3,4,5,6,7};//多余1个
B. int a[][]={{1,2,3},{4,5,6},{7,8,9}};//第二维长度不能省
C. int a[2][]= {1,2,3,4,5,6};
D. int a[][4]= {6};
A
94. 若有定义:int a[3][4]={{1,2},{0},{1,2,3}};则a 40、[1][1]的值为( )。
A. 0
B. {1,2}
C. 1
D. 3
A
95. 若有定义:int a[3][3];则表达式&a[2][1]-a的值为( )。
A. 7//&a[2][1]-a 代表两者之间的元素个数,类似指向同种类型的指针相减
B. 8
C. 6
D. 9
C
96. 若有定义:int i=0,x=0;int a[3][3]={1,2,3,4,5,6,7,8,9};则以下程序段运行后x的值为( )。
for (;i<3;i++) x+=a[i][2-i];
A. 0
B. 12
C. 15
D. 18 41、
D
97. 若有定义int a[2][3];则对数组元素的非法引用是( )。
A. a[0][1/2]
B. a[1][1]
C. a[4-4][0]
D. a[0][3]
C
98. 以下数组定义中,正确的是( )。
A. int a[2][]={1,2,3,4,5};
B. int a[][2]={{0},{}};
C. int a[2][2]={{1,2},{3}};
D. int a[][]={1,2,3,4};
D
99. 若有定义int a[][3]={1,2,3,4,5,6,7,8,9};则表达式sizeof(a 42、)/sizeof(a[0])
的值为( )。
A. 3
B. 4
C. 5
D. 9
A
100. 设有以下变量定义:
char str1[]="string",str2[8],*str3,*str4="string";
( )是正确的。
A. strcpy(str1,"China");
B. str2="China";
C. strcpy(*str3,"China");
D. strcpy(str4[0],"China");
D
101. 有如下定义:
char str[6]={ 'a','b','\0','d',' 43、e','f'};
则语句:
printf("%s",str);
的输出结果是( )。
A. ab\
B. abdef
C. ab\0
D. ab
C
102. 设有如下数组定义:
char str[8]={ "FuJian"};
则分配给数组str的存储空间是( )个字节。
A. 6
B. 7
C. 8
D. 9
B
103. 若有定义:char a[]="abcdef";char b[]="xyz";则以下程序段运行后屏幕输出为( )。
strcpy(a,b);
printf("%c",a[2]);
A. 44、c
B. z
C. \0
D. d
C
104. 以下程序段运行后屏幕输出为( )。
char a[]="abc\0mis";
printf("%d",strlen(a));
A. 5
B. 8
C. 3
D. 4
B
105. 若有定义:int a=2;则语句a=strcmp("miss","miss");运行后a的值为( )。
A. 1//相等返回0 ,字符串1>字符串2,返回一个正整数,否则返回负整数
B. 0//strcmp(str1,str2)
C. -1
D. 2
B
106. 以下程序段运行后屏幕输出为 45、 )。
char str[]="ab\\cd";注意\\代表一个反斜杠字符
printf("%d",strlen(str));
A. 4
B. 5
C. 6
D. 7
A
107. 以下程序段运行后屏幕输出为( )。
char str[80];strcpy(str,"hello");printf("%d",strlen(str));
A. 5
B. 6
C. 7
D. 80
B
108. 若有定义:char str1[6]="abcdm",*ps,*str2="abcdef";( )是正确的。
A. strc 46、py(str1,str2);
B. 表达式strcmp(str1,str2)的值大于0
C. str1=str2;
D. 表达式strlen(str1)的值为6
A
109. 设有如下函数定义:
int fun(char *str)
{ char *p=str;
while ( *p != '\0') p++;
return (p-str);
}
则以下语句执行后的输出结果是( )。//返回字符串个数
printf("%d\n",fun("Student"));
A. 7
B. 8
C. 9
D. 10
A
110. 47、 以下程序的运行结果是( )。
int fun(int array[4][4])
{ int j;
for(j=0;j<4;j++) printf("%2d",array[2][j]);
printf("\n");
}
main()
{ int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};
fun(a);
}
A. 2 0 0 5
B. 1 0 0 4
C. 0 1 2 0
D. 0 4 5 0
C
111. 如下fun函数的类型是( )。
fun(float x)
{double y; i 48、nt z ;
y=x * x ;
z=(int)y ;
return(z);
}
A. void
B. double
C. int
D. float
B
112. 以下程序运行后屏幕输出为( )。
#include 49、D
113. 以下程序运行后屏幕输出为( )。//考查全局变量与局部变量的区别与围
#include 50、函数中的a不一样
{
int a=2;
a=i++;
printf("%d,",a);
}
main()
{
int a=1,c=3;
f(c);
a=c++;
printf("%d",a);
}
A. 4,3
B. 3,3
C. 4,5
D. 3,5
D
115. 若有如下函数定义://注意静态变量的使用
int fun()
{
static int k=0;
return ++k;
}
以下程序段运行后屏幕输出为( )。
int i;
for(i=1;i<=5;i++) fun();
pr






