《C语言之选择结构程序设计.pptx》由会员分享,可在线阅读,更多相关《C语言之选择结构程序设计.pptx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章选择结构程序设计第五章选择结构程序设计教学目标与要求:掌握关系运算符和关系表达式和逻辑运算符和逻辑表达式。掌握关系运算符和关系表达式和逻辑运算符和逻辑表达式。能够熟练掌握和运用能够熟练掌握和运用if if 语句、语句、switch switch 语句,能设计出具有判断能力的程序,重点学会语句,能设计出具有判断能力的程序,重点学会设计程序的算法。设计程序的算法。第1页/共45页 单分支、双分支、多分支 选择其一 例:if(xy)z=x;else z=y;例:if(xy&xz)max=x;第2页/共45页 5.1 5.1 关系运算符与关系表达式关系运算符与关系表达式 1 1、关系运算符、关系
2、运算符 假值用0表示,非0都为真;关系运算符与优先级:=(高)=!=(低)结合性:左到右第3页/共45页2 2、关系表达式、关系表达式 赋值运算 关系运算 算术运算(高)例:ca+b 等价于 c(a+b)a=bc等价于 a=(bc)第4页/共45页 5.2 5.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式 1 1、逻辑运算符:、逻辑运算符:&逻辑与|逻辑或 !逻辑非(单目运算)2 2、优先级、优先级 逻辑非 高 算术运算 关系运算&和|赋值运算 低例:(ab)&(xy)等效 ab&xy第5页/共45页 3 3、逻辑运算符的运算规律、逻辑运算符的运算规律ab!aa&ba|b真真真真假假真真真
3、真真真假假假假假假真真假假真真真真假假真真假假假假真真假假假假第6页/共45页例:条件:30 x=50表达为:x30例:条件:字符 c是小写字母表达为:c=a第7页/共45页 5.3 if5.3 if语句语句1 1、格式、格式(1)格式一:if(if(表达式表达式)语句语句1 1 else else 语句语句2 2 说明:if、else语句后语句可是复合语句,要用用 。第8页/共45页例1:a、b两个数,输出较大数。例2:a、b两个数,按由小到大次序输出。练习:编程求x绝对值 第9页/共45页源程序:void main()float a,b,t;scanf(%f,%f,&a,&b);if(ab
4、)printf(a=%f,b=%fn,a,b);t=a;a=b;b=t;第10页/共45页(2)格式二 if(if(表达式表达式1)1)语句语句1 1 else if(else if(表达式表达式2)2)语句语句2 2 else if(else if(表达式表达式3)3)语句语句3 3 else else 语句语句n n第11页/共45页#include#include void main()void main()int score;int score;scanf(%d,&score);scanf(%d,&score);if(score=90)if(score=90)printf(score=
5、%d A printf(score=%d A等等n,score);n,score);else if(score=80)else if(score=80)printf printf(score=%d Bscore=%d B等等n,score);n,score);else if(score=70)else if(score=70)printf(score=%d C printf(score=%d C等等n,score);n,score);else if(score=60)else if(score=60)printf(score=%d D printf(score=%d D等等n,score);n
6、,score);else printf(score=%d E else printf(score=%d E等等n,score);n,score);例3 3:学生成绩分等级。90-100“A”,80-89 90-100“A”,80-89“B”,70-79“C”,60-“B”,70-79“C”,60-69“D”,0-60“E”.69“D”,0-60“E”.C5_cjfd.cC5_cjfd.c第12页/共45页 2、if 语句的嵌套 if()if()if()if()语句语句1 1 else else 语句语句2 2 else else if()if()语句语句3 3 else else 语句语句4
7、4 说明:多个嵌套的结果,else存在匹配的问题:else 总是与最近的尚未匹配的 if 匹配。如if和else 数目不同,可用确定配对关系。第13页/共45页程序1:void main()float x,y;scanf(“%f”,&x);if(x0)y=-1;else if(x=0)y=0;else y=1;printf(“x=%f y=%fn”,x,y);例例4 4:有一函数:有一函数:-1 (x0)-1 (x0)输入任意x,求y.第14页/共45页 -1 (x0)-1 (x0)程序2:void main()float x,y;scanf(“%f”,&x);if(x=0)if(x0)y=1
8、;else y=0;else y=-1;printf(“x=%f y=%fn”,x,y);第15页/共45页 -1 (x0)-1 (x0)程序3:void main()float x,y;scanf(“%f”,&x);y=-1;if(x!=0)if(x0)y=1;else y=0;printf(“x=%f y=%fn”,x,y);第16页/共45页练习:给一个不多于5位的正整数,判断是几位数。xt5_7.c第17页/共45页参考代码:void main()int num,place;printf(请输入一个整数(0-99999);scanf(%d,&num);第18页/共45页if(num99
9、99)place=5;else if(num999)place=4;else if(num99)place=3;else if(num9)place=2;else place=1;printf(place=%dn,place);第19页/共45页3、条件运算符 ifif语句中,表达式真假时,都给同一语句中,表达式真假时,都给同一变量赋值,可用条件运算符。变量赋值,可用条件运算符。格式为:表达式1?表达式2:表达式3例:if(ab)max=a;else max=b;可改为:max=(ab)?a:b第20页/共45页说明:说明:先求表达式先求表达式1 1,如果满足,则计算,如果满足,则计算表达式表
10、达式2 2;否则,计算表达式;否则,计算表达式3 3;条件运算优于赋值运算条件运算优于赋值运算第21页/共45页复习:if:if语句格式:格式一格式一:if(:if(表达式表达式)语句语句1 1 else else 语句语句2 2 格式二格式二:if(if(表达式表达式1)1)语句语句1 1 else if(else if(表达式表达式2)2)语句语句2 2 else if(else if(表达式表达式3)3)语句语句3 3 else else 语句语句n n第22页/共45页#include void main()char c;c=getchar();练习:判断由键盘输入的字符是数字、大写字
11、母、小写字母、空格还是其他字符。第23页/共45页if(c=0)printf(%c 是字符!n,c);else if(ca)printf(%c 是小写字母!n,c);else if(cA)printf(%c 是大写字母!n,c);else if(c=)printf(%c 是空格!n,c);else printf(%c 是其他!n,c);第24页/共45页 5.4 5.4 多分支语句多分支语句 switchswitch格式:switch(switch(表达式)case case 常量表达式1:1:语句1 1;case case 常量表达式2:2:语句2 2;case case 常量表达式n:n:
12、语句n n;default:default:语句n+1n+1;第25页/共45页 switch(switch(表达式)case case 常量表达式1:1:语句1 1;case case 常量表达式2:2:语句2 2;case case 常量表达式n:n:语句n n;default:default:语句n+1n+1;说明:lswitch 内的表达式任意类型,与常量表达式类型一致。lcase 语句后有 break终止,否则将执行下面case 语句。lswitch与if不同,只能测试相等,不能像 if 作关系比较,如大于、小于之类;第26页/共45页例5:输入数字,输出星期几?输入0,输出”星期日
13、“输入1,输出”星期一“输入6,输出”星期六“第27页/共45页参考代码:#include void main()int n;scanf(%d,&n);switch(n)case 0:printf(星期日n);break;case 1:printf(星期一n);break;case 2:printf(星期二n);break;case 6:printf(“星期六n);break;default:printf(error!n);第28页/共45页例6 6:学生成绩分等级。90-100“A”,80-89“B”,70-79“C”,60-69 90-100“A”,80-89“B”,70-79“C”,60
14、-69“D”,0-60“E”.“D”,0-60“E”.给出一个等级,输出相应分数段。C5_djcj.c C5_djcj.c 第29页/共45页参考代码:#include void main()char grade;grade=getchar();switch(grade)case A:printf(90-100n);break;case B:printf(80-89n);break;case C:printf(70-79n);break;case D:printf(60-69n);break;case E:printf(50-59n);break;default:printf(error!n)
15、;第30页/共45页5.5 5.5 例子选讲例子选讲例1 1:学生成绩分等级。根据分数输出相应等级.90-100“A”.90-100“A”,80-89 80-89“B”,70-79“C”,60-69“D”,0-60“E”“B”,70-79“C”,60-69“D”,0-60“E”xt5_6.cxt5_6.c分析:处理成绩 temp=score/10;第31页/共45页#include void main()int score,temp;char grade;printf(请输入学生成绩:);scanf(%d,&score);temp=score/10;第32页/共45页switch(temp)s
16、witch(temp)case 10:case 10:case 9:grade=A;break;case 9:grade=A;break;case 8:grade=B;break;case 8:grade=B;break;case 7:grade=C;break;case 7:grade=C;break;case 6:grade=D;break;case 6:grade=D;break;case 5:case 5:case 4:case 4:case 3:case 3:case 2:case 2:case 1:case 1:case 0:grade=E case 0:grade=E;print
17、f(printf(成绩成绩:%d :%d 等级等级:%c,score,grade);:%c,score,grade);第33页/共45页例2:求ax2+bx+c=0的根.C5_6.cC5_6.c分析:三种情况第34页/共45页参考代码:参考代码:#include#include void main()float a,b,c,disc,x1,x2,p,q;scanf(%f,%f,%f,&a,&b,&c);disc=b*b-4*a*c;if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(x1=%8.4f
18、x2=%8.4fn,x1,x2);第35页/共45页else p=;q=;printf(x1=%8.4f+%8.4fin,p,q);printf(x2=%8.4f-%8.4fin,p,q);-b/(2*a);sqrt(-disc)/(2*a)第36页/共45页例3:给一个不多于5位的正整数,判断是几位数,并且按逆序输出各位数字。Xt5_7.cIfIf语句求位数.9999,999,999,=0.9999,999,999,=0求各位数字:如:wan=num/10000:wan=num/10000 qian=(num-wan*10000)/1000 qian=(num-wan*10000)/1000
19、 .定义变量:num,ge,shi,bai,qian,wan,placenum,ge,shi,bai,qian,wan,place输出结果第37页/共45页#include void main()int num;int ge,shi,bai,qian,wan,place;printf(请输入一个整数(0-99999):);scanf(%d,&num);if(num9999)place=5;else if(num999)place=4;else if(num99)place=3;else if(num9)place=2;else place=1;printf(place=%dn,place);第
20、38页/共45页wan=num/10000;qian=(num-wan*10000)/1000;bai=(num-wan*10000-qian*1000)/100;shi=(num-wan*10000-qian*1000-bai*100)/10;ge=num-wan*10000-qian*1000-bai*100-shi*10;printf(每位数字为:);switch(place)case 5:printf(%d,%d,%d,%d,%dn,wan,qian,bai,shi,ge);printf(逆序数字为:);printf(%d,%d,%d,%d,%dn,ge,shi,bai,qian,wa
21、n);break;第39页/共45页case 4:printf(%d,%d,%d,%dn,qian,bai,shi,ge);printf(逆序数字为:);printf(%d,%d,%d,%dn,ge,shi,bai,qian);break;case 3:printf(%d,%d,%dn,bai,shi,ge);printf(逆序数字为:);printf(%d,%d,%dn,ge,shi,bai);break;第40页/共45页case 2:printf(%d,%dn,shi,ge);printf(逆序数字为:);printf(%d,%dn,ge,shi);break;case 1:printf
22、(%dn,ge);printf(逆序数字为:);printf(%dn,ge);第41页/共45页例4:判断某一年是否闰年.C5_5.cC5_5.c 闰年条件符合下面两者之一.(1)能被4整除,但不能被100整除.(2)能被100整除,又能被400整除.(year%4=0&year%100!=0)|(year%400=0)第42页/共45页#include void main()int year,leap;scanf(%d,&year);if()printf(%4d is a leap yearn,year);elseprintf(%4d is not a leap yearn,year);(y
23、ear%4=0&year%100!=0)|(year%400=0)第43页/共45页例5:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?Xt5_8.c(switch)提示:请利用数轴来分界,定位。注意定义变量时需把奖金定义为长整型,以免数据溢出。(1)if 语句 (2)switch语句 第44页/共45页感谢您的欣赏!第45页/共45页