c语言第五章-选择结构程序设计(习题册答案)(共7页).doc
精选优质文档-倾情为你奉上第五章 选择结构程序设计 基础练习(A)一、填空题 1、关系表达式的运算结果是 逻辑 值。C语言没有逻辑型数据,以 1 代表“真”,以 0代表“假”。2、逻辑运算符!是 单目 运算符,其结合性是由 右结合性 。3、C语言提供的三种逻辑运算符是 && 、 | 、 ! 。其中优先级最高的为 ! ,优先级最低的为 | | 。4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以 0 和 非0 来判定它们属于“真”或“假”。5、设y为int型变量,请写出描述“y是偶数”的表达式 (y%2=0) 。6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式x<z|y<z 。7、条件“2<x<3或x<-10”的C语言表达式是 x<-10|x>2&&x<3 。8、判断char型变量ch是否为大写字母的正确表达式是 (ch>=A)&&(ch<=Z) 。 9、当a=3,b=2,c=1时,表达式f=a>b>c的值是 0 。10、当a=5,b=4,c=2时,表达式a>b!=c的值是 1 。11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A|A<B&&!C>B的值是 0 。12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是 1 。13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)=(x|z)的值为 1 。14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为 1 。!(x>y)+(y!=z)|(x+y)&&(y-z)15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为 0 。!(x=a)&&(y=b)&&016、if (!k) a=3;语句中的!k可以改写为 k= =0 ,使其功能不变。二、选择题1、逻辑运算符两侧运算对象的数据类型(D)。A)只能是0或1B)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据2、以下关于运算符优先顺序的描述中正确的是(C)。A)关系运算符<算术运算符<赋值运算符<逻辑与运算符B)逻辑与运算符<关系运算符<算术运算符<赋值运算符C)赋值运算符<逻辑与运算符<关系运算符<算术运算符D)算术运算符<关系运算符<赋值运算符<逻辑与运算符3、下列运算符中优先级最高的是(B)。A)<B)+C)&&D)!=4、为判断字符变量c的值不是数字也不是字母时,应采用下述表达式(D )。A)c<=48|c>=57&&c<=65|c>=90&&c<=97|c>=122B)!(c<=48|c>=57&&c<=65|c>=90&&c<=97|c>=122)C)c>=48&&c<=57|c>=65&&c<=90|c>=97&&c<=122D)!(c>=48&&c<=57|c>=65&&c<=90|c>=97&&c<=122)5、能正确表示“当x的取值在1,100和200,300范围内为真,否则为假”的表达式是(C )。A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300)B) (x>=1)|(x<=100)|(x>=200)|(x<=300)C) (x>=1)&&(x<=100)|(x>=200)&&(x<=300)D) (x>=1)|(x<=100)&&(x>=200)|(x<=300)6、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( D )。A)x&&yB) x<=yC) x|y+z&&y-zD) !(x<y)&&!z|1)7、已知x=43,ch=A,y=0;则表达式(x>=y&&ch<B&&!y)的值是( C )。A)0B)语法错C)1D)“假”8、设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为( B )。A)1B)2C)3D)49、以下不正确的if语句形式是(C)。A) if(x>y&&x!=y);B) if(x=y) x+=y;C) if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y);D) if(x<y) x+; y+;10、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( B )。if(x>y)z=x; x=y; y=z;A)x=10,y=20,z=30B)x=20,y=30,z=30C)x=20,y=30,z=10D)x=20,y=30,z=2011、以下if语句语法正确的是(B)。A) if(x>0)printf(“%f”,x)else printf(“%f”,-x);B) B) if(x>0)x=x+y; printf(“%f”,x);else printf(“%f”,-x);C) C) if(x>0)x=x+y; printf(“%f”,x);else printf(“%f”,-x);D) D) if(x>0)x=x+y; printf(“%f”,x)else printf(“%f”,-x);12、请阅读以下程序:main()int a=5,b=5,c=0;if(a=b+c)printf(“*n”);elseprintf(“$n”);以下程序(C)。A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出*D)输出$三、写出下列程序的运行结果 1、若运行时输入:2<回车>,则以下程序的运行结果是 2nd class postage is 14p 。#include <stdio.h>void main(void)char Class;printf(“Enter 1 for 1st class post or 2 for 2nd post”);scanf(“%c”,&Class);if(Class=1)printf(“1st class postage is 19p”);elseprintf(“2nd class postage is 14p”);2、若运行时输入:4.4<回车>,则以下程序的运行结果是Selling Price(0.30)$5.72 。#include <stdio.h>void main(void)float CostPrice,SellingPrice;printf(“Enter Cost Price $:”);scanf(“%f”,&CostPrice);if(CostPrice>=5)SellingPrice=CostPrice+CostPrice*0.25;printf(“Selling Price(0.25)$%6.2f”,SellingPrice);elseSellingPrice=CostPrice+CostPrice*0.30;printf(“Selling Price(0.30)$%6.2f”,SellingPrice);3、以下程序的运行结果是F。main()if(2*2=5<2*2=4)print(“T”);elseprintf(“F”);能力提高(B)一、选择题1、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是(D)。A)A%2=1B)!(A%2=0)C)!(A%2)D)A%22、下列运算符中优先级最低的( A ),优先级最高的是( C )。A)?:B)&&C)+D)!=3、请阅读以下程序:main()int a=5,b=0,c=0;if(a=b+c)printf(“*n”);elseprintf(“$n”);以下程序(D)。A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出*D)输出$4、以下程序的运行结果是(C)。main()int m=5;if(m+>5)printf(“%dn”,m);elseprintf(“%dn”,m-);A)4B)5C)6D)7二、根据程序的功能,将以下程序补充完整1、以下程序对输入的四个整数,按从小到大的顺序输出。请在内填入正确内容。main()int t,a,b,c,d;printf(“input a,b,c,d:”)scanf(“%d,%d,%d,%d”, &a,&b,&c,&d );if(a>b) t=a;a=b;b=t; if (a>c) t=a;a=c;c=t;if (a>d) t=a;a=d;d=t;if ( b>c) t=b;b=c;c=t; if (b>d) t=b;b=d;d=t;if (c>d) t=c;c=d;d=t;printf(“%d,%d,%d,%d”,a,b,c,d);三、编程:1、试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。 2、编制程序要求输入整数x、y和z,若x2+y2+z2大于1000,则输出x2+y2+z2千位以上的数字,否则输出三数之和。3、编写程序,输入三角型的三条边长,求其面积。注意:对于不合理的边长输入要输出数据错误的提示信息。1、参考答案main() int x;if (x%5=0 && x%7=0) printf(“yes”);else printf(“no”);2、参考答案main() int x,y,z,a,b;scanf(“%d %d %d”,&x,&y,&z);a=x*x+y*y*z*z;if (a>1000)b=a/1000;printf(“%d”,b);else printf(“%d”,x+y+z);3、参考答案#include <math.h>main() float a,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);if (a+b>c && b+c>a && a+c>b) s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%7.2fn”,area);elseprintf(“bu neng zhucheng san jiao xing n”);第2讲基础练习(A)一、填空题1、在if语句中又包含一个或多个if语句称为 if语句的嵌套 。2、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与其之前最近的未配对的if 配对。如果if 与else数目不一样,为实现设计者的企图,可以加 花括号 关系。3、条件运算符是C语言中唯一的一个 三 目运算符,其结合性为 从右至左 。4、假设条件表达式的格式为:表达式1?表达式2:表达式若表达式2和表达式3的类型不同,此时条件表达式的值的类型为二者中较 高 的类型5、在switch语句中,switch后面括弧内的“表达式”,可以为 任何 类型。6、若a=1,b=2,则表达式a>b?a:b+1的值是 3 。7、若w1、x2、y3、z4,则条件表达式w<x?w:y<z?y:z的值是 1 。8、若有以下if 语句:if (a<b) min=a;else min=b;可用条件运算符来处理的等价式子为 min=(a<b)?a:b ; 。9、若x=1,y=2,z=3,则表达式(x<y?x:y)=z+的值是 0 。10、设有变量定义:int a=5,c=4;则(-a=+c)?-a:c+的值是 5 ,此时c的存储单元的值为 6 。二、判断题1、在switch语句中,每一个的case常量表达式的值可以相同。( 错 )2、在switch语句中,各个case和default的出现次序影响执行结果。( 对)3、在switch语句中,多个case可以共用一组执行语句。(对 )4、 条件表达式能取代一般if的语句。( 错 )5、 case后的常量表达式类型一定与表达式类型匹配。( 对 )三、写出以下程序的运行结果1、 main() -1int a=2,b=3,c;c=a;if(a>b) c=1;else if(a=b) c=0;else c=-1;printf(“%dn”,c);2、 main() 2 0 0int a,b,c;int s,w,t;s=w=t=0;a=-1; b=3; c=3;if(c>0) s=a+b;if(a<=0)if(b>0)if(c<=0) w=a-b;else if(c>0) w=a-b;else t=c;printf(“%d %d %d”,s,w,t);3、 switch(grade) case A: printf(“85100n”);case B: printf(“7084n”);case C: printf(“6069n”);case D: printf(“<60n”);default: printf(“error!n”);若grade的值为 C,则输出结果是 60-6960error!能力提高(B)一、写出下列程序的运行结果1、 #include <stdio.h> 55 1void main(void)int x,y=1,z;if(y!=0) x=5;printf(“t%dn”,x);if(y=0) x=4;else x=5;printf(“t%dn”,x);x=1;if(y<0)if(y>0) x=4;else x=5;printf(“t%dn”,x);2、 #include <stdio.h> 4 -2 4 0 4 -2void main(void)int x,y=-2,z;if(z=y)<0) x=4;else if(y=0) x=5;else x=6;printf(”t%dt%dn”,x,z);if(z=(y=0)x=5;x=4;printf(“t%dt%dn”,x,z);if(x=z=y) x=4;printf(“t%dt%dn”,x,z);3、 #include <stdio.h> a=2,b=1main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0: a+; break;case 1: b+; break;case 2:a+; b+; break;printf(“a=%d,b=%d”,a,b);二、根据程序的功能,将以下程序补充完整以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请在内填入正确内容。main()int yy,mm,len;printf(“year,month=”);scanf(“%d %d”,&yy,&mm);switch(mm)case 1:case 3:case 5:case 7:case 8:case 10:case 12: len=31; break;case 4:case 6:case 9:case 11: len=30; break;case 2:if(yy%4=0&&yy%100!=0|yy%400=0) len=29 ;else len=28;break;default: printf(“input error”); break;printf(“the length of %d %d is %dn”,yy,mm,len); 专心-专注-专业