资源描述:
《c语言教案第7讲.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7讲switch语句及选择结构的程序设计举例教学目的与要求:掌握if语句的嵌套和swicth语句的使用掌握选择结构的程序设计教学内容提要:1、if语句的嵌套2、swicth语句3、选择结构的程序设计举例教学重点:if语句的嵌套和swicth语句的使用教学难点:选择结构的程序设计教学进度:P103~P109教学过程:语句含义:语句形式:当if语句中又包含另一个if语句时,则构成了if语句嵌套的情形。1、if语句的嵌套if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;1、if语句嵌套语句执行流程:el
2、se与if的配对原则:就近一致原则:else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。真(非0)语句2假(0)表达式2语句1语句4假(0)真(非0)表达式1假(0)真(非0)表达式3语句3例1:解方程:ax2+bx+c=0。从代数知识可以知道:⑴若b2-4ac>0有两个不等的实根⑵若b2-4ac=0有两个相等的实根⑶若b2-4ac<0有两个虚根程序为:#include#includevoidmain(){floata,b,c,disc,x1,x2,realpart,imagpart;scanf
3、("%f,%f,%f",&a,&b,&c);printf("theequation");if(fabs(a)<=1e-6)b=0输出“无解”输出单根:x=-c/b假真disc<0输出两复数根输出两实根真假a=0真假disc=b*b-4*a*cprintf("isnotaquadratic");else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("hastwoequalroots:%8.4f",-b/(2*a));elseif(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=
4、(-b-sqrt(disc))/(2*a);printf("hasdistinctrealroots:%8.4fand%8.4f",x1,x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots∶");printf("%8.4f+%8.4fi",realpart,imagpart);printf("%8.4f-%8.4fi",realpart,imagpart);}}}2、条件运算符?:若if语句中,在表达式为“真”和“假”时,且都只执行
5、一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句:if(a>b)max=a;elsemax=b;可以用下面的条件运算符(?:)来处理:max=(a>b)?a:b;其中”(a>b)?a:b”是一个“条件表达式”。它是这样执行的:如果(a>b)条件为真,则条件表式取值a,否则取值b.条件运算符要求有三个操作对象,称三目(元)运算符。条件表达式的一般形式为表达式1?表达式2:表达式3它的执行过程见图。表达式1表达式2表达式3T(1)F(0)例2输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。
6、然后输出最后得到的字符。main(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c",ch);}条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句(且两个分支都给同一个变量赋值)时才能代替if语句;下面的if语句就无法用一个条件表达式代替。if(a>b)printf(“%d”,a);elseprintf(“%d”,b);但可以用下面语句代替:printf(”%d”,a>b?a:b);即将条件表达式的值输出。注意:2、switch语句1、语句形式:
7、switch(表达式){case常量1:语句1;case常量2:语句2;case常量3:语句3;.......case常量n:语句n;default:语句n+1;}根据表达式的不同值,选择不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号注意:各个case的出现次序不影响执行结果,执行完一个case后面的语句后,流程控制转到下一个case继续执行。case后面的常量表达式只是起语句标号作用,并不是在该处进行条件判断;根据switch后面表达式的值找到匹配的
8、入口标号开始执行下去,不再进行判断。例3:根据输入成绩来判断成绩的等级。例3,根据考试成绩的等