C语言 CH5选择结构



《C语言 CH5选择结构》由会员分享,可在线阅读,更多相关《C语言 CH5选择结构(27页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,*,,第四级,,第五级,,,*,第五章,选择结构程序设计,,1,,一、关系运算符和关系表达式,,二、逻辑运算符和逻辑表达式,,三、实现选择结构的控制语句,,四、选择结构程序举例,主要内容,,2,,关系运算符, >= == != (6种),优先级,赋值,<,关系,(,后,2<,前,4,) <,算术,关系表达式,用关系运算符将两个,表达式,连接起来的式子,.,算术、关系、逻辑、赋值、字符。,值,真(1) 假(0),举例,已知,: (a=3 b=2 c=1 d=0),,0,a==b>c
2、,d==a>b+c,,1,5>3 ?,d=a>b+c?,一、关系运算符和关系表达式,,3,,逻辑运算符,,!,(逻辑非),,&&,(逻辑与),,||,(逻辑或),运算规则,优先次序,赋值,< || < && <,关系,<,算术,<,!,(1) !:,取逻辑值的相反值。,,(2) &&:,参加运算的两个逻辑值都为真时,结果为真,(1),。,,(3) ||:,参加运算的两个逻辑值都为假时,结果为假(,0),。,P89,逻辑表达式,用逻辑运算符将,关系表达式和逻辑量,连接起来的式子。,举例,已知,: (a=,1,b=,0,),,1,a || b && 0,! a && (5
3、>3) || b,,0,P375,双目,单目,二、逻辑运算符和逻辑表达式,,4,,举例,5>3 && 8 < 4- !0,,0,(5>3) && (8 < (4- !0)),4 && 5>3 || 2,,1,注意,P90,逻辑运算符两侧的运算对象不但可以是0和1,也可以是0或非0的整数,也可是任何类型的数据。系统判定标准:0为假;非0为真。,二、逻辑运算符和逻辑表达式,,5,,(一)、选择结构的三种分支,,(二)、单分支,,(三)、双分支,,(四)、多分支,三、实现选择结构的控制语句,,6,,选择结构,单分支,双分支,if (,表达式,),语句,多分支,if (,表达式,),语句1
4、,else,语句2,if (,表达式,1),语句1,,else if (,表达式2,),语句2,,……,,else,语句,n,if,语句的嵌套,switch,语句,(一)、选择结构的三种分支,,7,,格式,举例,if (x>y),printf(“%d”,x,);,if (,表达式,),语句,#include <,stdio.h,>,,void main(),,{float a,b,t=0;,,,scanf(“%f,%f”,&a,&b,);,,if (a>b),,{t=a; a=b; b=t;},,printf(“%5.2f,%5.2f\n”,a,b);,,},,3,4,,,3.0
5、0, 4.00,……,,if (a>b),,t=a; a=b; b=t;,,……,,……,,if (a>b),,t=a;,,a=b;,,b=t;,,……,,3,4,,,4.00, 0.00,当某些语句作为一个整体出现的时候,必须是复合语句的形式。,(二)、单分支,,8,,格式,if (x>y),printf(“%d”,x,);,,else,printf(“%d”,y,);,第五章,选择结构程序设计,#include <,stdio.h,>,,void main(),,{,,float a,b,c,p,s;,,,scanf(“%f,%f,%f”,&a,&b,&c,);,,if (a
6、+b>c && a+c>b && b+c>a),,,{,,,p=(a+b+c)/2;,,s=,sqrt(p,*(p-a)*(p-b)*(p-c));,,,printf(“s,=%7.2f\n”,s);,,,},,else,,,printf(“Not,a triangle!\n”);,,},if (,表达式,),语句1,else,语句2,例:输入三角形的三边,求三角形的面积。,,,输入,a,b,c,是三角形吗?,Y,N,p,,(a+b+c)/2,,s,,sqrt(p,*(p-a)*(p-b)*(p-c)),,输出,s,输出“非,,三角形!”,,3,4,5,,,s= 6.00,3,4
7、,8,,,Not a triangle!,(三)、双分支,,9,,条件运算符,,条件表达式,举例,if (a>b) max=a;,,else max=b;,第五章,选择结构程序设计,表达式1?表达式2:表达式3,,,max= (a>b)? a : b;,说明,P97,条件运算符的使用条件,若,if,语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。,取值,表达式,1,为真,则取值为表达式,2,的值;,,表达式,1,为假,则取值为表达式,3,的值。,(三)、双分支,,10,,格式,举例,第五章,选择结构程序设计,if (cost>300
8、0) cash=500;,,else if (cost>2000) cash=300;,,else if (cost>1500) cash=200;,,else if (cost>1000) cash=100;,,else cash=0;,,,if (,表达式,1),语句1,,else if (,表达式2,),语句2,,……,,else,语句,n,注意,P92,语句本身含分号,(四)、多分支(一),,11,,if,语句的嵌套,第五章,选择结构程序设计,,在,if
9、,语句中又包含一个或多个,if,语句。,被嵌套的条件语句和嵌套进去的条件语句既可是单分支,也可是双分支。,if (,表达式1,),,,if (,表达式2,),语句1,,,[else,语句2,],,[else,,if (,表达式,3),语句,3,,,[else,语句,4]],注意,if,与,else,的配对原则:,,else,总是与它上面的最近的未配对的,if,配对。,分析方法,1,、主句是单分支还是双分支的。,,2,、嵌套进来的子句是双分支还是单分支的,嵌套在,if,后面还是,else,后面。,(四)、多分支(二),,12,,举例,第五章,选择结构程序设计,,,已知,a=3 b=4 c=5
10、 d=0,,d=?,if (a>b) d=a;,,else,,if (c>b) d=c;,,else d=b;,if (a>b),,if (c>b) d=c;,,else d=b ;,if (a>b),,{if (c>b) d=c;},,else d=b ;,if (a>b),,if (c>b) d=c;,,else d=b;,,else d=a;,d=5,d=3,d=0,d=4,(四)、多分支(二),,13,,开关语句,第五章,选择结构程序设计,switch (,表达式,),,{,,case,常量表达式,1,:语句,1,,case,常量表达
11、式,2,:语句,2,,case,常量表达式,3,:语句,3,,……,,case,常量表达式,n,:,语句,n,,default:,语句,n+1,,},P98,当,分支较多时,使用嵌套的,if,语句层数多,程序冗长而且可读性降低。此时可以考虑使用,switch,语句(开关语句)来处理多分支。,(四)、多分支(三),,14,,举例,#include <,stdio.h,>,,void main(),,{,,char grade;,,,printf,(“,请输入考试等级,A~D:”);,,,scanf(“%c”,&grade,),;,,switch (grade),,{,,case ‘A’: p
12、rintf(“80~100\n”);,,case ‘B’: printf(“70~79\n”);,,case ‘C’: printf(“60~69\n”);,,case ‘D’:,printf,(“<60\n”);,,default:,printf(“error\n,”);,,},,},,B,,,70~79,,60~69,,<60,,Error,,根据输入的考试成绩等级打印出百分制分数段。,,A: 80~100 B: 70~79 C: 60~69 D: <60,说明:应在每一个,printf,后加,break,语句,P99(
13、,说明,),第五章,选择结构程序设计,(四)、多分支(三),,15,,举例,#include <,stdio.h,>,,void main(),,{,,char grade;,,,printf,(“,请输入考试等级,A~D:”);,,,scanf(“%c”,&grade,),,switch (grade),,{,,case ‘A’: printf(“80~100\n”);,break,;,,case ‘B’: printf(“70~79\n”);,break,;,,case ‘C’: printf(“60~69\n”);,break,;,,case ‘D’:,printf,(“<60\n”
14、);,break,;,,default:,printf(“error\n,”);,,},,},,B,,,70~79,根据输入的考试成绩等级打印出百分制分数段。,,A: 80~100 B: 70~79 C: 60~69 D: <60,最后一行的,break,可以省略。,第五章,选择结构程序设计,(四)、多分支(三),,16,,思考,#include <,stdio.h,>,,void main(),,{,,,int,score;,,,printf,(“,请输入考试成绩,0,~,100:”);,,,scanf(“%c”,&s
15、core,);,,if(score>100),,,printf,(“,请输入,0,~,100,之间的整数,\n”);,,else if(score>=80),,,printf(“A\n,”);,,else if(score>=70),,,printf(“B\n,”);,,else if(score>=60),,,printf(“C\n,”);,,else,,,printf(“D\n,”);,,},根据输入的考试成绩(百分制整数)打印出等级水平。(使用,if~else,语句实现),,A: 80~100 B: 70~79 C: 60~69
16、 D: <60,思考:使用,switch,语句如何实现?,程序,第五章,选择结构程序设计,(四)、多分支(三),,17,,思考,#include <,stdio.h,>,,void main(),,{,,,int,score;,,,printf,(“,请输入考试成绩,0,~,100:”);,,,scanf(“%c”,&score,);,,switch (score),,{,,case,80,~,100,: printf(“A\n”);,break,;,,case,70~79,: printf(“B\n”);,break,;,,case,60~69,: printf(“C\n”);,
17、break,;,,case,<60,:,printf(“D\n”);,break,;,,default:,printf,(“,请输入,0,~,100,之间的整数,\n”);,,},,},根据输入的考试成绩(百分制整数)打印出等级水平。(使用,switch,语句实现),,A: 80~100 B: 70~79 C: 60~69 D: <60,思考:本程序有问题么?,程序,第五章,选择结构程序设计,(四)、多分支(三),,18,,#include <,stdio.h,>,,void main(),,{,,,int,score,
18、p;,,,printf,(“,请输入考试成绩,0,~,100:”);,,,scanf(“%c”,&score,);,,p=score/10;,,switch (p),,{,,case 0: printf(“D\n”);,break,;,,case 1: printf(“D\n”);,break,;,,case 2: printf(“D\n”);,break,;,,case 3:,printf(“D\n”);,break,;,,case 4:,printf(“D\n”);,break,;,,case 5:,printf(“D\n”);,break,;,,case 6:,printf
19、(“C\n”);,break,;,,case 7:printf(“B\n”);,break,;,,case 8:printf(“A\n”);,break,;,,case 9:printf(“A\n”);,break,;,,case 10:printf(“A\n”);,break,;,,default:,printf,(“,请输入,0,~,100,之间的整数,\n”);,,},,},改进程序,1,11,种情况,思考:不同,case,值时执行相同的操作,是否可以合并?,第五章,选择结构程序设计,,19,,#include <,stdio.h,>,,void main(),,{,,,int
20、,score, p;,,,printf,(“,请输入考试成绩,0,~,100:”);,,,scanf(“%c”,&score,);,,p=score/10;,,switch (p),,{,,,case 0:,,case 1:,,case 2:,,case 3:,,case 4:,,case 5:,printf(“D\n”);break,;,,case 6:,printf(“C\n”);,break,;,,case 7:printf(“B\n”);,break,;,,,case 8:,,case 9:,,case 10:printf(“A\n”);break,;,,defau
21、lt:,printf,(“,请输入,0,~,100,之间的整数,\n”);,,},,},改进程序,2,注意:多个,case,共用一组执行语句时,共用的执行语句写在,最后一个,case,的后面。,第五章,选择结构程序设计,,20,,例1,输入一年号,,,判断这一年是否为闰年,.,第五章,选择结构程序设计,,真,year,被,400,整除,year,被,4,整除,真,假,leap=0,leap=1,year,被,100,整除,真,leap=1,leap=0,Leap,真,假,输出“闰年”,输出“非闰年”,假,假,四、选择结构程序设计举例,,21,,例1,输入一年号,,,判断这一年是否为闰年,.,#
22、include <,stdio.h,>,,void main(),,{,,,int,year,leap;,,,scanf("%d",&year,);,,if,(year%4==0),,{,if,(year%100==0),,{,if,(year%400==0),,leap=1;,,,else,leap=0;,},,,else,,leap=1;,},,else,,leap=0;,,if,(leap),,,printf("%d,is ",year);,,else,,,printf("%d,is not ",year);,,,printf("a,leap year\n",year);,,},运行情况
23、如下:,,输入:,1800,,输出:,1800 is not a leap year,,,输入:,2000,,输出:,2000 is a leap year,,,输入:,1996,,输出:,1996 is a leap year,条件可否合并写成一行呢?,四、选择结构程序设计举例,,22,,改进程序,第五章,选择结构程序设计,#include <,stdio.h,>,,void main(),,{,,,int,year,leap;,,,scanf("%d",&year,);,,,,if,((year%4==0 && year%100!=0)||(year%400==0)),,leap=1;,,
24、else,,leap=0;,,,,,if,(leap,),,,printf("%d,is ",year);,,else,,,printf("%d,is not ",year);,,,printf("a,leap year\n",year);,,},四、选择结构程序设计举例,,23,,第五章,选择结构程序设计,例2,求方程,ax,2,+bx+c=0,的解,.(,各种形式,),,,,真,a=0,真,假,输出“非二次方程”,b,2,-4ac=0,真,输出两个实根:,,x1,,,x2,输出两个相等实根,:,,假,b,2,-4ac>0,假,计算复根的实部和虚部:实部,,虚部,输出两个复根:,,p+qi,
25、,,p-qi,四、选择结构程序设计举例,,24,,第五章,选择结构程序设计,#include <,stdio.h,>,,#include ,,void main(),,{,,,float a,b,c,disc,x1,x2,realpart,imagpart;,,,scanf("%f,%f,%f",&a,&b,&c,);,,,printf("The,equation ");,,if,(a==0),,,printf("is,not a quadratic");,,else,,,{,disc=b*b-4*a*c;,,,if,,(disc==0),,,printf("has,two equal roo
26、ts:%8.4f\n",-b/(2*a));,,,else,,if,(disc,>0),,,{,x1=(-b+sqrt(disc))/(2*a);,,x2=(-b-sqrt(disc))/(2*a);,,,printf("has,distinct real roots:%8.4f and %8.4f\n",x1,x2);,},,,,else,,,{,,realpart,=-b/(2*a);,,,imagpart,=sqrt(-disc)/(2*a);,,,printf("has,complex roots: \n");,,printf("%8.4f + %8.4f i\n",,realpart
27、,,,imagpart,);,,printf("%8.4f + %8.4f i\n",,realpart,,,imagpart,);,,},,,},,},注意:,P102,四、选择结构程序设计举例,,25,,第五章,选择结构程序设计,#include <,stdio.h,>,,void main(),,{,int,c,s;,,float p,w,d,f;,,,scanf("%f,%f,%d",&p,&w,&s,);,,if (s>=3000) c=12;,,else c=s/250;,,switch(c),,{,case 0:d=0;break;,,case 1:d=2;break;,,c
28、ase,2:,,case,3:d=5;break;,,case,4,:,,case,5:,,case,6:,,case,7:d=8;break;,,case,8:,,case,9:,,case,10:,,case,11:d=10;break;,,case 12:d=15;break;,,},,f=p*w*s*(1-d/100.0);,,,printf("freight,=%15.4f\n", f);,,},例3,103页5.7,运输公司对用户计算运费。路程,(s),越,远,每公里运费越低。标准如下:,,没有折扣,,,,2%,折扣,,,5%,折扣,,,8%,折扣,,,10%,折扣,,,15%,折扣,,设每公里每吨货物的基本运费为,p,,,货物重为,w,,,距离为,s,,,折扣为,d,,则总,运费的计算公式为,,F=p*w*s*,(,1-d,),四、选择结构程序设计举例,,26,,作业,,P104: 5.3, 5.4, 5.5, 5.6, 5.7,,27,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。