已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四、 选择结构程序设计本章概述:本章主要考查选择结构设计方法,其中包括关系运算符、逻辑运算符、条件运算符以及最常见的if条件判断语句。选择结构程序属于3种基本的程序设计方法之一。通过对历年试卷内容的分析,本章考核内容约占6%,属于一般考查内容。年份20074200792008420089分值7267大纲要求:1用if语句实现选择结构。2用switch语句实现多分支选择结构。3选择结构的嵌套。重点难点:1 逻辑运算符的短路原理2 if语句的嵌套3 switch语句的使用考点1考点分析: 关系运算符及其优先次序关系运算是逻辑运算中比较简单的一种,“关系运算”就是“比较运算”。将两个值进行比较,判断是否符合或满足给定的条件。如果符合或满足给定的条件,则称关系运算的结果为“真”;如果不符合或不满足给定的条件,则称关系运算的结果为“假”。C语言提供6种关系运算符:【特别提醒】:关系运算符是双目运算符,由两个字符组成的关系运算符之间不能有空格。关于优先次序和结合性:(1) 前4种关系运算符的优先级别相同,后两种也相同。前4种高于后两种。(2) 关系运算符的优先级低于算术运算符,高于赋值运算符。(3) 结合性是自左向右。l 试题解析1已有定义:char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是( ) 2007年9月第23题Aisupper(c) BA=c=ZCA=c&c=Z Dc=(2-32)&(a-32)=c解析:答案A是利用库函数,C和D分别用关系运算符来判断是否是大小写,B不能判断,应为A=A&kk=Akk=a&(kk+32)=z Disalpha(kk)&(kk=A就不会判断后面的kk=2&c=2&c=2&c=6)&(c%2!=1)解析:逻辑与&所有的表达式都为真,才为真。,逻辑或|只要有一个为真值即为真。答案为B。考点4逻辑表达式用逻辑运算符(逻辑与、逻辑或、逻辑非)将关系表达式或逻辑量连接起来构成逻辑表达式。逻辑表达式的值是一个逻辑值“真”或“假”。逻辑运算结果,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”(即认为一个非0的数值是“真”)。【特别提醒】:在数学中关系式是可以使用的,但是在C语言中不可以用,必须用& 。由&和|组成的逻辑表达式,在某种情况下可以发生“短路现象”:(1),只有当x为真时,才需要判别y的值,只有x和y都为真时,才要判别z的值;只要x为假,y和z不必判别,整个表达式的值就为0。(2),只要x的值为真,就不必判别y和z的值,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假,才需要判别z的值。l 试题解析1已有定义:char c= ;int a=1,b;(此处c的初值为空格字符),执行b=!c&a;后b的值为 。2008年4月填空第6题解析:空格的ASCII码值为32,!c为假,故整个表达式的值为0.答案为0。2执行以下程序段后,w的值为( )2008年9月第18题 int w=A,x=14,y=15; w=(x|y)&(wa); A-1 BNULL C1 D0解析:(x|y)的值为真,Ay)printf(“%d”,x);2、 if(表达式)语句1 else 语句2。 例如:if(xy)printf(“%d”,x);else printf(“%d”,y);3、 if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式m)语句m else 语句m+1(实际是else子句中嵌套if语句)。【特别提醒】:(1) 三种形式的if语句中的“表达式”一般为关系表达式或逻辑表达式,但不限于这两种表达式。C语言中需要逻辑值的地方,只有0代表“假”,非0(其它)均代表“真”。(2) else子句不能单独使用,必须是if语句的一部分,与if配对使用。(3) 在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句构成的语句块(复合语句)。语句块用括起来,语句块后面不要“;”号。l 试题解析1设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是( )2007年4月第20题Aif(x+); Bif(xy&y!=0); Cif(xy) x- - Dif(yb) a=b; c=a; if(c!=a) c=b; printf(%d,%d,%dn,a,b,c); 其输出结果是( )。2008年4月第19题A程序段有语法错 B3,5,3 C3,5,5 D3,5,7解析:在if和else后面可以只含一个内嵌的操作语句,如果有多个操作语句,则必须用用括起来构成复合语句。题目中没有用,所以只有a=b;是ab真是执行的;c=a; ab是真还是假都要执行。答案为B。3有以下程序段int a,b,c;a=10;b=50;c=30;if(ab)a=b;b=c;c=a;printf(“a=%d b=%d c=%dn”,a,b,c);程序输出结果是( ) 2008年9月第20题Aa=10 b=50 c=10 Ba=10 b=50 c=30Ca=10 b=30 c=10 Da=50 b=30 c=50解析:同上。答案选C。考点6 if语句的嵌套if语句的嵌套:if语句的if块或else块中,由包含一个if语句。一般形式: if() if()语句1; else 语句2; else if()语句3; else 语句4;【特别提醒】:应当注意if与else的配对关系。else总是与它上面的最近的未配对的if配对。特别是if/else子句数目不一样时(if子句数量只会大于或等于else子句数量)。可以用下面两种方法解决匹配问题:(1)利用“空语句”,使if子句数量与else子句数量相同。(2)利用确定配对关系。将没有else子句的if语句用括起来。l 试题解析1有以下程序 #include main() int x=1,y=2,z=3;if(xy)if(yb)max=a;else max=b;可以使用条件运算符来处理:max=ab?a:b;(注:ab关系运算有没有()都一样)。它这样执行,ab为“真”吗?如果为“真”,条件表达式为a,否则为b。条件表达式的一般形式:表达式1?表达式2:表达式3【特别提醒】:(1) 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,表达式2的值就是整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,此时表达式3的值就是整个条件表达式的值。(2) 条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。(3) 条件运算符的结合性“自右向左”。(4) 表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式,函数表达式。(5) 表达式1,表达式2,表达式3的类型都可以不同。条件表达式值的类型是表达式2,表达式3中类型较高的类型。l 试题解析1有以下计算公式 若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是( )。2007年9月第20题 Aif(x=0) y=sqrt(x); By=sqrt(x)else y=sqrt(-x); if(x=0)y=sqrt(x); Dy=sqrt(x=0?x:-x);if(x0)y=sqrt(-x);解析:A和C比较简单是正确的,D使用的条件表达式也是正确的,B当x0&n0)case 1:switch(b0为真,值取1,b0值为0,由于case 1后没有break,转而执行下面的语句,c=5为1,首先输出#,case 0后面没有break,转而执行default输出&。结果为#&。3有以下程序 #include main() 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; case 3: a+; b+; printf(“a=%d,b=%dn”,a,b); 程序的运行结果是( )2008年4月第20题Aa=1,b=0 Ba=2,b=2 Ca=1,b=1 Da=2,b=1 解析:如果case语句后面没有break是执行下一个语句,如果有break就跳出switch语句。答案为D。相关习题一、选择题1当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是 Ak%2Bk%2=1C(k%2)!=0D!k%2=12设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是 Ak=k=kB-k+Ck%int(f)Dk=f=m3设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是 A(!a=1)&(!b=0)B(ab)& !c|1 Ca & bDa|(b+b)&(c-a)有以下程序main() int a,b,d=25; a=d/10%9; b=a&(-1); printf(%d,%dn,a,b);程序运行后的输出结果是 A6,1B2,1C6,0D2,0有以下程序main() int i=1,j=2,k=3; if(i+=1&(+j=3|k+=3) printf(%d %d %dn,i,j,k);程序运行后的输出结果是 A1 2 3B2 3 4C2 2 3D2 3 3若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|10的是A abs(x-y)-10& x-y10C (x-y)10 D (x-y)*(x-y)b) if(bc) printf(%d,d+ +1); else printf(%d,+d +1); printf(%dn,d);程序运行后的输出结果是A2 B 3 C43 D 44 下列条件语句中,功能与其他语句不同的是Aif(a) printf(%dn,x); else printf(%dn,y);B if(a=0) printf(%dn,y); else printf(%dn,x);Cif (a!=0) printf(%dn,x); else printf(%dn,y);D if(a=0) printf(%dn,x); else printf(%dn,y); 以下4个选项中,不能看作一条语句的是A ; B a=0,b=0,c=0; C if(a0); D if(b=0) m=1;n=2;以下程序段中与语句k=ab?(bc?1:0):0;功能等价的是Aif(aB) &(bC) ) k=1; B if(aB) |(bC) ) k=1else k=0;C if(aB) k=1; else if(bC) k=1; else k=0; 有以下程序main()int a=1,b=2,m=0,n=0,k;k=(n=ba)|(m=ab);printf(%d,%dn,k,m);程序运行后的输出结果是A0,0 B 0,1 C1,0 D1,1有定义语句:int a=1,b=2,c=3,x; 则以下选项中各程序段执行后,x的值不为3的是A if (ca) x=1; B if (a3) x=3;else if (ba) x=2; else if (a2) x=2;else x=3; else x=1;Cif (a3) x=3; Dif (ab) x=b;if (a2) x=2; if (bc) x=c;if (a1) x=1; if (cbc)printf(%dn,d);else if(c-1=d)=1)printf(%dn,d+1);elseprintf(%dn,d+2)执行后输出结果是A2B3C4D编译时有错,无结果已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 & y+z/2的值是A B C D 有一函数, ,以下程序段中不能根据值正确计算出值的是Aif(x0) y=1; By=0;else if(x=0) y=0;if(x0) y=1;else y=-1;else if(x=0)if(x=0);if(x0) y=1;if(x0) y=1;else y=0;else y=-1; else y=-1; 有以下程序main() int a=15,b=21,m=0;switch(a%3) case 0:m+;break;case 1:m+;switch(b%2) default:m+;case 0:m+;break;printf(“%dn”,m);程序运行后的输出结果是A 1B2C 3D 4以下程序的输出结果是main() int a=5,b=4,c=6,d;printf(%dn,d=ab?(ac?a:c):(b);A5B4 C6 D不确定 以下程序的输出结果是main() int a=4,b=5,c=0,d;d=!a&!b|!c;printf(%dn,d); A 1 B 0 C非0的数 D-1设 a、b、C、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=ab)&(n=cd)运算后,n的值位为A0 B1C2D 3阅读以下程序:main() int x;scanf(“%d”,&x);if(x-5) printf(“%d”x);else printf(“%d”x+);程序运行后,如果从键盘上输人5,则输出结果是A3B 4 C 5D 6假定w、x、y、z、m均为int型变量,有如下程序段:w=1; x=2; y=3; z=4;m=(wx)?w; x; m=(my)?m;y; m=(mz)?m; z;则该程序运行后,m的值是A4B 3C 2D 2设x、y、t均为int型变量,则执行语句:x=y=3;t=+x|+y;后,y的值为A不定值B4C 3 D1若执行以下程序时从键盘上输入9,则输出结果是A11 B 10C9 D 8Main0 int n; scanf(“%d”,&n); if(n+=10 or a=0|a=10 &a=10a=0 有如下程序main0 int x=1,a=0,b=0;switch(x)case 0: b+;case 1: a+case 2: a+;b+printf(“a=%d,b=%dn”,a,b);该程序的输出结果是A a=2,b=1 B a=1,b=1 Ca=1,b=0 Da=2,b=2有如下程序 main0 float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else y=1.0;printf(“%fn”,y);该程序的输出结果是A0.000000 B 0.250000 C 0.500000 D 1.000000 有如下程序main0 int a=2,b=-1,c=2;if(ab)if(b0?1:x0) y=1; B if(x) else if(x0)y=1; else y=0; else if(x=0) if(x0)y=1; f(x0)y=1; else if(x=0)y=0; else y=-1; else y=-1;语句:printf(%d,(a=2)&(b= -2);的输出结果是 A 无输出 B 结果不确定 C-1 D1当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是 A c=b=a; B(a=c) (b=c) ; C (a=c) &(b=c); C a=c=b;能正确表示a和b同时为正或同时为负的逻辑表达式是A (a=0b=0)&(a0b=0&b=0)&(a0&b0)&(a+b0 以下程序的输出结果是 A -1 1 B 0 1 C 1 0 D 0 0 main( ) int a= -1,b=1,k; if(+a0)& ! (b- 5) printf(%dn,m); esle printf(%dn,m- -); 当a=1,b=3,c=5,d=5时,执行下面一段程序后,x的值为A1 B 2 C 3 D 6 if(ab) if(cd) x=1; else if(ac) if(bd) x=2; else x=3; else x=6; else x=7;表示关系x=y=z的c语言表达式为A(X=Y)&(Y=Z) B (X=Y)AND(Y=Z)C (X=Y=Z) D(X=Y)&(Y=Z)有以下程序 #include main() int a,b,c=246; a=c/100%9; b=(-1)&(-1); printf(%d,%dn,a,b); 输出结果是A2,1 B3,2 C4,3 D 2,-1 若有以下定义: float x;int a,b;则正确的switch 语句是Aswitch(x) Bswitch(x) case1.0:printf(*n); case1,2:printf(*n);case2.0:printf(*n); case3:printf(*n); Cswitch (a+b) Dswitch (a+b); case 1:printf(n); case 1:printf(.*n);case 1+2:printf(*n); case 2:printf(*n); 假定所有变量均已正确说明,下列程序段运行后x的值是 a=b=c=0;x=35; if(!a)x-; else if(b); if(c)x=3; else x=4;A34 B4 C35 D3 在以下一组运算符中,优先级最高的运算符是A=10 or a=10a=10a=10 a=y)&(y=z) B(x=y)AND(y=z) C(x=y=z) D(x=y)&(y=z)两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是main( ) int x;scanf(%d,&x);if(x + + 5) printf(%d,x);else printf(%dn,x - -); A 7和5 B 6和3 C 7和4 D6和4以下程序的输出结果是main( ) int a=-1,b=4,k;k=(+ +a0)&!(b - -=0);printf(%d%d%dn,k,a,b); A 104 B 103 C 003 D 004下面的程序A 有语法错误不能通过编译B 输出* * * *。C 可以通过编译,但是不能通过连接,因而不能运行。D 输出# # # #。main() int x=3,y=0,z=0;if(x=y+z)printf(* * * *);else printf(# # # #);若执行下面的程序时从键盘上输入5,则输出是A7 B6 C 5 D4main() int x;scanf(%d,&x);if(x+5) printf(%dn,x);else printf(%dn,x-);下面程序的输出是A 0 0 3 B 0 1 2 C1 0 3 D1 1 2main() int a=-1, b=4,k;k=(a+=0)&(!(b-=0);printf(%d %d %dn,k,a,b); 下面的程序片段所表示的数学函数关系是上面程序片段的输出结果是 -1(x0) 1 (x0) 0 (x0) 0 (x0) -1(x0) 0 (x0)y=-1;if(x!=0) if(x0) y=1; else y=0下面程序的输出是A-1 B0 C1 D不确定的值main() int x=100, a=10, b=20, ok1=5, ok2=0;if(ab)if(b!=15)if(! ok1)x=1;elseif(ok2)x=10;x=-1;printf(%dn,x); 设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是A a&b B a=bCa|b+c&b-c D!(ab)&!c|1)请读程序:#includemain() float x,y;scan(%f,&x);if(x0.0) y=0.0else if(x5.0)&(x!=2.0)y=1.0/(x+2.0);else if (x10.0) y=1.0/x;else y=10.0;printf(%fn,y);若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是A 0.000000 B 0.250000 C0.500000 D1.000000请读程序:#includemain() 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=%dn,a,b);上面程序的输出结果是Aa=2, b=1 B a=1, b=1 Ca=1, b=0 D a=2, b=2以下程序的输出结果是()。# includemain() int a ,b,d=241;a=d/100%9;b=(-1)&(-1);printf(%d,%dn,a,b); A 6,1 B 2,1 C6,0 D 2,0若k是int型变量,且有下面的程序片段:k=-3if(k=0) printf(#)else printf(&);上面程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创维光伏安装合同范本
- 口袋相机转让合同范本
- 协议车买卖合同协议书
- 冷冻仓储租赁合同范本
- 共享麻将合作合同范本
- 厂房保证金协议书范本
- 农村废弃大坑合同范本
- 双方经济纠纷合同范本
- 2026年一级注册建筑师之建筑经济、施工与设计业务管理考试题库300道(重点)
- 2026年上海海洋大学单招综合素质考试题库附答案
- 全国计算机等级考试(二级)真题汇编及答案解析
- 依法全面治国课件
- 学前儿童扭伤课件
- 2025年全国新闻记者职业资格考试(新闻采编实务)综合试题及答案
- 2025至2030年中国硬脆性陶瓷材料市场分析及竞争策略研究报告
- 2025四川成都市简州新城投资集团有限公司专业技术人才招聘23人笔试参考题库附带答案详解
- 可持续城市更新项目100平方公里历史文化街区保护可行性研究报告
- 2025年重庆专职网格员招聘考试经典试题及答案一重庆社区工作者
- 中安保集团安全培训课件
- 铜精矿海外采购合同范本
- 销售仪表仪态培训课件
评论
0/150
提交评论