第3章分支结构程序设计.ppt
第3章,信息学院计算机基础组,分支结构程序设计,1.条件分支if语句ifelseIfifelse if三种形式。2.开关分支switch语句,本章主要内容:,3.1 引例,例3-1 有一个函数,定义如下:,程序代码如下:include void main()float x,y;printf(“Please input x:”);scanf(“%f”,/*输出函数值*/,3.1 引例,例3-2 输入三角形的三条边长,求三角形面积。,程序代码如下:#include#includevoid main()float a,b,c,s,area;printf(”请输入三角形的三条边 a,b,c:);scanf(%f,%f,%f,/*判断能否构成三角形*/if(a0&b0&c0&a+bc&a+cb&b+ca),接下页,3.1 引例,例3-2 输入三角形的三条边长,求三角形面积。,程序代码如下:/*条件成立,以下复合语句求面积并输出结果*/s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%7.2f b=%7.2f c=%7.2fn,a,b,c);printf(s=%7.2f area=%7.4fn,s,area);else/*条件不成立,输出相关信息*/printf(此三条边不能构成三角形!n);,3.2关系运算和逻辑运算,3.2.1 关系运算,3.2.2 逻辑运算,3.3 if 语句,3.3.1 ifelse形式,Ifelse分支结构一般形式为:if(表达式)语句1;else语句2;,执行过程为:先计算表达式的值,若表达式结果为“真”,则执行语句1;否则(表达式为“假”),执行语句2。,例3-3 输入一个整数,判断该数是奇数还是偶数。,程序代码如下:#includevoid main()int x;printf(“请输入:”)scanf(“%d”,3.3.1 ifelse形式,例3-4 输入两个整数,将较大的数输出。,程序代码如下:#includevoid main()int a,b;printf(“n Please input a,b:”);scanf(“%d,%d”,3.3.1 ifelse形式,运行结果:Please input a、b:100,99max=100,例3-5 输入两个数,按数值由小到大的次序输出这两个数。,程序代码如下:#includevoid main()float a,b,t;scanf(“%f,%f”,3.3.1 ifelse形式,3.3 if 语句,3.3.2 if形式,If分支结构一般形式为:if(表达式)语句1;,执行过程为:先计算表达式的值,若表达式结果为“真”,则执行语句1;否则什么都不做,跳过语句1。,例3-6 输入一个字符,判断该字符是否为英文字母。,程序代码如下:#includevoid main()char ch;printf(“n Please input ch:”);scanf(“%c”,3.3.2 if形式,运行结果:Please input ch:mYes!,例3-7 若输入一个整数是非零数,则显示“OK!”,否则什么也不显示。,程序代码如下:#includevoid main()int a;printf(“n Please input a:”);scanf(“%d”,3.3.2 if形式,练习3-3:判断输入的数据是否介于0 和100 之间。如果该数不在此范围内,输出“Error score!”。如果该数在此范围内,不输出。,在Ifelse分支语句中还包括另外的其它if语句,则称为嵌套的if语句。其结构形式为:,3.3.3 if语句的嵌套,if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;,例3-8 任意输入三个整数,求其中最大的数。,3.3.3 if语句的嵌套,例3-8 任意输入三个整数,求其中最大的数。,3.3.3 if语句的嵌套,程序代码如下:#includevoid main()int x,y,z,max;printf(“n Please input x,y,z:”);scanf(“%d%d%d”,例3-9 写程序,输入某年的年份,判断此年是否闰年。,3.3.3 if语句的嵌套,#includevoid main()int year,flag;printf(“n 请输入年份:”);scanf(%d,例3-10 有一个函数,定义如下:,3.3.3 if语句的嵌套,程序代码如下:#includevoid main()float x,y;scanf(“%f”,3.3.3 if语句的嵌套,注意:1.else子句不能作为语句单独使用,它必须与if配对使用。2.为使程序结构清晰、层次分明,常常采用程序行缩进的书写格式,if 和其对应的else写在一列上。但,书写格式不能代替逻辑结构。3.if 和 else 的配对关系。一个 else 总是与其上面距它最近的,并且没有其它 else 与其配对的 if 相配对。,if(表达式1)if(表达式2)语句1;else if(表达式3)语句3;else 语句4;,if(表达式1)if(表达式2)语句1;else;else if(表达式3)语句3;else 语句4;,3.3.4 ifelse if形式,Ifelse if分支结构一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式n-1)语句n-1;else 语句n;,执行过程是:先判断表达式1如果为“真”,则执行语句1,然后退出该if结构;否则(表达式1为“假”)再判断表达式2,若成立,则执行语句2,然后退出该if结构;,3.3.4 ifelse if形式,例3-11 输入三角形的三条边长,判断它们能否构成三角形。若能,再判断是何种三角形(等腰三角形、等边三角形、一般三角形)。,#include#includevoid main()float a,b,c;scanf(%f,%f,%f,3.3.4 ifelse if形式,例3-12 学生成绩分A、B、C、D、E 五等。任输入一个百分制成绩,判断它属于哪一等,其中分数在90100分为A,8089分为B,7079分为C,6069分为D,059分为E,其他数据显示出错信息。,#includevoid main()float score;printf(nEnter a score:);scanf(%f,3.3.5 条件运算符及条件表达式,if(xy)max=x;else max=y;,max=(xy)?x:y;,条件表达式的一般形式为:表达式1?表达式2:表达式3,说明:1.条件运算符由?和:组成,唯一三目运算符,运算级为13。2.执行顺序:先求表达式1,若为真(非0),以表达式2的值作为整个条件表达式的值,否则,以表达式3的值作为整个条件表达式的值。3.条件运算符优先于赋值运算符,3.4 switch 语句,switch 分支语句一般形式为:switch(表达式e)case 常量表达式c1:语句1;break;case 常量表达式c2:语句2;break;case 常量表达式cn:语句n;break;default:语句n+1;break;,3.4 switch 语句,例3-13 观察程序执行过程。,void main()int x;scanf(“%d”,3.4 switch 语句,例3-13 观察程序执行过程。,说明:1.switch后面括号内的表达式可以是整型、字符型或枚举类型。2.当表达式的值与某一个case后面的常量表达式值相等时,就执行此case后面的语句;若所有case后面的值没有与之相匹配的,就执行default后面的语句。3.各个case的出现次序不影响执行结果。4.多个case可以共用一组执行语句。5.break语句使控制退出switch结构。,3.4 switch 语句,例3-14 上节中的例3-12重新使用switch语句来完成。,include void main()int e,grade;printf(input grade(0-100):);scanf(%d,3.4 switch 语句,例3-15 编写一个实现两个操作数四则运算的程序。,include void main()int a,b,c;char op;printf(“请输入操作数和操作符:”);scanf(“%d%c%d”,