第四课 选择结构程序设计.doc_第1页
第四课 选择结构程序设计.doc_第2页
第四课 选择结构程序设计.doc_第3页
第四课 选择结构程序设计.doc_第4页
第四课 选择结构程序设计.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四课 选择结构程序设计 1. 关系表达式和逻辑表达式的复习(1) 运算符的功能(2) 运算符的优先级(3) 运算符的正确使用语句表达式假(0)真(非0)单分支if语句的执行过程2. if控制语句的常见形式(1) 单分支选择结构:if (表达式) 语句如果表达式的值为真,则执行其后的语句, 否则不执行该语句。【例】 输入一个数如果该数大于等于0,则输出它的平方根,如果小于0,则不做任何处理。(2) 双分支选择结构:if(表达式) 语句1; else语句;语句1表达式假(0)真(非0)图4.2 双分支if语句的执行过程语句2如果表达式的值为真,则执行语句,否则执行语句【例】输入一个数,如果该数大于等于0,则输出它的平方根,如果小于0,则输出数据出错信息“data error”。(3) 多分支选择结构if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式m) 语句melse 语句n首先判断表达式1的值,当为真时,则执行对应的语句。然后跳到整个if语句之外继续执行程序。 如果表达式1的值为假,则继续判断表达式2的值,依次类推。若所有的表达式都不为真,则执行语句n,然后继续执行后续程序。【例】 从键盘上输入一个百分制成绩,输出相应的等级。90分以上为“A”,8090分为“”,6079分为“”,60分以下为“D”。(4) if语句的嵌套在上述3种结构中,当if(表达式)或else后面的语句本身又是一个if语句时,就形成了if语句的嵌套。if(表达式)if(表达式1) 语句1_1else 语句1_2如:假真if(score=80)score=80 if(score=90)printf(A);假真真假else score=90score=60printf(B);假else if(score=60)DBCAprintf(C);elseprintf(D);使用if 语句的嵌套时要注意以下几点:l 在嵌套内的if语句可以是前面讲的三种if语句形式。l if语句的嵌套可以是两层甚至是多层,这时要特别注意if与else配对的规则。3. switch语句根据一个表达式的值,选择多个分支,因此也称为分情况语句或开关语句。(1) 其一般形式为:switch(表达式) case 常量表达式1:语句组;break; case 常量表达式2:语句组;break;. case 常量表达式:语句组;break; default:语句组;break; (2) 其中:表达式的值可以是整型或字符型;常量表达式必须是常量,不能是变量,仅代表入口地址,表示当表达式的值等于常量表达式,所执行其后的语句组。如果没有任何一个case后面的“常量表达式”的值与“表达式”的值相同,则执行default 后面的语句(组)。若default在最后,就跳出switch语句。若default语句在中间,则直到最后遇到break语句时,才跳出switch语句。(3) 使用switch语句时应注意以下几点:l 表达式的值可以是整型或字符型。l default可以省略,也可以放在任何位置,但是建议一般放在最后面。若default放在中间时,执行完default语句组后,并不一定跳出switch语句,必须遇到break语句时,才跳出switch语句。l 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。l case后面的“常量表达式”仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,直到遇到break语句,就跳出switch语句。l 各case先后次序,不影响程序执行结果。l 多个case子句,可共用同一语句(组)。l 多分支if结构和switch结构都可以用来实现多条分支,多分支if结构用来实现两条、三条分支情况比较方便,若包括有三条以上分支情况时,使用switch结构较为方便。但是,有些问题只能使用多分支if结构来实现,例如要判断一个值是否处在某个区间的情况。4. 程序举例【例】编制程序要求输入整数a和b,若a2 + b2大于100,则输出a2 + b2百位及以上的数字,否则输出两数的和。【例】试编程判断输入的正整数是否既是5又是7的倍数。若是,则输出yes;否则输出no。【例】根据以下分段函数,对输入的每个x值,计算出相应的y值。 【例】考察目前银行对整存整取存款不同期限的储蓄利率,计算存入本金和一定期限的存款到期时的利息及利息与本金的和。当前整存整取年息利率参考:(%)半年: 2.16一年: 2.25二年: 2.43三年: 2.70五年: 2.88【例】编写程序,输入年份和月份,求该月的天数。5. 单元习题一、 单选题1 逻辑运算符两侧运算对象的数据类型是( )。A只能是0或1 B只能是0或非0正数C只能是整型或字符型数据 D可以是任何类型的数据2 选择出合法的if语句(设int x,a,b,c;)( )。Aif(a=b) x+; Bif(a=b) x+;Cif(ab) x+; Dif(a=b) x+;3 能正确表示“当x的取值在l,10或200,210范围内为真,否则为假”的表达式是( )。A(x=1)&(x=200)&(x=1)|(x=200)|(x=1)&(x=200)&(x=1)|(x=200)|(x=210)4 判断char型变量ch是否为大写字母的正确表达式是( )。A A=ch=A)(ch=A)&(ch=Z) D( A=ch)5 为了避免在嵌套的条件语句 if - else 中产生二义性,C语言规定:else子句总是与( )配对。 A 缩排位置相同的if B 同层之前最近的ifC 同层其之后最近的ifD 同一行上的6 下列运算符中,不属于关系运算符的是( )。A =C =D !7 若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是( )。AA2=1 B!( A2=0) C!(A2) DA28 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是( )。#includevoid main()int x;scanf(%d, &x);if(x+5) printf(%d, x);else printf(%dn, x-);A 7和5B 6和3C 7和4D 6和49 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( )。if(xy)z=x; x=y; yz;Ax=l0,y=20,z=30 Bx=20,y=30,z=30Cx=20,y=30,z=10 Dx20,y30,z=2010. 若运行时给变量x输入12,则以下程序的运行结果是( )。#includevoid main()int x,y;scanf(%d, &x);y=x12?x+10:x-12;printf(%dn,y); A 0B 22C 12D 10二、 看程序,写运行结果1 以下程序运行结果是( )。#includevoid main()int x=2,y=-1,z=2;if(xy)if(y0) z=0; else z+=1;printf(%dn,z);2 以下程序的执行结果是( )。#includevoid main()int a,b,c,d,x;a=c=0;b=1;d=20;if(a) d=d-10;if(!c)x=15;else x=25;printf(d=%dn,d);3 以下程序的执行结果是( )。#includevoid main() int x=1,y=0;switch(x)case 1:switch(y)case 0:printf(firstn);break;case 1:printf(secondn);break; case 2:printf(thirdn);4 以下程序在输入5,2之后的执行结果是( )。#includevoid main()int s,t,a,b;scanf(%d,%d,&a,&b);s=1;t=1;if(a0) s=s+1;if(ab) t=s+t;else if(a=b) t=5;else t=2*s;printf(s=%d,t=%dn,s,t);5 以下程序的执行结果是( )。#includevoid main()int a=2,b=7,c=5;switch(a0)case 1:switch(b0) case 1:printf();break; case 2:printf(!);break; case 0:switch(c=5) case 0:printf(*);break; case 1:printf(#);break; case 2:printf($);break; default:printf(&);printf(n);6 以下程序运行结果是( )。#include void main()int x,y=1;if(y!=0) x=5;printf(t%dn ,x);if(y=0) x=4;else x=5;printf(t%dn ,x);x=1;if(y0) x=4;else x=5;printf(t%dn ,x);7 以下程序的运行结果是( )。#includevoid main()int x , y=-2, z=0;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); 三、 程序填空。1 输入两个整数,按从大到小的顺序输出。 #includevoid main()int x,y,z;scanf(%d,%d,&x,&y);if( )z=x; printf(%d,%d,x,y);2 输入一个小写字母,将该字母循环后移5个位置后输出。如a变成f,w变成b。 #include void main()char c;c=getchar();if(c=a&c=v&c=z) putchar(c);3 以下程序实现:输入圆的半径r和运算标志m,按照运算标志进行指定运算。其中a代表求面积,c代表求周长,b代表求二者均计算。 #include#define PI 3.14159void main()char m;float r,c,a;printf (input mark a c or b & rn);scanf (%c%f,&m,&r);if ( ) a= PI*r*r;printf (area is %f,a);if ( ) c=2* PI*r;printf (circle is %f,c);if ( ) a= PI*r*r;c=2* PI*r;printf (area & circle are %f %f,a,c);4 以下程序的功能是计算一元二次方程ax2+bx+c=0的根。 #include#includevoid main() double a,b,c,t,disc,twoa,term1,term2;printf(enter a,b,c:);scanf(%lf%lf%lf,&a,&b,&c);if( )if( ) printf(input errorn);else printf(the single root is%lfn,-c/b);else disc=b*b-4*a*c;twoa=2*a;term1=-b/twoa;t=fabs(disc);term2=sqrt(t)/twoa;if( )printf(complex rootn real part=%lf imag part=%lfn,term1,term2);elseprintf(real rootsn root1=%lf root2=%lfn,term1+term2,term1-term2);5 以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。 #include #include void main() float a,b,c,s,area;scanf(%f%f%f,&a,&b,&c);if ( ) s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(%fn,area);if( )printf(等边三角形n);else if( )printf(等腰三角形n);else if( a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)printf(直角三角形n);else printf(一般三角形n);else printf(不能组成三角形n);6 服装店经营套服,也单件出售,若买的不少于50套,每套80元;不足50套的每套90元;只买上衣每件60元;只买裤子每条45元。输入所买上衣c和裤子t的件数,计算应付款m。 #includevoid main()int c,t,m;printf(input the number of coat and trousers your want buy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论