1.以下有4组用户标识符,其中合法的一组是( )。
A) For -sub Case B) 4d DO Size
C) f2_G3 IF abc D) WORD void define
答案C
解析:标识符的命名规则:由字母、数字、下划线组成,第一个字符必须是字母或者下划线,标示符的命名不能同C语言的关键字相同(关键字表格教材第6页)
A-sub错误;B,4d错误;Dvoid是关键字。注意:关键字都是小写的,如果大写就不是关键字了。
2、以下选项中合法的字符常量是( )。
A) “B” B) ‘\010’ C) 68 D) D
答案B
解析:字符常量使用‘’括起来的。参考课本24页
转义字符书写方法:1.\加上字母;2.\加上1~3位八进制数,这里八进制数以0开头;3.\加上1~2位十六进制数,这里十六进制数以x开头。例如:
‘
’第一种方法
‘\012’第二种方法
‘\xa’ 第三种方法
4、设变量a是整型,f是实型,i是双精度型,则表达式10+a+i*f值的数据类型为( )。
A) int B) float C) double D) 不确定
答案:C,按照低精度转换成高精度的原则(教材34页)
5、.以下程序的输出结果是
main()
{
char c=‘z';
printf(“%c”,c-25);
}
A) a B) Z C) z-25 D) y
答案:A
解析:方法一:‘z’对应的ASCII码是122,122-25=97,输出的是%c,即字符的形式,97对应小写字母a。
方法二:与小写字母z相差22的就是小写字母a
6、设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )。
A) 3 B) 4 C) 11 D) 12
答案:A
解析:x++,先取x的值再乘以1除以3,11*1=11,11/3=3因为都是整形的数据,因此相除之后的结果应该为整形。
7、假设所有变量均为整型,则表达式(a=2, b=5, b++, a+b)的值是( )。
A) 7 B) 8 C) 6 D) 2
答案:B
解析:逗号表达式的值为表达式最右边式子的值,计算过程a=2,b=5,b=b+1=6,a+b=2+6=8;最右边式子是a+b其值为8,因此整个逗号表达式的值为8.
8、以下程序的输出结果是( )。
#include
main()
{
int a=10,b=10;
printf(“%d,%d
”,a++,--b);
}
A) 10,10 B) 8,10 C) 10,9 D) 8,9
答案:C
解析:本题是++,--运算的使用,首先看输出函数的输出项,从右边开始往左计算,--b,--在b的前面,因此先进行b-1运算,再输出b的值,b输出值为9;a++,++在a的后面,先输出a的值再进行a+1运算,因此a输出的值应该为10.
9、以下程序的输出结果是( )。
main( ){ int k=17; printf("%d,%o,%x
",k,k,k);}
A)17,021,0x11 B)17,17,17B)17,0x11,021 D)17,21,11
答案:D
10、若变量已正确说明为float类型,要通过语句scanf("%f %f %f ",&a,&b,&c); 给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是( ):
A) 10<回车> B) 10.0,22.0,33.0<回车> 22<回车> 33<回车>C) 10.0<回车> D) 10 22<回车> 22.0 33.0<回车> 33<回车>
答案B,输入函数的使用方法,使用scanf函数输入时按空格或者回车将数据隔开
11、若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是( )。
A) (exp==0) B) (exp!=0) C) (exp==1) D) (exp!=1)
答案B
解析:我们先分析题目的条件,如果exp为真(也就是说exp不为0)那么输出a++,否则输出b--,很明显应该选择exp!=0
12、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( )。
if(ay)
z=x;x=y;y=z;
A) x=10,y=20,z=30 B) x=20,y=30,z=30
C) x=20,y=30,z=10 D) x=20,y=30,z=20
答案:B
解析:x=10,y=20因此x>y不成立,语句z=x;不被执行,继续执行x=y;y=z,x=20,y=30,而z的值保持不变。
14、有如下程序 main( ){int x=1,a=0,b=0; switch(x)
{ case 0: b++; case 1: a++; case 2: a++;b++; } printf(“a=%d,b=%d
”,a,b);} 该程序的输出结果是( )。
A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2
答案A
解析:x=1,执行a++;先取a的值,在将a=a+1=1,接下来执行a++,b++同样的道理,先执行a=1,和b=0,再进行+1运算,最后a=a+1=2,b=b+1=1。
15、以下程序的输出结果是( )。
main()
{
int a= -1, b=4, k;
k=(++a<0)&&!(b--<=0);
printf(“%d%d%d
”, k, a, b);
}
A) 104 B) 103 C) 003 D) 004
答案D
解析:++a先取将a=a+1再进行a与0的比较,显然0<0是不成立的,因此k=0,!(b--<=0)不参与计算,因此b的值仍为4
16、若变量a、i已正确定义,且i已正确赋值,合法的语句是( )。
A) a==1 B) ++i; C) a=a++=5; D) a=int(i);
答案B
17、下面程序段的运行结果是( )。
int n=0;
while(n++<=2);
printf(“%d”,n);
A) 2 B) 3 C) 4 D) 有语法错
答案C
解析:while语句的循环体为空,这里要注意语句后面的分号,断定循环体为空,因此第一次循环n=0,n<=2为真,n++,n=1;第二次循环n=1,n<=2成立,n++,n=2;第三次循环,n=2,n<=2,n++,n=3;第三次循环,n=3,n<=2不成立,但是在判断的时候是判断n++<=2成立不成立,因此n++是参与计算的,所以,n=n+1=4
18、若有如下语句
int x=3;
do{ printf(“%3d”,x-=2);} while(!(--x));
则上面程序段( )。
A) 输出的是1 B) 输出的是1和-2
C) 输出的是3和0 D) 是死循环
答案B
解析:do-while循环,先执行后判断,首先输出x-=2的值,即x=x-2=3-2=1。,接着判断--x是否为0,是则继续执行循环,因为--x为0则!(--x)为1,那么--x即先将x-1再判断,因此1-1=0,所以继续循环,输出x=x-2=0-2=-2,判断--x的值,--x=-3因此!(--x)为假循环结束。程序输出了1和-2
19、下面程序的运行结果是( )。
#include
main()
{int a=1,b=10;
do
{b-=a;a++;}
while(b--<0);
printf(“a=%d,b=%d
”,a,b);
}
A) a=3,b=11 B) a=2,b=8
C) a=1,b=-1 D) a=4,b=9
答案B
解析:do-while循环先执行后判断,因此先执行b=b-a=10-1=9,a=a+1=1+1=2,判断b--<0是否成立,b=9<0不成立,循环结束,b=b-1=8,最后输出a=2,b=8
20、设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是( )。
A) while循环执行10次 B) 循环是无限循环
C) 循环体语句一次也不执行 D) 循环体语句执行一次
答案:C
解析:while语句先判断后执行k=0不成立,循环体不被执行。
21、语句while(!E);中的表达式!E等价于( )。
A) E==0 B) E!=1 C) E!=0 D) E==1
答案:A
解析:只有当E为0的时候!0才为真,也就是只有当E=0时while循环体才被执行。
22、t为int类型,进人下面的循环之前,t的值为0,则以下叙述中正确的是( )。
while( t=l ){……}
A) 循环控制表达式的值为0 B) 循环控制表达式的值为1C) 循环控制表达式不合法 D) 以上说法都不对
答案B
25、以下程序的输出结果是( )。
main()
{int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20) break;
if(b%3==1)
{b+=3;
continue;
}
b-=5;
}
printf(“%d
”,a);
}
A) 7 B) 8 C) 9 D) 10
答案:
a=1,b=1,b%3=1,b=b+3=4;
a=2,b%3=1,b=b+3=7;
a=3,b%3=1,b=10
a=4,b%3=1,b=13
a=5,b%3=1,b=16
a=6,b%3=1,b=19
a=7,b%3=1,b=21
a=8,b>=20,循环结束,因此a的值为8
26、以下程序的输出结果是( )。
main()
{int i,j,x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<=3;j++)
{ if(j%2) continue;
x++;
}
x++;
}
printf(“x=%d
”,x);
}
答案:8
i=0, x=1,j=0,j%2=0,x=2
j=1,j%2=1
j=2,j%2=0,x=3
j=3,j%2=1
x=4
i=1,x=5, j=0,j%2=0,x=6
j=1,j%2=1
j=2,j%2=0,x=7
j=3,j%2=1
x=8
27、运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果是( )。
main()
{int m,n;
scanf(“%d%d”,&m,&n);
while(m!=n)
{while(m>n) m-=n;
while(n>m) n-=m;
}
printf(“m=%d
”, m);
}
A) m=3 B) m=2 C) m=1 D) m=0
m=65,n=14
m!=n m>n m=m-n=65-14=51
m!=n m>n m=m-n=37
m!=n m>n m=m-n=23
m!=n m>n m=m-n=9
m!=n n>m n=n-m=14-9=5
m!=n m>n m=m-n=9-5=4
m!=n n>m n=n-m=5-4=1
m!=n m>n m=m-n=4-1=3
m!=n m>n m=m-n=3-1=2
m!=n m>n m=m-n=2-1=1
m=n循环结束,最后m的值为1
28、设有数组定义: char array[ ]="China"; 则数组array所占的空间为( C )。
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
29、假定int类型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是( D )。
A) 3 B) 6 C) 10 D) 20
30、执行下列程序时输入:123<空格>456<空格>789<回车>,输出结果是( D )。
main(){ char s[100];
int c, i; scanf("%c", &c); scanf("%d", &i); scanf("%s", s); printf("%c, %d, %s
", c, i, s);}
A) 123,456,789 B) 1,456,789
C) 1,23,456,789 D) 1,23,456
31、以下程序的输出结果是( D )。
main(){char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},k; for(k=1;k<3;k++) printf("%s
",w[k]