07年4月等级考试二级C语言模拟练习一[2]

文章作者 100test 发表时间 2007:04:06 21:22:34
来源 100Test.Com百考试题网


计算机等级考试训练软件《百宝箱》

(18)以下程序段的输出结果是
int a=1234.
printf("-\n",a).
A)12
B)34
C)1234
D)提示出错、无结果
【答案】C
【解析】 printf()函数的输出格式,当整数的值超过格式要求输出范围时,原样输出。本题中要求输出两个有效数字,而实际上a有4个有效数字,故原样输出,输出1234。

(19)以下选项中不属于C语言的类型的是
A)signed short int
B)unsigned long int
C)unsigned int
D)long short
【答案】D
【解析】在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。

(20)若有说明语句:int a,b,c,*d=&.c.则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
A)scanf("%d%d%d",&.a,&.b,d).
B)scanf("%d%d%d",&.a,&.b,&.d);
C)scanf("%d%d%d",a,b,d).
D)scanf("%d%d%d",a,b,*d);
【答案】A
【解析】scanf()函数有两个参数,第一个参数是输入格式字符串,第二个参数是输入变量地址列表。输入格式字符串主要由“%”符号和格式字符组成。地址列表是由多个地址组成的。选项B中d已经为地址,不应在加上求地址符号“&.”.选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&.”;选项D中指针d所指向的存储空间的位置为变量c的值,不为地址。

(21)在16位C编译系统上,若定义long a.,则能给a赋40000的正确语句是
A)a=20000 20000.
B)a=4000*10.
C)a=30000 10000.
D)a=4000L*10L.
【答案】D
【解析】由于20000 20000、4000*10及30000 10000都是整型表达式,故运算的结果仍然是整型,表达式运算的结果超出了整型数据的范围,不正确。而D是长整型运算,不会超出长整型的范围。

(22)以下叙述正确的是
A)可以把define和if定义为用户标识符
B)可以把define定义为用户标识符,但不能把if定义为用户标识符
C)可以把if定义为用户标识符,但不能把define定义为用户标识符
D)define和if都不能定义为用户标识符
【答案】B
【解析】C语言中的保留字,而define不是保留字。用户标识符不允许使用保留字。

(23)若定义:int a=511,*b=&.a.则printf("%d\n",*b);的输出结果为
A)无确定值
B)a的地址
C)512
D)511
【答案】D
【解析】本题中先定义了一个int型的变量a并赋初值为511,接着定义了一个指向a的指针变量b,在printf()函数的输出格式中,是输出*b,即输出指针所指向变量a的值为511,因此输出511。

(24)以下程序的输出结果是
main()
{ int a=5,b=4,c=6,d.
printf(("%d\n",d=a>b?)(a>c? a:c):(b)).
}
A)5
B)4
C)6
D)不确定
【答案】C
【解析】在C语言中问号表达式(如:a>c?a:c.)的计算规则为:如果a>c为真,那么表达式的值为a的值;否则表达式的值为c的值。本题中的printf()函数中的输出表达式,首先计算括号内的条件表达式,它的值为6(a>c?a:c中a>c即5>6为假故该表达式的值为c的值即为6),然后再计算外面表达式(等价于a>b?6:b)的值,同理可得该表达式的值为6,将值6赋值给d,因此最后输出该表达式的值为6。

(25)以下程序中,while循环的循环次数是
main()
{ int i=0.
while (i<10)
{ if(i<1)continue.
if(i==5) break.
i .
}

}
A)1
B)10
C)6
D)死循环,不能确定次数
【答案】D
【解析】break语句只能在循环体和switch语句体内使用,当break出现在switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但不在switch语句体内时,则在执行break后,跳出本层循环体。而continue语句的作用是结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本程序中,变量i的初始值为0,判断while后面括号内表达式的值为真,执行循环体内的if语句,判断if后面括号内表达式的值为真,执行“continue;”语句。因continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以i的值未发生变化,循环条件仍然为真,if语句也仍然成立,因此循环将无止境地进行下去。

(26)以下程序的输出结果是
main()
{ int a=0,i.
for(i=1.i<5.i )
{ switch(i)
{ case 0:
case 3:a =2.
case 1:
case 2:a =3.
default:a =5.
}
}
printf("%d\n",a).
}
A)31
B)13
C)10
D)20
【答案】A
【解析】switch语句的执行过程是:在switch后面的表达式的值和case后面常量表达式的值吻合时,就执行该case分支的语句。如果在该语句的后面没有break语句,则按顺序继续执行下一个case分支,直到遇到break语句或switch多分支语句结束,在switch语句中,break语句的作用是使流程跳出switch结构,终止switch语句的执行。在本题中,因为每个case语句后面都没有break语句,所以,第一轮循环(i==1)执行过后a的值为8,第2轮(i==2)执行过后a的值为16,第3轮(i==3)执行过后a的值为26,第4轮(i==4)执行过后a的值为31,然后执行“i ”语句,这时循环条件为假,循环结束。

(27)以下程序的输出结果是
main()
{ int a=4,b=5,c=0,d.
d=!a&.&.!b‖!c.
printf("%d\n",d).
}
A)1
B)0
C)非0的数
D)-1
【答案】A
【解析】由于单目运算符优先级高于“&.&.”和“||”运算,所以先计算!a、!b和!c分别为“假”、“假”、“真”,然后是&.&.运算和“||”运算,原表达式就等价于“假”&.&.“假” ||“真”,又由于“&.&.”的优先级高于“||”运算符,所以先计算“假”&.&.“假”,还是为假,最后是“假”||“真”为真。因此最后d被赋值为1,故最后输出为1。


相关文章


07年4月计算机等级考试二级C语言考前密卷答案(10)
07年4月计算机等级考试二级C语言考前密卷(10)
07年4月等级考试二级C语言模拟练习一[2]
07年4月计算机等级考试二级C语言考前密卷答案(9)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛