第4章-选择结构(共13页).docx
精选优质文档-倾情为你奉上第4章 选择结构1、以下选项中,当x为大于1的奇数时,值为0的表达式是A) x%2=0B) x/2C) x%2!=0D) x%2=1 参考答案:A【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0B选项的值为不定值,但绝对不是0C选项的值为真,即1D选项的值为真,即12、当变量c的值不为2、4、6时,值为"真"的表达式是A) (c>=2 && c<=6)&&(c%2!=1)B) (c=2)|(c=4)|(c=6)C) (c>=2 && c<=6)&& !(c%2)D) (c>=2 && c<=6) | (c!=3) | (c!=5) 参考答案:D【解析】逻辑或表达式中有一个值不为0,结果即为真,逻辑与表达式中只有两个运算对象均非零,结果才为真所以只有选项D满足要求3、以下叙述中正确的是A) 在C语言中,逻辑真值和假值分别对应1和0B) 关系运算符两边的运算对象可以是语言中任意合法的表达式C) 对于浮点变量x和y,表达式:x=y 是非法的,会出编译错误D) 分支结构是根据算术表达式的结果来判断流程走向的 参考答案:B【解析】A选项中,在C语言中,逻辑真值对应非0; C选项中,表达式:x=y 是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项正确。4、下列关系表达式中,结果为"假"的是A) 3 <= 4B) (3 < 4) = 1C) (3 + 4) > 6D) (3 != 4) > 2 参考答案:D【解析】B选项中,关系表达式(3<4)=1即1=1,结果为真; C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。D选项中,(3!=4)>2即1>2,结果为假。因此D选项正确。5、以下叙述中正确的是A) 对于逻辑表达式:a+ | b+,设a的值为1,则求解表达式的值后,b的值会发生改变B) 对于逻辑表达式:a+ && b+,设a的值为0,则求解表达式的值后,b的值会发生改变C) else不是一条独立的语句,它只是if语句的一部分D) 关系运算符的结果有三种:0,1,-1 参考答案:C【解析】B选项和A选项中,对于逻辑表达式,其中b的值不会因为表达式的结果发生改变;D选项中,关系运算符的结果有"真"和"假"两种。因此C选项正确。6、有以下程序 #include <stdio.h> main() int x=35, B; char z='B' ; B = ( x ) && ( z <'b' ); printf("%dn", B ); 程序运行后的输出结果是A) 1 B) 0 C) 35 D) 66 参考答案:A【解析】本题重点考察逻辑运算符和关系运算符的相关知识,已知变量x为整型变量,并赋值为35,变量z为字符型变量,并赋值为'B'。语句B=(x)&&(z<'b');中,(x)的值为1,'B'的asscii码小于'b'的asscii码,所以(z<'b')的值也为1,1&&1结果为1。因此A选项正确。7、若变量已正确定义,以下选项中非法的表达式是A) a!=4|'b'B) 'a'=1/2*(x=y=20,x*3)C) 'a' % 4D) 'A' + 32 参考答案:B【解析】A选项中'a'即表示a为字符常量,再给'a'赋值1/2*(x=y=20,x*3),是不正确的。因此B选项正确。8、与数学表达式xyz对应的C语言表达式是A) (x>=y)|(y>=x)B) (x>=y>=z)C) (x>=y)!(y>=z)D) (x>=y)&&(y>=z) 参考答案:D【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。因此D选项正确。9、以下叙述中正确的是A) 逻辑"或"(即运算符|)的运算级别比算术运算要高B) C语言的关系表达式:0<x<10完全等价于: (0<x) && (x<10)C) 逻辑"非"(即运算符!)的运算级别是最低的D) 由&&构成的逻辑表达式与由|构成的逻辑表达式都有"短路"现象 参考答案:D【解析】B选项中,(x>0)&&(x<10)的值是1或0,条件是x>0 并且x <10。但是 0<x<10这种写法的结果任何时候都是1; C选项中,逻辑"非"(即运算符!)的运算级别是最高的;A选项中,算术运算符优先级较高,关系和逻辑运算符优先级较低。因此D选项正确。10、表示关系式xyz的C语言表达式的是A) (x<=y)&&(y<=x)B) (x<=y)|(y<=x)C) (x<=y<=z)D) x<=y)!(y<=x) 参考答案:A【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。因此A选项正确。11、有以下程序 #include <stdio.h> void fun (char *c) while(*c) if( *c >= 'a' && *c <= 'z') *c =*c - ('a' - 'A'); c+; main() char s81; gets(s); fun(s); puts(s); 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是A) hello beijingB) Hello BeijingC) HELLO BEIJINGD) hELLO Beijing 参考答案:C【解析】主程序读取整个字符串存于s中,调用fun函数,字符指针c指向数组s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写。gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果*c为小写字符,则*c=*c-32(转大写)。因此C选项正确。12、若有以下程序 #include <stdio.h> main() int a=6, b=0, c=0; for ( ;a&&(b=0); ) b += a; a -= c+; printf("%d,%d,%dn", a,b,c); 则程序的输出结果是A) 5,6,0 B) 6,0,0 C) 6,6,1 D) 5,6,1 参考答案:C【解析】本题重点考察C语言中for语句和逻辑表达式,for语句的一般形式为: for(表达式1;表达式2;表达式3) 语句其循环中的"表达式1(循环变量赋初值)"、"表达式2(循环条件)"和"表达式3(循环变量增量)"都是选择项, 即可以缺省,但";"不能缺省。该题目中省略了"表达式1(循环变量赋初值)"和"表达式3(循环变量增量)"。for ( ;a&&(b=0); )b+=a;a-=c+;相当于while(a&&(b=0)) b+=a;a-=c+;。因此C选项正确。13、有以下程序 #include <stdio.h> main() double x=2.0, y; if( x<0.0 ) y=0.0; else if( (x<5.0) && (!x) ) y=1.0 / ( x+2.0 ); else if( x<10.0 ) y=1.0 / x; else y=10.0; printf(" %fn ", y ); 程序运行后的输出结果是A) 0. B) 0. C) 0. D) 1. 参考答案:C【解析】本题重点考察if语句,变量x和y均为double类型,由于变量x赋值为2.0,因此执行if(x<5.0)&&(!x),即条件为0,继续执行if( x<10.0 ),条件为1,即执行y=1.0 / x;。依据printf()函数输出类型中f是以小数形式输出单、双精度实数。因此C选项正确。14、若a是数值类型,则逻辑表达式 (a=1)|(a!=1)的值是A) 1B) 0C) 2D) 不知道a的值,不能确定 参考答案:A【解析】逻辑或"|"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即115、有以下程序#include <stdio.h>main() int a=1,b=2,c=3,d=0; if (a=1 && b+=2)if (b!=2|c-!=3)printf("%d,%d,%dn",a,b,c); else printf("%d,%d,%dn",a,b,c); else printf("%d,%d,%dn",a,b,c);程序运行后的输出结果是A) 1,3,2 B) 1,3,3 C) 1,2,3 D) 3,2,1 参考答案:B【解析】else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作而是进入第二个if语句条件判断,因为b!=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c- !=3)c的值不变,也不再执行第一个else语句打印a的值1,b的值3,c的值316、若有以下程序 #include <stdio.h> main() int a=1,b=2,c=3,d=4; if (a=2) | (b=1) c=2; if (c=3) && (d=-1) a=5; printf("%d,%d,%d,%dn", a,b,c,d); 则程序的输出结果是A) 1,2,3,4B) 2,1,2,-1C) 5,1,2,-1D) 2,2,2,4 参考答案:D【解析】第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c=3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作所以结果为选项D17、设有定义:int a=0,b=1;,以下表达式中,会产生"短路"现象,致使变量b的值不变的是A) a+ && b+B) a+ | +bC) +a && b+D) +a | +b 参考答案:A【解析】运算符"+"放在变量前面时,表示将变量+1,再参与其他操作,a+ && b+时,由于a值是0直接判定与运算结果为0,忽视b+的值,因此b值不发生改变,答案为A选项。18、以下表达式的值与x无关、其值恒为真的是A) 0 < x < 5 B) x>10 && x<5 C) x>10 && x<5 D) x<10 && x>5 参考答案:A【解析】逻辑与只有在"&&"符号两边操作均为真时,逻辑与为真,故排除B,D选项;逻辑或当且只当"|"符号两边操作至少有一个为真时,逻辑或结果为真,x>10 | x<5 为真与x值有关,故排除C选项;答案为A选项。19、以下选项中错误的是A) a&=b 与 a=a&b 等价B) a=b 与 a=ab 等价 C) a|=b 与 a=a|b 等价 D) a!=b 与 a=a!b 等价 参考答案:D【解析】D选项中,a!=b表示a不等于b时,运算结果为1,或者为0;而a=a!b是一种语法错误,!是非运算,且是单目运算符,只要求有一个操作数,故两者不等价,答案为D选项。20、若有定义:int a=0,b=0,c=0,d=0;,以下关于C语言表达式:(+a | +b) ? +c : +d 执行顺序的叙述正确的是A) 先执行+a,表达式+a的值为1;再执行+b,表达式+b的值为1,由此可确定(+a | +b)值为1,因此执行+cB) 先执行+a,表达式+a的值为1,由此可确定(+a | +b)值为1,因此执行+cC) 先执行+b,表达式+b的值为1;再执行+a,表达式+a的值为1,由此可确定(+a | +b)值为1,因此执行+cD) 先执行+b,表达式+b的值为1,由此可确定(+a | +b)值为1,因此执行+c 参考答案:B【解析】表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3,+a表示先将变量a+1,再执行其他操作,逻辑或运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(+a | +b)中,左操作数+a的值为1,已经可以确定整个逻辑表达式的结果为1,因此右操作数+b不再求解,直接执行表达式2,即+c,答案为B选项。21、若有定义:int a=0,b=0,c=0,d=0; ,有C语言表达式 (a+ && b+) ? c+ : d+,以下关于其执行顺序的叙述正确是A) 先执行a+,表达式a+的值为0,由此即可确定(a+&&b+)的值为0,因此执行d+B) 先执行a+,表达式a+的值为0;再执行b+,表达式b+的值为0,由此可确定(a+ && b+)值为0,因此执行d+C) 先执行a+,表确定(a+ && b+)值为1,因此执行c+达式a+的值为1;再执行b+,表达式b+的值为1,由此可D) 先执行b+,表达式b+的值为1;再执行a+,表达式a+的值为1,由此可确定(a+ && b+)值为1,因此执行c+ 参考答案:A【解析】表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a+&&b+)中,左操作数a+的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b+不再求解,直接执行表达式3,即d+,答案为A选项22、下关于逻辑运算符两侧运算对象的叙述中正确的是()。A) 可以是任意合法的表达式B) 只能是整数0或非0整数C) 可以是结构体类型的数据D) 只能是整数0或1 参考答案:A【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。23、设有宏定义: #define IsDIV(k,n) ( ( k%n=1) ? 1 : 0)且变量m已正确定义并赋值,则宏调用: IsDIV(m,5) && IsDIV(m,7)为真时所要表达的是A) 判断m是否能被5和7整除B) 判断m被5和7整除是否都余1C) 判断m被5或者7整除是否余1D) 判断m是否能被5或者7整除 参考答案:B【解析】本题考查逻辑运算符的相关概念,逻辑与若要为真,那么两边都要为真,所需要m都能被5和7整除都余1,所以选项B正确。24、有以下程序#include <stdio.h>main() int c,d; c= 13&5; d=10&&5; printf("%d,%dn", c, d); 程序的运行结果是A) 5,1 B) 1,1 C) 18,1 D) 13,1 参考答案:A【解析】"&"按位与运算,13=1101B,5=101B,执行语句c=13&5;结果为101B=5,即c=5。"&&"逻辑与运算,10与5均为真,结果为真,即d=1。A选项正确。25、有以下程序#include <stdio.h>main() char c='A' int x=36, b; b= (x>>2) && ( c<'a' ); printf("%dn", b );程序运行后的输出结果是A) 1 B) 0 C) 2 D) 4 参考答案:A【解析】">>"右移运算符,x=36,执行x>>2后,x=9;"&&"逻辑与运算,先计算左边表达式真假,若为假,不计算右表达式,整个逻辑表达式为假,若左表达式为真,再计算右表达式,之后做逻辑与运算;x>>2为真,A的ASCII码为65,a的ASCII码为97,c<'a'为真,整个逻辑表达式(x>>2) && ( c<'a' )为真,得b=1。A选项正确。26、若变量已正确定义,则以下for循环 for ( x=0,y=0; ( y!=123 ) && ( x<4 ); x+ );A) 执行4次 B) 执行3次C) 执行次数不确定 D) 执行123次 参考答案:A【解析】for循环语句格式:for(exp1;exp2;exp3)。exp1通常用来给循环变量赋初值; exp2通常是循环条件,以便决定是否继续执行循环体;exp3通常可用来修改循环变量的值。程序执行过程为:赋初值x=0,y=0;逻辑表达式y!=123为真,x<4为真,则整个表达式( y!=123 ) && ( x<4 )为真,循环条件成立;x=1;再次判断表达式为真;x=2;直到x=4时,y!=123为真,x<4为假,则整个表达式( y!=123 ) && ( x<4 )为假,循环条件不成立,退出循环。for循环执行4次,A选项正确。27、以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO。在下划线处应填入的选项是#include <stdio.h>main() int k; printf("Enter a int number : "); scanf("%d", &k ); if _ printf("YESn"); else printf("NOn"); printf("%dn",k%3);A) ( (k%3=0) | (k%7=0) )B) (k/3=0) | (k/7=0)C) ( (k%3=0) | (k%7=0) )D) ( (k%3=0)&& (k%7=0) ) 参考答案:A【解析】求余运算符为%,是否能被3或7整除表达式为 (k%3=0)|(k%7=0),A选项正确。B选项"/"为除号,错误。C选项中"="为赋值运算符,不是逻辑运算符"=",错误。D选项"&&"为逻辑与,本题应该为逻辑或"|",错误。28、有以下函数int fun( char *s, char *t ) while( *s )&&( *t ) && (*t+ = *s+ ) ); return (*s-*t);函数的功能是A) 求字符串的长度B) 比较两个字符串的大小C) 将字符串s复制到字符串t中D) 连接字符串s和字符串t 参考答案:B【解析】函数体执行过程为:将两个字符串首地址传入函数,分别赋给指针s与t,在函数体内s与t所指向的字符串的字符不为"0"时,判断两个指针指向的字符是否相同,若相同则两个指针分别加一指向下一个字符,若不同则退出while循环,返回不相同的字符的ASCII码值之差。返回值大于0表示字符串s>t;返回值小于0表示s<t;返回值为0,表示s=t。函数实现了比较两个字符串大小的功能,B选项正确。29、有以下程序 #include <stdio.h> main() char a44=' ' int i,j; for(i=0;i<4; i+) ai0=ai3='#' for(j=1; j<3; j+) a0j=a3j='#' if(i!=0)&&(i!=3) aij='o' for(i=1;i<3; i+) for(j=0; j<4;j+) printf("%2c",aij); printf("n"); 程序的运行结果是A) # o o # o o #B) # # # # o o #C) # o o # # # #D) # # # # # # # 参考答案:A【解析】程序的执行过程为:定义4行4列二维数组字符a并且初始化为a00='',其他元素均为0。执行for循环将数组第一列和第四列赋值为'#'。执行for循环将数组第一行和第四行的第二个到第三个元素赋值为'#',然后将剩余元素全部赋值为'o'。此时矩阵为#,#,#,#,#,o,o,#,#,o,o,#,#,#,#,#。之后输出矩阵第二行与第三行元素为: # o o #<回车> # o o #,A选项正确。30、若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(xy)?(x) : (y)中的条件表达式(xy) 等价的是()。A) (xy<0|xy>0)B) (xy<0)C) (xy>0)D) (xy0) 参考答案:A【解析】条件表达式:x表达式1?表达式2:表达式3 的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(xy)等价的是(xy<0|xy>0)。31、若变量已正确定义 for( x=0,y=0; ( y!=99 && x<4 ); x+ )则以上for循环A) 执行3次B) 执行4次C) 执行无限次D) 执行次数不定 参考答案:B【解析】本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<4);x+),y!=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。32、有以下程序#include <stdio.h>main() int a=0,b=0,c=0,d=0; (+a | +b) ? +c : +d; printf("%d,%d,%d,%dn", a,b,c,d);程序的运行结果是A) 1,0,1,0 B) 1,1,0,1 C) 1,0,0,1 D) 1,1,1,0 参考答案:A【解析】条件表达式一般形式:exp1?exp2:exp3,执行规则为:若exp1为真,求解exp2,输出exp2的值,不计算exp3的值;若为假,求解exp3,输出exp3的值,不计算exp2的值。本题程序执行过程为:求解逻辑表达式(+a | +b),先求解+a,a=1,则整个表达式为真,不计算+b,然后求解+c,不计算+d,最后得到a=1,b=0,c=1,d=0,A选项正确。33、有以下程序#include <stdio.h>main() int a, b, c=241; a = c/100 % 9; b = ( -1 )&&( -1 ); printf("%d, %dn", a, b );程序运行后的输出结果是A) 2,1 B) 6,1 C) 6,0 D) 2,0 参考答案:A【解析】程序执行过程为:c=241,c/100=2,2%9=2,得a=2;"="优先级低于"&&",非0值为真,0值为假,即(-1)为真,逻辑与表达式(-1)&&(-1)为真,得b=1。A选项正确。34、设有定义:int a=64,b=8;,则表达式(a&b)|(a&&b)和(a|b)&&(a|b)的值分别为A) 1和1 B) 1和0 C) 0和1 D) 0和0 参考答案:A【解析】常用的位运算符有:""按位求反,"<<"左移,">>"右移,"&"按位与,""按位异或,"|"按位或。逻辑或运算符"|",计算左表达式值,如果为真,则不计算右表达式,而整个表达式为真,若左表达式为假,再计算右表达式然后做或运算。逻辑与运算符"&&",计算左表达式值,如果为假则不计算右表达式,而整个表达式为假,若左表达式为真,再计算右表达式然后做与运算。a=64=B,b=8=1000B,a&b=0为假,a&&b为真,(a&b)|(a&&b)为真,值为1。a|b=B为真, a|b为真,则(a|b)&&(a|b)为真,值为1。A选项正确。35、设有定义:int a=0,b=1,c=1; 以下选项中,表达式值与其它三个不同的是A) b=a=c B) a=b=c C) a=c=b D) c=a!=c 参考答案:A【解析】赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0。A选项逻辑表达式a=c不成立(0),则b=0,表达式值为0。B选项中将c赋值给b,b=1,再将b赋给a,a=1,表达式值为1。C选项逻辑表达式c=b成立(1),则a=1,表达式值为1。D选项逻辑表达式a!=c成立(1),则c=1,表达式值为1。A选项与其他选项不同,A选项正确。36、有如下程序#include <stdio.h>main() int a = 0, b = 1; if (+a = b+) printf("T"); else printf("F"); printf("a=%d,b=%dn", a, b); printf("n");程序运行后的输出结果是A) Ta=0,b=1 B) Fa=1,b=2 C) Ta=1,b=2 D) Fa=0,b=2 参考答案:C【解析】程序执行过程为:判断+a = b+是否成立,+a前置运算先加1,则a=1,b+后置运算先取值,则b=1,也即是判断1=1,成立,输出T,之后b=2,输出a=1,b=2。C选项正确。37、有以下程序 #include <stdio.h> main() int a = -2, b = 0; while (a+ && +b) ; printf("%d,%dn", a, b ); 程序运行后输出结果是A) 0,2 B) 0,3 C) 1,3 D) 1,2 参考答案:D【解析】本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。a+即a参与运算后,a的值再自增1。+b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。38、有以下程序#include <stdio.h>main() int a=0,b=0,c=0,d=0; (a+ && b+) ? c+ : d+; printf("%d,%d,%d,%dn", a,b,c,d);程序的运行结果是A) 1,0,0,1 B) 1,1,0,1 C) 1,0,1,0 D) 1,1,1,0 参考答案:A【解析】自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)。条件运算符"?",执行规则为: 若exp1为真,求解exp2,输出exp2的值,不计算exp3的值;若为假,求解exp3,输出exp3的值,不计算exp2的值。"&&"逻辑与表达式:exp1&&exp2。规则为,对exp1求值,若为0,则表达式为0,且不计算exp2;若exp1非0,则求exp2值,作为表达式值。题目中a+先取值为0,则(a+ && b+)为0,且不计算b+与c+,而计算d+,并把这个值作为整个表达式的值输出,然后a与d自加1,最后得到a=1,b=0,c=0,d=1。A选项正确。39、有如下程序#include <stdio.h>main() int a = 0, b = 1; if (a+ && b+) printf("T"); else printf("F"); printf("a=%d,b=%dn", a, b);程序运行后的输出结果是A) Ta=1,b=2 B) Fa=0,b=2 C) Fa=1,b=1 D) Ta=0,b=1 参考答案:C【解析】题目中判断if条件是否成立,a+先取值为0,则(a+ && b+)为0,且不计算b+,而后a自增得a=1,if条件不成立执行else函数体,输出F。最后执行语句printf("a=%d,b=%dn", a, b);按照格式输出a=1,b=1。C选项正确。40、if语句的基本形式是:if (表达式) 语句,以下关于"表达式"值的叙述中正确的是A) 必须是逻辑值B) 必须是整数值C) 必须是正数D) 可以是任意合法的数值 参考答案:D【解析】if语句中的表达式可以是任意合法的数值,如常量,变量表达式所以D选项正确41、有以下计算公式y=x (x0)-x (x<0)若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是A) if(x>=0) y=sqrt(x);if(x<0) y=sqrt(-x);B) if(x>=0) y=sqrt(x);else y=sqrt(-x);C) y=sqrt(x);if(x<0) y=sqrt(-x);D) y=sqrt(x>=0?x :-x); 参考答案:C【解析】公式的要求是无论x大于0还是小于0,y的值都为x绝对值的开方选项C中如果x值小于0,则y=sqrt(x)就要出错42、下列条件语句中,输出结果与其他语句不同的是A) if ( a!=0 ) printf("%dn", x); else printf("%dn", y);B) if ( a=0 ) printf("%dn", y); else printf("%dn", x);C) if ( a=0 ) printf("%dn", x); else printf("%dn", y);D) if ( a ) printf("%dn", x); else printf("%dn", y); 参考答案:C【解析】A,B,D选项的含义均为:a的值如果为0时打印y的值,否则打印x的值但是C选项的含义是:a的值为0时打印x的值,不为0时打印y的值,与其他选项正好相反43、若有以下程序 #include <stdio.h> main() int a=1,b=2,c=3,d=4, r=0; if (a!=1) ; else r=1; if (b=2) r+=2; else; if (c!=3) r+=3; else; if (d=4) r+=4; printf("%dn", r); 则程序的输出结果是A) 10 B) 7 C) 6 D) 3 参考答案:B【解析】else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行else r=1;语句再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句""再