资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,*,第四级,第五级,*,第五章,选择结构程序设计,1,一、关系运算符和关系表达式,二、逻辑运算符和逻辑表达式,三、实现选择结构的控制语句,四、选择结构程序举例,主要内容,2,关系运算符, = = != (6种),优先级,赋值,关系,(,后,2,前,4,) c,d=ab+c,1,53 ?,d=ab+c?,一、关系运算符和关系表达式,3,逻辑运算符,!,(逻辑非),&,(逻辑与),|,(逻辑或),运算规则,优先次序,赋值, | & ,关系,算术,3) | b,0,P375,双目,单目,二、逻辑运算符和逻辑表达式,4,举例,53 & 8 3) & (8 3 | 2,1,注意,90,逻辑运算符两侧的运算对象不但可以是和,也可以是或非的整数,也可是任何类型的数据。系统判定标准:为假;非为真。,二、逻辑运算符和逻辑表达式,5,(一)、选择结构的三种分支,(二)、单分支,(三)、双分支,(四)、多分支,三、实现选择结构的控制语句,6,选择结构,单分支,双分支,if (,表达式,),语句,多分支,if (,表达式,),语句,else,语句,if (,表达式,1),语句,else if (,表达式,),语句,else,语句,n,if,语句的嵌套,switch,语句,(一)、选择结构的三种分支,7,格式,举例,if (xy),printf(“%d”,x,);,if (,表达式,),语句,#include ,void main(),float a,b,t=0;,scanf(“%f,%f”,&a,&b,);,if (ab),t=a; a=b; b=t;,printf(“%5.2f,%5.2fn”,a,b);,3,4,3.00, 4.00,if (ab),t=a; a=b; b=t;,if (ab),t=a;,a=b;,b=t;,3,4,4.00, 0.00,当某些语句作为一个整体出现的时候,必须是复合语句的形式。,(二)、单分支,8,格式,if (xy),printf(“%d”,x,);,else,printf(“%d”,y,);,第五章,选择结构程序设计,#include ,void main(),float a,b,c,p,s;,scanf(“%f,%f,%f”,&a,&b,&c,);,if (a+bc & a+cb & b+ca),p=(a+b+c)/2;,s=,sqrt(p,*(p-a)*(p-b)*(p-c);,printf(“s,=%7.2fn”,s);,else,printf(“Not,a triangle!n”);,if (,表达式,),语句,else,语句,例:输入三角形的三边,求三角形的面积。,输入,a,b,c,是三角形吗?,p,(a+b+c)/2,s,sqrt(p,*(p-a)*(p-b)*(p-c),输出,s,输出“非,三角形!”,3,4,5,s= 6.00,3,4,8,Not a triangle!,(三)、双分支,9,条件运算符,条件表达式,举例,if (ab) max=a;,else max=b;,第五章,选择结构程序设计,表达式?表达式:表达式,max= (ab)? a : b;,说明,P97,条件运算符的使用条件,若,if,语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。,取值,表达式,1,为真,则取值为表达式,2,的值;,表达式,1,为假,则取值为表达式,3,的值。,(三)、双分支,10,格式,举例,第五章,选择结构程序设计,if (cost3000) cash=500;,else if (cost2000) cash=300;,else if (cost1500) cash=200;,else if (cost1000) cash=100;,else cash=0;,if (,表达式,1),语句,else if (,表达式,),语句,else,语句,n,注意,P92,语句本身含分号,(四)、多分支(一),11,if,语句的嵌套,第五章,选择结构程序设计,在,if,语句中又包含一个或多个,if,语句。,被嵌套的条件语句和嵌套进去的条件语句既可是单分支,也可是双分支。,if (,表达式,),if (,表达式,),语句,else,语句,else,if (,表达式,3),语句,3,else,语句,4,注意,if,与,else,的配对原则:,else,总是与它上面的最近的未配对的,if,配对。,分析方法,1,、主句是单分支还是双分支的。,2,、嵌套进来的子句是双分支还是单分支的,嵌套在,if,后面还是,else,后面。,(四)、多分支(二),12,举例,第五章,选择结构程序设计,已知,a=3 b=4 c=5 d=0,d=?,if (ab)d=a;,else,if (cb) d=c;,else d=b;,if (ab),if (cb) d=c;,else d=b ;,if (ab),if (cb) d=c;,else d=b ;,if (ab),if (cb) d=c;,else d=b;,else d=a;,d=5,d=3,d=0,d=4,(四)、多分支(二),13,开关语句,第五章,选择结构程序设计,switch (,表达式,),case,常量表达式,1,:语句,1,case,常量表达式,2,:语句,2,case,常量表达式,3,:语句,3,case,常量表达式,n,:,语句,n,default:,语句,n+1,P98,当,分支较多时,使用嵌套的,if,语句层数多,程序冗长而且可读性降低。此时可以考虑使用,switch,语句(开关语句)来处理多分支。,(四)、多分支(三),14,举例,#include ,void main(),char grade;,printf,(“,请输入考试等级,AD:”);,scanf(“%c”,&grade,),;,switch (grade),case A: printf(“80100n”);,case B: printf(“7079n”);,case C: printf(“6069n”);,case D:,printf,(“60n”);,default:,printf(“errorn,”);,B,7079,6069,60,Error,根据输入的考试成绩等级打印出百分制分数段。,A: 80100 B: 7079 C: 6069 D: 60,说明:应在每一个,printf,后加,break,语句,P99(,说明,),第五章,选择结构程序设计,(四)、多分支(三),15,举例,#include ,void main(),char grade;,printf,(“,请输入考试等级,AD:”);,scanf(“%c”,&grade,),switch (grade),case A: printf(“80100n”);,break,;,case B: printf(“7079n”);,break,;,case C: printf(“6069n”);,break,;,case D:,printf,(“60n”);,break,;,default:,printf(“errorn,”);,B,7079,根据输入的考试成绩等级打印出百分制分数段。,A: 80100 B: 7079 C: 6069 D: 60,最后一行的,break,可以省略。,第五章,选择结构程序设计,(四)、多分支(三),16,思考,#include ,void main(),int,score;,printf,(“,请输入考试成绩,0,100:”);,scanf(“%c”,&score,);,if(score100),printf,(“,请输入,0,100,之间的整数,n”);,else if(score=80),printf(“An,”);,else if(score=70),printf(“Bn,”);,else if(score=60),printf(“Cn,”);,else,printf(“Dn,”);,根据输入的考试成绩(百分制整数)打印出等级水平。(使用,ifelse,语句实现),A: 80100 B: 7079 C: 6069 D: 60,思考:使用,switch,语句如何实现?,程序,第五章,选择结构程序设计,(四)、多分支(三),17,思考,#include ,void main(),int,score;,printf,(“,请输入考试成绩,0,100:”);,scanf(“%c”,&score,);,switch (score),case,80,100,: printf(“An”);,break,;,case,7079,: printf(“Bn”);,break,;,case,6069,: printf(“Cn”);,break,;,case,60,:,printf(“Dn”);,break,;,default:,printf,(“,请输入,0,100,之间的整数,n”);,根据输入的考试成绩(百分制整数)打印出等级水平。(使用,switch,语句实现),A: 80100 B: 7079 C: 6069 D: 60,思考:本程序有问题么?,程序,第五章,选择结构程序设计,(四)、多分支(三),18,#include ,void main(),int,score, p;,printf,(“,请输入考试成绩,0,100:”);,scanf(“%c”,&score,);,p=score/10;,switch (p),case 0: printf(“Dn”);,break,;,case 1: printf(“Dn”);,break,;,case 2: printf(“Dn”);,break,;,case 3:,printf(“Dn”);,break,;,case 4:,printf(“Dn”);,break,;,case 5:,printf(“Dn”);,break,;,case 6:,printf(“Cn”);,break,;,case 7:printf(“Bn”);,break,;,case 8:printf(“An”);,break,;,case 9:printf(“An”);,break,;,case 10:printf(“An”);,break,;,default:,printf,(“,请输入,0,100,之间的整数,n”);,改进程序,1,11,种情况,思考:不同,case,值时执行相同的操作,是否可以合并?,第五章,选择结构程序设计,19,#include ,void main(),int,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(“Dn”);break,;,case 6:,printf(“Cn”);,break,;,case 7:printf(“Bn”);,break,;,case 8:,case 9:,case 10:printf(“An”);break,;,default:,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,输入一年号,判断这一年是否为闰年,.,#include ,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 yearn,year);,运行情况如下:,输入:,1800,输出:,1800 is not a leap year,输入:,2000,输出:,2000 is a leap year,输入:,1996,输出:,1996 is a leap year,条件可否合并写成一行呢?,四、选择结构程序设计举例,22,改进程序,第五章,选择结构程序设计,#include ,void main(),int,year,leap;,scanf(%d,&year,);,if,(year%4=0 & year%100!=0)|(year%400=0),leap=1;,else,leap=0;,if,(leap,),printf(%d,is ,year);,else,printf(%d,is not ,year);,printf(a,leap yearn,year);,四、选择结构程序设计举例,23,第五章,选择结构程序设计,例2,求方程,ax,2,+bx+c=0,的解,.(,各种形式,),真,a=0,真,假,输出“非二次方程”,b,2,-4ac=0,真,输出两个实根:,x1,,,x2,输出两个相等实根,:,假,b,2,-4ac0,假,计算复根的实部和虚部:实部,虚部,输出两个复根:,p+qi,,,p-qi,四、选择结构程序设计举例,24,第五章,选择结构程序设计,#include ,#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 roots:%8.4fn,-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.4fn,x1,x2);,else,realpart,=-b/(2*a);,imagpart,=sqrt(-disc)/(2*a);,printf(has,complex roots: n);,printf(%8.4f + %8.4f in,realpart,imagpart,);,printf(%8.4f + %8.4f in,realpart,imagpart,);,注意:,P102,四、选择结构程序设计举例,25,第五章,选择结构程序设计,#include ,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;,case,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.4fn, 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,
展开阅读全文