1、第4章 分支结构的程序设计第4章 分支结构的程序设计本章重点if语句的三种形式if语句的应用ifelse语句的应用ifelse if语句的应用switch语句的程序流程4.1 if语句的应用if语句形式之一if(表达式) 语句块图4.1 if语句流程图例4.1:从键盘输入一批数,统计正数的和,当输入0时程序结束。 分析问题:通过循环输入整数,假设输入变量为x;然后要判断该数是否为0,如果不为0,再判断值是否大于零,如果大于零,加入和。 #includeint main( ) int x,sum=0; scanf(%d,&x); for( ; x ; scanf(%d,&x) if(x0) su
2、m=sum+x; printf(正数总和为:%dn,sum); return 0;4.2 ifelse语句的应用if语句形式之二if(表达式)语句块1else 语句块2图4.4 ifelse语句流程图 例4.3:判断从键盘输入的数是正数还是负数,输入数0结束程序运行。分析问题:数从键盘输入,输入的数如果大于0则输出“输入的数是正数”,如果是小于0则输出“输入的数是负数”,如果是等于0,则程序运行结束。 流程图如图4.5所示。图4.5 程序流程图 #include int main() int x=1; printf(n请输入一整数(输入0程序退出):); scanf(%d,&x); while
3、(x) if(x 0) printf(输入的数%d是正数.n,x); else printf(输入的数%d是负数.n,x); printf(n请输入一整数(输入0程序退出):); scanf(%d,&x); return 0;例4.4:从键盘输入10个整数,把所有的正数相加以及所有的负数相加,最后输出所有正数的和,以及所有负数的和。分析问题:要从键盘输入十个整数,所以采用循环结构,输入的数分正数和负数,各进行累加。流程图如图4.6所示。图4.6 流程图#include int main() int nsum=0,n=0,psum=0,p=0; /*nsum负数累加值,n负数个数,psum正数累
4、加值,p正数个数(0作为正数)*/ int i,x; /* i 用于控制循环次数,x用户存储输入的数*/ for(i=1;i=0) psum+=x; p+; else nsum+=x; n+; printf(n有%d个正数,和为:%dn有%d个负数,和为:%dn,p,psum,n,nsum); return 0;4.3 ifelse if 语句的应用if语句形式之三 if(表达式1) 语句块1 else if(表达式2) 语句块2 else if(表达式n-1) 语句块n-1 else 语句块n 功能:从上到下依次判断表达式的值,当出现某个值为真(非0)时,执行与其相对应的语句,并跳过其余条件
5、的判别;如果所有的表达式均为假(0),则执行语句n。程序流程图如图4.7所示。图4.7 ifelse if流程图例4.5:从键盘输入一个数给x,然后判断该变量是否大于零,若大于零的话,则输出一行文字说明该变量是正数,否则的话再判断变量x的值是否为零,若为零的话,则输出一行文字说明该变量是零,否则的话则x的值是负数,输出一行文字说明该变量是负数。分析:输入的数分三种情况:正数、负数、零。流程图如图4.8所示。图4.8流程图编译程序及运行 #include int main() int x; printf(输入一数值:); scanf(%d,&x); if(x 0) printf(x是正数.n);
6、 else if(x = 0) printf(x是零.n); else printf(x是负数.n); return 0;4.4 if嵌套语句的应用 if语句的嵌套是指if语句中又包含了一个或多个if语句。上一节介绍的if-else if结构也是if语句的嵌套结构。例4.6:编写一个程序,由键盘输入三个整数作为三角形的三条边,判断是否能构成一个三角形,如能并判断是等边三角形、等腰三角形、直角三角形,还是其它一般的三角形。 分析问题:设三个整数分别为:a、b、c,构成三角形的条件为:a+bc&a+cb&b+ca构成等边三角形的条件为:a=b&b=c;构成等腰三角形的条件为:a=b|b=c|a=c
7、。构成直角三角形的条件为:a*a+c*c=b*b|a*a+b*b=c*c|c*c+b*b=a*a。编译程序及运行步骤1:在Visual C+环境下新建文件可用开始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,输入文件名4-6.c步骤2:在4-6.c文件中输入以下完整的源程序。#include int main() int a,b,c; printf(请输入第1条边:); scanf(%d,&a); printf(请输入第2条边:); scanf(%d,&b); printf(请输入第3条边:); s
8、canf(%d,&c); if( a+bc&a+cb&b+ca) printf(能构成一个三角形n); if (a=b&b=c) printf(能构成一个等边三角形n); else if(a=b|b=c|a=c) printf(能构成一个等腰三角形n); else if(a*a+c*c=b*b|a*a+b*b=c*c|c*c+b*b=a*a)printf(能构成一个直角三角形n); else printf(能构成一个一般的三角形n); else printf(不能构成一个三角形n); return 0;4.5 switch的应用 switch语句格式:switch(表达式) case 常量表达
9、式1: 语句序列 break; case 常量表达式2: 语句序列 break; case 常量表达式n; 语句序列n break; default: 语句序列n+1 图4.9 语句执行的流程图例4. 求执行下列程序段后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;最后k。例4. 输入一个字符,如果是Y、N或y、n,则分别执行一输出语句;
10、如果是其他字母则执行另一输出语句。程序如下所示: #includevoid main()char ch;printf( please input Y/N(y/n) :);scanf(%c , &ch);switch (ch)case y: case Y: printf(n this is Y or y.n);break;case n: case N: printf(n this is N or n.n);break;default:printf(n this is other char.n);例4. 编写程序,实现如下功能:输入一个实数后,屏幕上显示如下菜单:1输出相反数2输出平方数3输出平方
11、根4退出输入1,输出该数的相反数;输入2,输出该数的的平方数;输入3,输出该数的的平方根;输入4 退出此程序。输入14之外的数,显示“请输入14之间的数字”。 分析:此题涉及多个菜单的选择,因此用到多分支结构switch,switch可以不同条件实现不同的程序块,如此题中输入数字1,则执行输出相反数的程序块。图4.10 菜单选择流程图#include #include int main() int i; float m; int c=5; printf(输入任意一个整型数:n ); scanf(%f,&m); printf(*n); printf(1.输出相反数n); printf(2.输出平方数n); printf(3.输出平方根n);printf(4.退出n); printf(*n); while(1) scanf(“%d”,&c); switch(c) case 1:printf(输出相反数:%fn,-m);break; case 2:printf(输出平方数:%fn,m*m);break; case 3:printf(输出平方根:%fn,sqrt(m);break; case 4:break; default:printf(请输入14之间的数字!n); if(c=4) break;