(12)以下选项中,当且仅当x的绝对值在1至6范围内表达式值为“真”的是
A) (x>=-6)&&(x<=-1)||(x>=1)&&(x<=6)
B) (x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1)
C) (x>=-6)||(x<=-1)||(x>=1)||(x<=6)
D) (x>=1)&&(x<=6)||(x>=-1)&&(x<=-6)
答案:A
【解析】选项B中,x既要取值1~6,又要取值-6~-1,这是不可能的,所以选项B表达式的值始终为假,选项B错误;选项C无论x取何值,表达式的值始终为真;选项D中当x=-2时,表达式的值为假,选项D错误;选项A中,仅当x的绝对值在1~6内表达式的值才为真,选项A正确;
(13)以下运用if语句判断x和y大小的程序段,错误的是
A) if (x>y) printf(" x>y ");
if (x<y) printf(" x<y ");
else printf(" x=y ");
B) if(x>=y)
if(x>y) printf("x>y");
else printf("x=y");
else printf("x<y");
C) if (x>y) printf(" x>y ");
if (y>x) printf(" x<y ");
if (x==y) printf(" x=y ");
D) if (x>y) printf(" x>y ");
else if (x<y) printf(" x<y ");
else printf(" x=y ");
答案:A
【解析】C语言规定,else语句总是与前面最近的if配对,因此选项A的语句中,当x > y时,执行printf(“x > y”);接着判断if(x < y)为false,接着执行printf(“x = y”),不能判断x和y的大小;所以答案A错误; 选项B中,第一个if与第二个else配对,第二个if与第一个else配对,程序执行正确;选项C中,三条if语句相互独立,分别都需要执行,正确;选项D
(14)设有语句:printf("%2d\n",2010);,则以下叙述正确的是
A) 程序运行时输出2010 B) 程序运行时输出20
C) 程序运行时输出10 D) 指定的输出宽度不够,编译出错
答案:A
【解析】printf()函数格式化字符串的一般形式为:[标志][输出最小宽度][.精度][长度]类型。对于%2d,%d表示结果以十进制形式输出带符号的整数,数字2表示输出的最小宽度为2,若实际位数多于2,则按实际位数输出,所以程序输出2010,答案选A。
(15)以下选项中,合法的C语言实数是
A) .4e0 B) 4.3e0.2 C) E4.8 D) 0.29E
答案:A
【解析】C语言中,实数有两种形式,十进制小数形式和指数形式,由四个选项可知,本题考查的是实数的指数形式,指数形式一般为: aEn,其中a为十进制数,n为十进制整数,表示的值为:a*10n;B、C错在阶码必须是整数,D错在无阶码,答案为A, A的值为: 0.4 * 100 = 0.4。
(16)设有定义:double x;,以下选项中不能将输入数据3.14读入赋给变量x的是
A) scanf("%4.2f",&x); B) scanf("%lf",&x);
C) scanf("%le",&x); D) scanf("%4lf",&x);
答案:A
【解析】scanf()函数格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。输入数据宽度必须是十进制的整数,它没有精度控制,%4.2f是错误的,不能企图用此语句输入小数点为2位的实数,选项A错误;scanf()函数的长度格式符为l和h,%lf表示用小数形式输入双精度浮点数,满足条件,选项B正确;%le表示用指数形式输入双精度浮点数,满足条件,选项C正确;%4lf表示用小数形式输入宽度为4的双精度浮点数,选项D正确;答案为A。
(17)有以下程序
#include <stdio.h>
main()
{ int x,y=0,z=0,t;
do
{ scanf("%d",&x);
t=x>0;
switch (t)
{ case 0: break;
case 1: y+=x; continue;
}
z+=x;
}
while(x);
printf("%d,%d\n",y,z);
}
程序运行时输入:-1 1 -2 2 0<回车>,则输出结果是
A) 1,1 B) 1,0 C) 3,-3 D) 3,0
答案:C
【解析】分析程序结构,在do…while循环中,嵌套一个switch语句,switch语句中两个case语句分别执行break和continue,其中break语句是跳出switch语句,接着执行do…while循环体剩下的部分;而continue语句是直接进入do…while的下一个循环,由此可知每次循环,当t=0时,执行break语句,接着将z值累加x;当t=1时,执行continue语句,将y值累加x,所以当x输入-1、-2、0时,t = 0,z值累加为-3;当x输入1、2时,t=1,y值累加为3,输出y、z的值分别为 3、-3,答案选C。
(18)以下选项中能正确定义二维数组的选项是
A) double a[][3]={ 2*3 }; B) double a[][3];
C) double a[][3]={ }; D) double a[2][3]={ {1.0},{2.0},{3.0,4.0}};
答案:A
【解析】如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:
double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。
(19)若有函数定义如下
int fun(int x,int y)
{ return x-y; }
则以下涉及上述函数的说明语句错误的
A) int fun( int x,y ); B) int fun( int ,int );
C) int fun( int a,int b ); D) int i,fun(int x,int y);
答案:A
【解析】C语言中函数的说明形式为:类型说明符 函数名(