,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,第三章,基本程序设计,模式,1,模式,2,模式,3,备注,if,(,expr,),语句,S1,if,(,expr,),语句,S1,else,语句,S2,if,(,expr1,),语句,S1,else if,(,expr2,),语句,S2,else if,(,expr3,),语句,S3,else,语句,Sn,语句,S1,S2,S3,Sn,可以是简单语句,也可以是复合语句。,如果是复合语句语句,必须用一对花括号,“,”,括起来,3.1,选择结构程序设计,if,语句的三种基本形式,模式,1:,单选择,if,语句,语句格式:,if(,条件),语句组,;,语句,N,条件,Y,功能:判断条件为真时执行语句,否则,跳过,语句,表达式非,0,为真,模式,2:,双选择,if,语句,5.1 if,语句,语句格式:,if(,条件),语句组1;,else,语句组2;,功能:判断条件为真时执行语句组,1,否则执行语句组,2,条件,语句,1,语句,2,Y,N,模式,3:,多条件的,if,语句,语句格式:,if(,条件1)语句1;,else if(,条件2)语句2;,else if(,条件3)语句3;,else if(,条件,m),语句,m;,else,语句,n;,语句,1,N,条件,1,Y,条件,2,条件,n,Y,Y,语句,2,语句,3,语句,n,N,N,功能:,从多组语句中选择满足条件的语句组执行。,(,1,)三种形式的,if,语句中,,if,关键词后面均为表达式。通常为,关系表达式,或,逻辑表达式,。也可以是其它表达式,如,赋值表达式,,甚至也可以是,一个变量,。,例如:,if(,a=5,),语句;或,if(,b,),语句;均为合法用法,(,2,),if,后的条件判断表达式一定用圆括号括起来,语句之后一定 要用分号。,使用,if,语句时注意:,(,3,)三种形式中,若为一组语句一定用,括起来,组成,复合语句,。但需注意,后不可用“;”号。,例如:,if,(ab),a+;b+;,else,a=0;b=10;,有一函数,编写一个程序,输入,x,输出,y,值。,main(),int x,y;,scanf(“%d”,if,(x=0),if,(x0)y=1;,else,y=0;,else,y=-1;,printf(“x=%dty=%dn”,x.y);,方法二:,运行:,23,X=23,y=1,if,语句的嵌套:,一般形式:,if (,表达式,1),if(,表达式,2),语句,1,内嵌,else,语句,2 if,语句,else,if (,表达式,3),语句,3,内嵌,else,语句,4 if,语句,if,语句中又含有,if,语句的形式称为,if,语句的嵌套。,说明:,每一个,if,与,else,相匹配,也可能不与,else,相匹配;但是,每一个,else,必须与一个,if,相匹配,。,else,与,if,匹配的原则是,:,最后的,else,总是与它上面,最近的,if,配对。,多分支及分支嵌套应采用缩排方式,以增加程序的可读性。,例:,if(a=b),if(b=c),printf(“a=b=c”);,else,printf(“a!=b”);,修改:,if(a=b),if(b=c),printf(“a=b=c”);,else,printf(“a!=b”);,实现,if else,正确配对方法:加,例 考虑下面程序输出结果,:,main(),int x=100,a=10,b=20;,int v1=5,v2=0;,if(ab),if(b!=15),if(!v1),x=1;,else,if(v2)x=10;,/*x=-1;*/,printf(“%d”,x);,结果:,100,结果:,-1,x=-1;,例:体型判断,按,“,体指数,”,对肥胖程度进行划分:,体指数,t=w/h,2,(体重,w,单位为公斤,身高,h,单位为米),当,t 18,时,为低体重;,当,18,t 25,时,为正常体重;,当,25,t 27,时,为超重体重;,当,t,27,时,为肥胖。,编程从键盘输入你的身高,h,和体重,w,,判断你的体重属于何种类型。,例,#,include,main(),float,h,w,t;,printf(Please enter h,w:);,scanf(%f%f,t=w/(h*h);,if,(,t=18&t=25&t=27,),printf(t=%ftToo fat!n,t);,当,t 18,时,为低体重;,当,18 t 25,时,为正常体重;,当,25,t 27,时,为超重体重;,当,t 27,时,为肥胖。,#,include,main(),float,h,w,t;,printf(Please enter h,w:);,scanf(%f%f,t=w/(h*h);,if,(t 18),printf(t=%ftLower weight!n,t);,else if,(t 25),printf(t=%ftStandard weight!n,t);,else if,(t 27),printf(t=%ftHigher weight!n,t);,else,printf(t=%ftToo fat!n,t);,18 25 27,例,当,t 18,时,为低体重;,当,18 t 25,时,为正常体重;,当,25,t 27,时,为超重体重;,当,t 27,时,为肥胖。,【,例,3-6】,程序举例,运输公司对用户计算运费。,路程()越远,每公里运费越低。标准如下:,没有折扣,折扣,折扣,折扣,折扣,折扣,设每公里每吨货物的基本运费为,货物重为,,距离为,折扣为,则总运费的计算公式为:,*(),if,(s250)d=0;,else,if,(s500)d=2;,else if,(s1000)d=5;,else,if,(s2000)d=8;,else,if,(s3000)d=10;,else,d=15;,1.,嵌套条件语句实现,分析折扣变化的规律性:,折扣的,“,变化点,”,都是,250,的倍数,在横轴上加一种坐标,,c,的值为,s/250,。,c,代表,250,的倍数。,,无折扣;,,;,,;,,;,,;,,。,考虑用,switch,case,结构,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;,default,:d=15;break;,2.switch,语句实现,switch,和,else,-,if,的比较,else-if,比,switch,的条件控制更强大一些,else,-,if,可以依照各种逻辑运算的结果进行流程控制,switch,只能进行,=,判断,并且只能是整数判断,switch,比,else-if,更清晰,两者都要尽量避免用得过多、过长,尤其不要嵌套得太多,它们大大增加程序的分支,使逻辑关系显得混乱,不易维护,易出错,f,or,循环,w,hile,循环,d,o while,循环,3.2,循环结构设计,for,循环说明:,(,1,)最简单的应用形式:,for,(循环变量赋初值;循环条件;循环变量增值)语句,例如:,for(i=1;i=10;i+)s=s*i;,(,2,)三个表达式均可缺省,但起分割作用的两个分号不可省,。,例如:,for(;),等效于,while(1),表达式,1,省略,应在,for,之前对循环变量赋初值,i=1;,for(;i=5;i+),printf(“%dn”,i);,for(i=1;i=5;i+),printf(“%dn”,i);,表达式,2,省略,则不判断条件,循环无终止进行下去,表达式,3,省略,则应另设法保证循环的结束,此功能一定在循环体中完成,例:,for(i=1;i=5;),printf(“%dn”,i);,i+,;,(,3,)表达式,1,和表达式,3,可为逗号表达式,因此可以对,多个变量赋初值及修改,例如:,for(i=1,j=10,;,i=j,;,i+,j-)k=i+j;,原则上表达式,2,不可省略,若省略需要在循环体中用其它手段(,break,、,goto,等)结束循环。,(,4,),for,语句的循环体还可为另一个循环语句,for(i=1;i=2;i+),for(j=1;j=2;j+),printf(“%3d”,i+j);,printf(“n”);,output:2,3,3,4,例如:,do-while,语句,do,语句,;,while(,表达式,),;,功能:先执行循环体,然后计算表达式值,其值若为真(非,0,)则继续执行循环体,直到表达式为假时为止。,【,例,】,while,和,do-while,循环的比较,(1)void main(),int i,,,sum=0,;,scanf(,%d,while(i=10),sum=sum+i;,i+;,printf(,“sum=,%dn,”,sum);,(2)void main(),int i,sum=0;,scanf(,%d,do,sum=sum+i;,i+;,while(i=10);,printf(,sum=,%dn,sum),;,循环至少,执行一次,循环没有,被执行,输入:,12,输出:,sum=12,输入:,12,输出:,sum=0,三种循环语句的比较,1,for,语句与,while,语句执行过程相同,但,for,语句简洁、清晰,它将初始条件、判断条件和循环变量的在一行书写,显得直观、明了。,2,while,和,do-while,语句的循环控制变量初始化是在循环语句之前完成,而,for,语句循环变量的初始化是在,for,中(表达式,1,)中,也可以在,for,语句前实现。,3,for,语句和,while,语句是判断条件后执行循环体;而,do-while,是先执行循环体后判断条件,无论条件是否满足都要执行一次循环体。,选择三种循环的一般原则,如果循环次数已知,用,for,如果循环次数未知,用,while,如果循环体至少要执行一次,用,do-while,这只是“一般”原则,不是“原则”,注意,在,for,和,while,语句之后一般没有分号,有分号表示循环体就是分号之前的内容(空循环体),while,(i 100),;,i+;,for,(i=0;i 100;i+),;,printf(%d,i);,for,通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量,循环,嵌套,结构规划,外循环,内循环,交叉循环,外循环,入口,内循环出口,内循环出口,外循环出口,循环嵌套,在循环体中,又包含有循环结构即构成循环嵌套,1 2 3 4 5 6 7 8 9,-,1,2 4,3 6 9,4 8 12 16,5 10 15 20 25,6 12 18 24 30 36,7 14 21 28 35 42 49,8 16 24 32 40 48 56 64,9 18 27 36 45 54 63 72 81,行循环中包含列循环,问题:,5.2.1,switch,语句格式,输出下三角形乘法九九表,例,1 2 3 4 5 6 7 8 9,-,1,2 4,3 6 9,4 8 12 16,5 10 15 20 25,6 12 18 24 30 36,7 14 21 28 35