if选择结构程序设计课件.ppt
第四章 选择结构程序设计,宋秀琴内蒙古科技大学,第四章 选择结构程序设,选择结构程序,程序的流程由多路分支组成,在程序的一次执行过程中,根据不同的情况,只有一条支路被选中执行,而其它分支上的语句被直接跳过。,选择结构程序 程序的流程由多路分支组成,在,在C语言中选择是用if语句和系统提供的switch语句实现的。,在C语言中选择是用if语句和系统提供的sw,4.1 if语句的两种形式,1、 if(表达式)语句2、 if (表达式) 语句1 else 语句 2 简称 if-else双分支,单分支,4.1 if语句的两种形式1、 if(表达式),4.1.1 if (表达式)语句,格式:if (表达式) 语句 功能:当表达式的值为1(真)时执行语句,表达式的值为0(假)时跳过(不执行)语句。 表达式为:常量表达式、关系表达式、逻辑表达式等,4.1.1 if (表达式)语句,流程图,流程图表达式 语句假真,例如:从键盘输入一个正数则输出 “这是正数”。输入一个零或负数则不输出任何信息。,#includemain() int a; scanf(“%d”,a0,输出这是正数,结束,真,假,例如:从键盘输入一个正数则输出 “这是正数”。输入一个零或负,例1:输入两个正整数,输出其中较大的数。,#include main() int a,b,max; scanf(“%d,%d”,maxb,真,max=b,假,例1:输入两个正整数,输出其中较大的数。 #include,例2:从键盘输入一个字符,判断是否英文字母,是输出yes,不是英文字母不输出任何信息。,问题的关键是If 条件的设置变量c满足英文字母的条件是 a到z 或A到Z用表达式 c=a & c=A & c=Z,例2:从键盘输入一个字符,判断是否英文字母,是输出yes,不,程序,#include main() char c; c=getchar(); if(c=a ,c=a & c=A & c=Z,printf(“yes”),真,假,程序#includec=a & c,4.1.2 if else格式,格式 if (表达式) 语句1 else 语句2,功能:当表达式的值为1时执行语句1而不执行语句2,当表达式的值为0时执行语句2,而不执行语句1, 不要认为当表达式的值为1时执行语句1,执行完语句1接着执行语句2。,称为双分支选择结构,4.1.2 if else格式格式功能:当表达式的值为,流程图,假,只执行一条语句,流程图 表达式 语句1 语句2真假只执行一条语句,例3 输出两个数中较大数(上例),if(ab) max=a; else max=b;,if(ab) printf(“%d”,a); else printf(“%d”,b);,ab,max=a,max=b,真,假,例3 输出两个数中较大数(上例) if(ab) max,例4:从键盘输入一个字符,判断是否英文字母,是输出yes,不是英文字母输出no。(上例),#include main() char c; c=getchar(); if(c=a ,例4:从键盘输入一个字符,判断是否英文字母,是输出yes,不,两种if结构的比较,#include main() char c; c=getchar();if(c=a ,#include main() char c; c=getchar(); if(c=a ,两种if结构的比较#include#inc,说明:,if 和else 后边默认的只能识别一条语句,如有两条语句需要同时执行时要加一个花括号 组成一条复合语句,否则只能执行一条单语句。,说明: if 和else 后边默认的只能识别一条语句,如,例5 求分段函数的值,x+5 x0 y= x-5 x=0,条件的设置 x0,X0,Y=x+5,Y=x-5,真,假,例5 求分段函数的值 x+5,程序,#include main() float x,y; scanf(%f, ,复合语句,复合语句,程序 #include复合语句复合语句,课堂练习:从键盘输入两个数,按着由小到大的顺序输出,问题的关键:如果ab,交换a和b的值。否则不用交换。,课堂练习:从键盘输入两个数,按着由小到大的顺序输出 问题的,4.3 条件表达式与if 语句,当if语句中表达式为真或为假时都给同一个变量赋值时,可以用条件表达式表示。 max=(ab)?a:b 或 y=(x0) ?(x+5) : (x-5);,4.3 条件表达式与if 语句 当if语句中表达式,4.4 if 语句的嵌套,If语句中可以是任何合法的语句,也可以是if语句,当if语句中再有if语句称为if语句的嵌套。if 语句的嵌套有两种格式 (1)在if子句中嵌套 (2)在else子句中嵌套,4.4 if 语句的嵌套If语句中可以是任何合法的语句,4.4.1 if 子句中嵌套,格式1 if (表达式1) if(表达式2) 语句1 else 语句2 else 语句3 格式2 if (表达式1) if(表达2) 语句1 else 语句2 不可少, 内嵌的if中不带else,内嵌,4.4.1 if 子句中嵌套格式1 if (表达,表达式1,表达式2,语句1,语句2,语句3,真,真,假,假,结束,表达式1表达式2语句1语句2语句3真真假假结束,格式1: if(表达式1) 语句1 else if(表达式2) 语句2 else 语句3格式2: if(表达式1) 语句1 else if(表达式2) 语句2,4.4.2 else 子句中嵌套,格式1:4.4.2 else 子句中嵌套,表达式1,表达式2,语句2,语句3,语句1,真,真,假,假,结束,表达式1表达式2语句2语句3语句1真真假假结束,例6:求分段函数的函数值,y=,1 (x0),0 (x=0),-1 (x0),条件的合并:x=0,例6:求分段函数的函数值1 (x0)0 (x=0)-,程序,main() int x,y; scanf(“%d”, ,程序 main()x=0 x0y=1y=0y=-,y=条件合并为x=0,例7:求分段函数的函数值,1 (x0),0 (x=0),-1 (x0),例7:求分段函数的函数值1 (x0)0 (x=0)-,main() int x,y; scanf(“%d”,main()X0X=0 y=0 y=-1 y=1真真,注意:,1、内嵌的子句以缩进两个字符格式输入。2、C语言中else 总是与它 上面最近的if语句配对。所以在if子句中内嵌的if语句如果没有else,则一定把内嵌的if语句用括起来。 if( ) if () else 3、一般在else 子句中内嵌的if无论有无else 子句都不会产生二义性。尽量在else中嵌套。,注意:1、内嵌的子句以缩进两个字符格式输入。,练习:从键盘输入学生成绩,如果=90输出“优秀”,6089输出“良好”,=60输出“不及格”,#include main() float s ; printf(“请输入学生成绩:n); scanf(%f,练习:从键盘输入学生成绩,如果=90输出“优秀”,608,4.4.3 多分支选择结构,当多条件中选择一种操作时用 if (表达式1)语句1 else if(表达式2)语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,简称为 if else if else,4.4.3 多分支选择结构 当多条件中选择一种操作,功能:当前面条件为假时,检测后边的条件,当前面条件为真时不检测后边的条件。因此多条件中只有一个为真时,只执行一个操作。不要以为前面条件为真还检测后边的条件,这样就是实现多操作了。 应该是多条件中只有一个是真,只执行一个操作。,格式: if (表达式1) 语句1 else if(表达式2) 语句2 else if (表达式3) 语句3 else if(表达式n) else 语句n,功能:格式:,流程图,真,真,真,真,假,假,假,流程图表达式1表达式2语句2语句1表达式3语句3表达式n,例8,从键盘输入学生百分制成绩,输出相应的等级。 如果90分以上输出“优秀!”; 8089分输出“良好!”;7079分输出“中等!”;6069分输出“及格!”; 60分以下输出“不及格”。 分析:多条件中选一个。,例8 从键盘输入学生百分制成绩,输出相应的等级。,程序,main() float s; printf(“n input s:”); scanf(“%f”, ,条件进一步简化 s=80 & s=80,程序 main()条件进一步简化 s=80 & s,课堂练习,从键盘输入一个学生等级成绩,成绩A输出“=90”;成绩B输出“8089”;成绩C输出“7079”;成绩D输出“6069”;否则输出“60”。,课堂练习从键盘输入一个学生等级成绩,成绩A输出“=90”;,例9:从键盘输入三个整数,按着由大到小的顺序输出来。,main() int a,b,c,t; scanf(“%d%d%d”, ,a中是最大数,b中是中数,c是最小数,不能使用if else if,例9:从键盘输入三个整数,按着由大到小的顺序输出来。 m,例如:从键盘输入一个年份,判断是否闰年,闰年的条件是1、年份能被4整除但不能被100整除,2、年份能被4整除同时也能被400整除。满足其中一个条件时这个年份是闰年。,main( ) int year; scanf(“%d”, ,例如:从键盘输入一个年份,判断是否闰年,闰年的条件是1、年,例如:某商场销售商品,实行按比例优惠,优惠率 如下,货款在某200元以下不优惠,200元以上优惠7。5%,300元以上优惠10%,400元以上优惠15%,500元以上优惠20%。求应付货款。,Main() float num,cost; scanf(“%f”,例如:某商场销售商品,实行按比例优惠,优惠率 如下,货款在,例:征税问题:价格高于10000元的税率为5%,高于5000元税率为3%,高于1000元税率为2%,低于1000元不征税。请输入货物价格,输出税金。,提示:各段采用不同税率进行征收。 如:贷款为53000元,其中43000元以上按5%征收,高于5000元按3%征收,高于1000元按2%,1000元以下不征税,例:征税问题:价格高于10000元的税率为5%,高于5000,#include main() float price,tax=0; printf(“input price:n”); scanf(“%f”,#include,上例:如果不分段征税,如高于10000元的都按5%,高于5000元都按3%,高于1000元都按2%征收。,main() float price,tax; scanf(“%f”, ,上例:如果不分段征税,如高于10000元的都按5%,高于,从键盘输入一个字符,判断它是英文?数字?空格?其他字符?并输出相应信息。,从键盘输入一个字符,判断它是英文?数字?空格?其他字符?并输,