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