资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章,分支结构的程序设计,Company Logo,本章重点 if语句的三种形式 if嵌套语句的应用 if语句的应用 switch语句的程序流程 ifelse语句的应用 switch语句的使用形式 ifelse if语句的应用 switch语句的应用,Company Logo,本章难点 ifelse if的使用 if嵌套语句的使用 if语句与循环语句的联合使用 switch语句的程序流程 switch语句的应用 嵌入到循环中的switch语句的使用,Company Logo,4.1 if语句的应用,在现实生活中,每天都会根据实际情况进行某种选择。例如,早上去教室上课,如果出门时下雨的话,就撑一把雨伞去教室。也就是说,人会根据条件进行行为选择。而计算机也会根据不同情况做出各种逻辑判断,进行一定的选择。在C语言程序设计中,这样的选择通常是通过if语句实现的。if语句的作用是使程序在运行过程中,根据判断指定的条件是否满足来决定是否执行某种操作。if语句的运用能使程序针对不同情况作不同的处理,增加了程序的灵活性。if语句是一种选择结构,它的基本形式有三种,下面分别进行介绍。,Company Logo,if语句形式之一。 用法:if(表达式) 语句块 功能:如果表达式为“真”(非0),则执行语句;否则,执行if后面的语 句。程序流程图如图4.1所示。,注意:if表达式后不要用分号,表达式要用圆括号,如果要执行的语 句不止 一条,而是多条语句,这时需要把这多条语句用“ ” 括起来,组成 复合句或语句块。初学者对此很容易犯错。,图4.1 if语句流程图,Company Logo,【例4.1】 从键盘输入一批数,统计正数的和,当输入0时程序结束。,分析:通过循环输入整数,假设输入变量为x;然后要判断该数是否为0, 如果不为0,再判断值是否大于零,如果大于零,加入和。流程图如图4.2所示。,编辑源程序代码4-1.c:,#include int main( ) int x,sum=0; scanf(“%d“, ,Company Logo,图4.2 程序流程图,编译程序4-1.c,并执行程序,程序执行后在屏幕上输出: 2 4 -5 8 0 9 正数总和为:14,注意:当输入的数小于等于0 时,程序无任何动作。,Company Logo,定义一字符变量ch并从键盘读入,如为小写字母,则转化为大写字母后输出,否则什么也不做,程序结束。,提示:判断是否为小写字母可写为: (ch=a,Company Logo,【例4.2】 假设要输入某个学生8门课程的成绩,如果输入某课程的成绩大于等于85分,则输出“该课程成绩秀!”,同时输出目前已经有几门课程成绩优秀了。最后,输出该学生的总分和平均分。,分析:要输入8门课程的成绩,所以要用到循环结构;根据输入的成绩是否大于等于85分来确定总分是否输出成绩优秀,因此,在for语句中还要使用if语句。,程序的执行过程中,给变量分配存储空间,循环开始,输入一门课的成绩,判断输入的成绩是否大于等于85,如果是大于等于85,输出“成绩优秀!”,并且累计优秀课程门数和输出优秀课程数,再判断循环条件,最后输出总分和平均分。,Company Logo,流程图如图4.3所示。,图4.3 程序流程图,Company Logo,编辑源程序代码4-2.c:,点击查看代码,Company Logo,编译程序4-2.c,并执行程序,程序执行后在屏幕上输出: 请输入第1门课成绩:78,请输入第2门课成绩:90,该课程成绩优秀! 累计1门课程成绩优秀! 请输入第3门课成绩:66,请输入第4门课成绩:85,该课程成绩优秀! 累计2门课程成绩优秀! 请输入第5门课成绩:79,请输入第6门课成绩:98,该课程成绩优秀! 累计3门课程成绩优秀! 请输入第7门课成绩:56,请输入第8门课成绩:72,该学生8门课程总分:624.0 平均分:78.0,Company Logo,1. 上例若把if(cj=85)后的“ ”去掉,程序执行的结果会怎样? 2. 变量avg是否可以省略?,Company Logo,上机操作与练习1,1. 输入若干整数,把正数相加,当输入0时结 束,最后输出正数的和。 2. 定义一字符变量ch,并从键盘连续读入,如为 小写字母,则转化为大写字母后输出,否则什 么也不做,直到输入回车,程序结束。,Company Logo,4.2 ifelse语句的应用,if语句形式之二。 用法: if(表达式) 语句块1 else 语句块2,功能:如果表达式的结果为“真”(非0),则执行语句块1;否则,执行语句块2。 流程图如图4.4所示。,图4.4 ifelse语句流程图,Company Logo,【例4.3】 判断从键盘输入的数是正数还是负数,输入数0结束程序运行。,分析:数从键盘输入,输入的数如果大于0,则输出“输入的数是正数”;如果小于0,则输出“输入的数是负数”;如果等于0,则程序运行结束。,流程图如图4.5所示。,编辑源程序代码4-2.c:,#include int main() int x=1; printf(“n请输入一整数(输入0程序退出):“); scanf(“%d“, ,Company Logo,图4.5 程序流程图,编译程序4-3.c,并执行程序,程序执行 后在屏幕上输出:,请输入一整数(输入0程序退出):9,输入的数9是正数. 请输入一整数(输入0程序退出):-8,输入的数-8是负数. 请输入一整数(输入0程序退出):0,Company Logo,上机操作与练习2,从键盘输入若干整数,当输入0时结束,求所有偶数的和。,【例4.4】 从键盘输入10个整数,把所有的正数相加以及所有的负数相加, 最后输出所有正数的和以及所有负数的和。,分析:要从键盘输入10个整数,所以采用循环结构;输入的数分正数和负数,各进行累加。流程图如图4.6所示。,Company Logo,图4.6 流程图,Company Logo,编辑源程序代码4-4.c:,点击查看代码,Company Logo,编译程序4-4.c,并执行程序,程序执行后在屏幕上输出:,请输入10整数中的第1个数:9,请输入10整数中的第2个数:87,请输入10整数中的第3个数:-8,请输入10整数中的第4个数:2,请输入10整数中的第5个数:-534,请输入10整数中的第6个数:34,请输入10整数中的第7个数:-1,请输入10整数中的第8个数:34,请输入10整数中的第9个数:99,请输入10整数中的第10个数:0,有7个正数,和为:265 有3个负数,和为:-543,Company Logo,1. 定义两个整型变量x、y,并从键盘读入一个整型数给x,如此数大于等于0,把此数的平方赋给y;否则,把此数的绝对值赋给y。 提示:可用如下程序段: if(x=0) y=x*x; else y=-x; 2. 定义三个实型变量x、y和z,并从键盘读入,求出这三个数中的最小值。,Company Logo,4.3 ifelse if 语句的应用,if语句形式之三。 用法: if(表达式1) 语句块1 else if(表达式2) 语句块2 else if(表达式n-1) 语句块n-1 else 语句块n,功能:从上到下依次判断表达式的值,当出现某个值为真(非0)时,执行与其相对应的语句,并跳过其余条件的判别;如果所有的表达式均为假(0),则执行语句n。,Company Logo,流程图如图4.7所示。,图4.7 ifelse if流程图,Company Logo,【例4.5】 从键盘输入一个数给x,然后判断该变量是否大于零;若大于零,则输出一行文字说明该变量是正数;否则判断变量x的值是否为零,若为零,则输出一行文字说明该变量是零;否则,x的值是负数,输出一行文字说明该变量是负数。,分析:输入的数分三种情况:正数、负数和零。流程图如图4.8所示。 编辑源程序代码4-5.c:,#include int main() int x; printf(“输入一数值:“); scanf(“%d“, ,Company Logo,图4.8 流程图,Company Logo,4.4 if嵌套语句的应用,if语句的嵌套是指if语句中又包含了一个或多个if语句。上一节介绍的ifelse if结构也是if语句的嵌套结构。,【例4.6】 编写一个程序,由键盘输入三个整数作为三角形的三条边,判断是否能构成一个三角形;如能构成一个三角形,则判断是等边三角形、等腰三角形、直角三角形还是其他一般的三角形。,分析:设三个整数分别为a、b和c,构成三角形的条件为a+bc&a+cb&b+ca; 构成等边三角形的条件为a=b&b=c;构成等腰三角形的条件为a=b|b=c|a=c;构成直角三角形的条件为a*a+c*c=b*b|a*a+b*b=c*c|c*c+b*b=a*a。,Company Logo,编辑源程序代码4-6.c:,点击查看代码,Company Logo,4.5 switch的应用,用if-else-if或多重嵌套if语句可以实现多分支选择,但程序冗长,可读性差。C语言提供了switch语句,专门处理多分支选择,使程序结构简洁、清晰。,switch语句格式如下:,switch(表达式) case 常量表达式1: 语句序列 break; case 常量表达式2: 语句序列2 break; case 常量表达式n: 语句序列n break; default: 语句序列n+1 ,Company Logo,当执行switch语句时,首先计算紧跟其后一对括号中的表达式的值,然后在switch语句体内寻找与该值吻合的case标号,如果有与该值相等的标号,则执行该标号后开始的各语句,包括在其后的所有case和default中的语句,直到break语句或switch语句体结束;如果没有与该值相等的标号,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束;如果没有与该值相等的标号,且不存在default标号,则跳过switch语句体,什么也不做。流程图如图4.9所示。,Company Logo,注意: 1)switch、case、default是关键字。 2)switch语句后面用花括号括起来的部分称为switch语句体。 3)switch的表达式可以是整型表达式、字符型表达式、枚举型表达式等。 4)case中常量表达式的类型必须与switch的表达式类型相同,各case语句标号的值应该互不相同。 5)default代表所有case标号之外的那些标号,default标号可以出现在语句体中任何标号位置上,在switch语句体中也可以没有default标号。 6)每个选择支路都以case开头,case的标号后要有“;”,每个支路后可以有多个 语句。 7)必要时,case语句标号后的语句可以省略不写。 8)在关键字case和常量表达式之间一定要有空格。例如,case 10:不能写成case10:。,Company Logo,图4.9 语句执行的流程图,Company Logo,【例4.8】 求执行下列程序段后k的值。,char c=2;int k; switch(c+1-0) case 2:k+=1; case 2+1:k+=2; case 4:k+=3; ,分析:switch中表达式的值为3,从case 2+1入口,执行语句k+=2;得k=3,由于此语句后无break;语句,继续执行case 4后语句k+=3;最后得k66。,Company Logo,【例4.9】 求执行下列程序段后k的值。,char c ; int k2; scanf(“%
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号