1 / 16

第 5 讲 分支结构程序设计

第 5 讲 分支结构程序设计. 计算机与通信工程学院. 第 5 讲 分支结构程序设计. 本讲主要内容: 一、 if 语句的综合应用 二、 switch 语句的综合应用 三、 goto 语句及其综合应用. 学习目的与要求: —— 熟练掌握 if 语句和 switch 语句的使用方法; —— 了解 goto 语句的作用。 学习重点: if 语句和 switch 语句的使用方法。 学习难点: 分支结构条件及 switch 语句表达式的构造技巧。. 0. 表达式. 非 0. 0. 语句组. 表达式 1. 非 0. 0. 表达式 2.

kalil
Download Presentation

第 5 讲 分支结构程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5讲 分支结构程序设计 计算机与通信工程学院

  2. 第5讲 分支结构程序设计 本讲主要内容: 一、 if 语句的综合应用 二、 switch 语句的综合应用 三、 goto语句及其综合应用 学习目的与要求: ——熟练掌握if语句和switch语句的使用方法; ——了解goto语句的作用。 学习重点:if语句和switch语句的使用方法。 学习难点:分支结构条件及switch语句表达式的构造技巧。

  3. 0 表达式 非0 0 语句组 表达式1 非0 0 表达式2 非0 0 表达式3 非0 0 表达式4 非0 0 表达式 非0 语句组1 语句组2 语句组3 语句组4 语句组5 语句组2 语句组1 if(表达式) {语句组1} else {语句组2} 复习:if语句的三种形式 if(表达式) {语句组} 1.if 语句的一般形式 2.if 语句的简单形式 if(表达式1) {语句组1} else if(表达式2) {语句组2} …… else if(表达式n) {语句组n} else {语句组n+1} 3.if-else if结构 简单if语句逻辑结构 一般if语句的逻辑结构 注意:语句组的含义是 可以包含有多条语句, 但必须使用{ }括起来。 整体上作为一条语句 使用。 if-else if语句的逻辑结构

  4. 一、if 语句的的综合应用 例4-3:求一元二次方程ax2+bx+c=0的实根解(设a≠0)。 补充例题:输入任意三个数,按由大到小顺序排列输出。 例4-11:闰年判断程序。 例4-12:学生成绩分等显示程序。学生有数学、英语两门课。按百分制考核。要求输入各门课成绩,按平均成绩分等显示:excellence(优秀):平均成绩≥90; all right(良好):80≤平均成绩<90; middling(中等):70≤平均成绩<80; pass(及格): 60≤平均成绩<70; fail(不及格): 平均成绩<60。 返回

  5. 开始 输入a,b,c d=b*b-4*a*c No d≥0 Yes 计算实根x1,x2 输出x1,x2 结束 例4-3 求一元二次方程ax2+bx+c=0的实根解(设a≠0)。 #include "math.h" main() {float a,b,c; float x1,x2,d; printf("Please Input a,b,c: "); scanf("%f,%f,%f",&a,&b,&c); d=b*b-4*a*c; if(d>=0) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%f,x2=%f",x1,x2); } } 扩充到复数根 例4-3程序流程图 返回

  6. #include "math.h" main() {float a,b,c; float x1,x2,d; printf("Please Input a,b,c: "); scanf("%f,%f,%f",&a,&b,&c); d=b*b-4*a*c; if(d>=0) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%f,x2=%f",x1,x2); } } float realpart,imagpart; else { realpart=-b/(2*a); imagpart=sqrt(-d)/(2*a); printf("x1=%f+%fi\n",realpart,imagpart); printf("x2=%f-%fi\n",realpart,imagpart); } 返回

  7. 开始 输入a,b,c No a<b Yes 交换a与b的值 No a<c Yes 交换a与c的值 No b<c Yes 交换b与c的值 输出a,b,c 结束 补充例题:输入任意三个数,按由大到小顺序排列输出。 解法一:交换变量值法。 解法二:六种排列组合法。 交换两个变量a与b的值的算法实现: t=a; a=b; b=t; a为a,b中最大者 添加中间变量t: main( ) { int a,b,c,t; printf("Please Input a,b,c: "); scanf("%d,%d,%d",&a,&b,&c); if (a<b) {t=a;a=b;b=t;} if (a<c) {t=a;a=c;c=t;} if (b<c) {t=b;b=c;c=t;} printf ("%d,%d,%d",a,b,c); } a为三数中最大者 b为三数中次大者 返回

  8. 补充例题:输入任意三个数,按由大到小顺序排列输出。补充例题:输入任意三个数,按由大到小顺序排列输出。 解法二:六种排列组合法。 main() { int a,b,c; printf("Please input a b c:"); scanf("%d%d%d",&a,&b,&c); if (a>=b&&b>=c) printf("%d,%d,%d\n",a,b,c); if (a>=c&&c>=b) printf("%d,%d,%d\n",a,c,b); if (b>=a&&a>=c) printf("%d,%d,%d\n",b,a,c); if (b>=c&&c>=a) printf("%d,%d,%d\n",b,c,a); if (c>=a&&a>=b) printf("%d,%d,%d\n",c,a,b); if (c>=b&&b>=a) printf("%d,%d,%d\n",c,b,a); } 三个数a,b,c,由大到小的 六种顺序排列组合: a≥b≥c a≥c≥b b≥a≥c b≥c≥a c≥a≥b c≥b≥a 翻 译 为 C a>=b&&b>=c a>=c&&c>=b b>=a&&a>=c 语 言 表 达 式 b>=c&&c>=a c>=a&&a>=b c>=b&&b>=a 返回

  9. 例4-11:闰年判断程序。 闰年的判别条件:(假设年份变量用year表示) 条件表示为:year%400==0 ⑴ 当year是400的整倍数时为闰年; 综合上述两种情况,得到闰年判别条件的逻辑表达式: ⑵ 当year是4的整倍数,但不是100的整倍数时为闰年。 条件表示为: year%4==0 && year%100 != 0 year%400==0 || year%4==0 && year%100 != 0 main() { int year; printf("Type in a year:\n"); scanf("%d",&year); if (year%400==0||year%4==0&&year%100!=0) printf("%d is a leap year.\n"); else printf("%d is not a leap year.\n"); } 返回

  10. 0 表达式1 非0 0 表达式2 非0 0 表达式3 非0 0 表达式4 非0 语句组1 语句组2 语句组3 语句组4 语句组5 例4-12:学生成绩分等显示程序。学生有数学、英语两门课。 按百分制考核。要求输入各门课成绩,按平均成绩分等显示: excellence(优秀):平均成绩≥90; all right(良好):80≤平均成绩<90; middling(中等):70≤平均成绩<80; pass(及格): 60≤平均成绩<70; fail(不及格): 平均成绩<60。 main() {float a,b,ave; printf("Input data a,b: "); scanf("%f,%f",&a,&b); ave=(a+b)/2; if(ave>=90) printf("excellence\n"); else if(ave>=80) printf("all right\n"); else if(ave>=70) printf("middling\n"); else if(ave>=60) printf("pass\n"); else printf("fail\n"); } if(表达式1) {语句组1} else if(表达式2) {语句组2} …… else if(表达式n) {语句组n} else {语句组n+1} 返回

  11. 二、switch 语句的综合应用 例4-12:学生成绩分等显示程序。学生有数学、英语两门课。按百分制考核。要求输入各门课成绩,按平均成绩分等显示。 excellence(优秀):平均成绩≥90; all right(良好):80≤平均成绩<90; middling(中等):70≤平均成绩<80; pass(及格): 60≤平均成绩<70; fail(不及格): 平均成绩<60。 补充例题:编写计算器程序。用户输入运算数和四则运 算符,输出计算结果。 返回

  12. 例4-12:学生成绩 分等显示程序。 main() {float a,b; int ave; printf("Input data a,b: "); scanf("%f,%f",&a,&b); ave=(a+b)/2; switch(ave/10) {case 10: case 9: printf("excellence\n"); break; case 8: printf("all right\n"); break; case 7: printf("middling\n"); break; case 6: printf("path\n"); break; default: printf("fail\n"); } 采用switch编程时,要注意 精选switch后的表达式: (1)若采用平均值ave 将有101种可能; (2)若采用:ave/10 只有11种结果,再经 过合并后仅剩下5种。 switch语句在开发应用程序 时用途广泛。 返回

  13. 补充例题:编写计算器程序。用户输入运算数和四则运补充例题:编写计算器程序。用户输入运算数和四则运 算符,输出计算结果。 #include <stdio.h> main() { int a,b,result=0; char ch; printf("\n\nInput a,b:"); scanf("%d,%d",&a,&b); printf("Input one of(+,-,*,/):"); getchar(); ch=getchar(); switch(ch) { case '+': result=a+b; break; case '-': result=a-b; break; case '*': result=a*b; break; case '/': result=a/b; break; default: printf("operator is wrong!"); } printf("\nresult=%d",result); } 返回

  14. 三、goto语句及其综合应用 goto语句是一种无条件转移语句,主要用于控制程序的执行方向,也可以利用它反复地执行同一段程序。一般格式如下: goto 语句标号; 例4-10:输入一批自然数,求其中的偶数和,当输入-1时,结束求和过程。 返回

  15. 例4-10:输入一批自然数,求其中的偶数和,当输入-1时,结束求和过程。 main() {int n,sum=0; loop: printf("Input a number: "); scanf("%d",&n); if(n!=-1) { if(n%2==0) sum=sum+n; goto loop; } printf("SUM=%d\n",sum); } 返回

  16. 分支结构程序设计-小结 • 分支结构是三大结构之一,分支结构程序设计是C语言编程的重要内容。 • 要根据具体问题具体分析,灵活使用if语句的三种形式。 • 多分支结构编程可以采用if-esle if结构,亦可以采用switch语句结构。注意这两种结构用法上的主要区别:if-esle if是多条件多分支结构,其中的各条件表达式能够表示范围;而switch语句是根据一个表达式的多个结果实现多分支编程,其结构中的表达式通常为整型或字符型。 • 勤思考、多动手、常比较、善积累是提高编程水平的有效途径。 作业:教材4.9, 4.10

More Related