顺序和分支程序结构.ppt

上传人:m**** 文档编号:568328243 上传时间:2024-07-24 格式:PPT 页数:38 大小:356.51KB
返回 下载 相关 举报
顺序和分支程序结构.ppt_第1页
第1页 / 共38页
顺序和分支程序结构.ppt_第2页
第2页 / 共38页
顺序和分支程序结构.ppt_第3页
第3页 / 共38页
顺序和分支程序结构.ppt_第4页
第4页 / 共38页
顺序和分支程序结构.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《顺序和分支程序结构.ppt》由会员分享,可在线阅读,更多相关《顺序和分支程序结构.ppt(38页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计教程语言程序设计教程第3章:顺序程序结构和分支程序结构(2课时)本章小结本章小结l顺序程序结构l分支程序结构顺序结构程序是指在程序的每次执行过程中,程顺序结构程序是指在程序的每次执行过程中,程序中的各条语句按照在程序中的先后顺序依次执行。序中的各条语句按照在程序中的先后顺序依次执行。每个顺序结构程序中的可执行语句在每一次程序每个顺序结构程序中的可执行语句在每一次程序执行的过程中,执行且只执行一次。执行的过程中,执行且只执行一次。 顺序程序是最顺序程序是最简单的程序。简单的程序。设计一个程序,首先要将问题分析清楚,然后用设计一个程序,首先要将问题分析清楚,然后用适当的方法将问题描述

2、出来,再根据问题的描述编适当的方法将问题描述出来,再根据问题的描述编成程序,最后调试运行。成程序,最后调试运行。描述问题的方法很多,有各种流程图,层次图、描述问题的方法很多,有各种流程图,层次图、伪代码等,更多的时候是多种手段混合使用。伪代码等,更多的时候是多种手段混合使用。1 顺序结构程序顺序结构程序/* /* /* /* exam31.cexam31.c */*/*/*/* /* /* /* 最简单的最简单的最简单的最简单的C C C C程序程序程序程序 * * * */ / / /#include#include#include#include main() main() main()

3、main() printf(printf(printf(printf(“ “Hello,worldHello,worldHello,worldHello,world! ! ! !、n n n n” ”);););); 例例例例3.13.13.13.1 最简单的最简单的最简单的最简单的C C C C程序,这也是世界上第一个程序,这也是世界上第一个程序,这也是世界上第一个程序,这也是世界上第一个C C C C程序。程序。程序。程序。头文件头文件头文件头文件主主主主函数函数函数函数例例 3.23.2 已知圆的半径为10,求圆的面积和周长,用计算机求解,程序如下/* exam32.cexam32.c

4、*/* 计算圆的面积和周长计算圆的面积和周长 */#include#define pi 3.1415 / 定义定义符号常量符号常量main() float area,s; area=pi*10.0*10.0; s=2*pi*10.0; printf(“面积面积= %f, 周长周长=%fn”,area,s);数值常量数值常量例例 3.33.3 已知圆的半径为R(R是一个可变的量),求圆的面积和周长,用计算机求解,完整程序如下/* exam33.cexam33.c*/* 计算圆的面积和周长计算圆的面积和周长 */#includemain() float r,area,s; scanf(“%f“,&

5、r); area=3.14*r*r; s=2*3.14*r; printf(“面积面积= %f, 周长周长=%fn”,area,s);1 1、注释注释2 2、数据说明数据说明3 3、数据输入数据输入4 4、数据处理、数据处理5 5、结果输出、结果输出例例例例 3.43.43.43.4 从键盘输入两个数从键盘输入两个数a a、b,b,求求a a除除b b的余数。即整的余数。即整除后剩下的数。编写除后剩下的数。编写完整的程序完整的程序。源程序代码如下:源程序代码如下:/ / exam34.cexam34.c / / 求两个数的余数求两个数的余数#include#includemain()main(

6、) intint a,b,c; / a,b,c; /说明整型说明整型变量变量 scanfscanf (“%d,%d”,&a,&b); (“%d,%d”,&a,&b); c=a%b; c=a%b; printfprintf(“c(“c=%dn”,c);=%dn”,c); 整除运算符运算符输出语句例例例例 3.53.53.53.5 以我国以我国19921992年工业产值为年工业产值为100100,如果以,如果以9%9%的年的年增长率增长计算到增长率增长计算到20002000年时的工业产值年时的工业产值。1 1 1 1 算法分析算法分析算法分析算法分析:对此问题,要找出问题的数学模型。设对此问题,要

7、找出问题的数学模型。设r r为年增为年增长率,长率,n n为年数,为年数,v v为第为第n n年的总产值。年的总产值。 则有则有 v=100*(1+r)v=100*(1+r)n n2 2 数据结构数据结构根据算法分析,至少要用到这么几个量,年增长率、年数、第n年的总产值。而这几个量中,年增长率肯定是小数(浮点)型数据,年数是整数(整型),总产值不会是整数,应为浮点数。这些数据都要放在相应的变量变量中,并要进行相应的数据说明数据说明。/ / exam35.cexam35.c / / 计算到计算到计算到计算到20002000年的工业产值年的工业产值年的工业产值年的工业产值#include#incl

8、ude#include#includemain()main() intint n; n; float rate,value; float rate,value; n=2000-1992; n=2000-1992; rate=0.09; rate=0.09; value=100*pow(float)(1+r),(float)n); value=100*pow(float)(1+r),(float)n); printfprintf( “2000( “2000年的产值为年的产值为年的产值为年的产值为%f%f:” ”,value);,value); powpow为求幂的函数为求幂的函数为求幂的函数为求

9、幂的函数格式格式格式格式 powpow(底,指数)底,指数)底,指数)底,指数)底,指数均为浮点数。底,指数均为浮点数。底,指数均为浮点数。底,指数均为浮点数。强制强制强制强制类型转换类型转换类型转换类型转换3 3 源程序代码源程序代码注意头文件 此例中,只能算到此例中,只能算到20002000年,且年增长率为年,且年增长率为9%9%时的工业产时的工业产值。如果将工业产值改为值。如果将工业产值改为10%10%,或者要算到其它年份,必须要,或者要算到其它年份,必须要修改源程序,使用不便。修改源程序,使用不便。方法方法2 2:用:用scanfscanf函数重新编写程序,注意函数重新编写程序,注意开

10、发环境开发环境的使用。的使用。/ / exam25a.cexam25a.c / / 计算到指定年和指定年增长率的工业产值计算到指定年和指定年增长率的工业产值#include#include#include#includemain()main() intint n,year; / n,year; / 说明整型变量说明整型变量 float value,rate;float value,rate; printfprintf(“(“请输入年份和年增长率:请输入年份和年增长率:” ”);); scanfscanf(“%d,%f”,&year,&rate(“%d,%f”,&year,&rate);); n

11、=year-1992; n=year-1992; value=100*pow(float)(1+rate),(float)n); value=100*pow(float)(1+rate),(float)n); printfprintf( (“ “按给定利率到指定年份的产值为按给定利率到指定年份的产值为%f%fnn”,value);”,value); 强制类型转换改写后的程序使用更灵活。例例例例 3.63.63.63.6 鸡兔同笼,已知鸡兔总头数为鸡兔同笼,已知鸡兔总头数为H H(HeadsHeads),),总总数为数为F F(FeetFeet),),问鸡兔各有多少只?问鸡兔各有多少只?1 1

12、1 1 算法分析:算法分析:算法分析:算法分析:(1 1)建立数学模型)建立数学模型 设鸡为设鸡为x x只,兔为只,兔为y y只,由题意有:只,由题意有: x+y=h .x+y=h .(1 1) 2*x+4*y=f .2*x+4*y=f .(2 2)(2 2)求解方程,找出)求解方程,找出x x,y y的具体求解公式:的具体求解公式:以下用消元法找出方程的解以下用消元法找出方程的解(2)(2)式式-2-2 (1)(1)式式注意:计算机不会自己建数学模型,也不会自己解方程!注意:计算机不会自己建数学模型,也不会自己解方程!2 2 y=f-2y=f-2 h hy=(f-2y=(f-2 h)/2 h

13、)/2 4 4 (1)(1)式式-(2)-(2)式式2 2 X=4X=4 H-FH-FX=(4X=(4 H-F)/2H-F)/22 2 数据结构数据结构程序中要用到不同的数据数据,存放头、脚数量的变量,存放方程解(鸡、兔数量)的变量,存放方程判别式的变量等。对于头、脚的数量,肯定是整型变量,方程的解理论上讲是整型,但在求解方程时要进行运算,为了避免发生错误,最好是用浮点数据(实型)。3 3 伪代码伪代码伪代码伪代码(由于此问题比较简单,也可直接编写程(由于此问题比较简单,也可直接编写程序)。序)。说明变量说明变量 x x,y y,f f,h h输入数据输入数据 f f,h h计算计算x x,y

14、 y打印结果打印结果伪代码是一种程伪代码是一种程伪代码是一种程伪代码是一种程序设计工具序设计工具序设计工具序设计工具, , , ,介于程序介于程序介于程序介于程序语言与自然语言之间语言与自然语言之间语言与自然语言之间语言与自然语言之间, , , ,伪代码不能被计算机伪代码不能被计算机伪代码不能被计算机伪代码不能被计算机编译编译编译编译, , , ,但它很容易翻译但它很容易翻译但它很容易翻译但它很容易翻译成高级语言成高级语言成高级语言成高级语言. . . ./exam36.cexam36.c #include#includemain()main() float x,y; float x,y; i

15、ntint f,h; f,h; printfprintf(“Input(“Input the numbers of the numbers of Heads and Feet: ”); Heads and Feet: ”); scanfscanf(“%d,%d”,&f,&h(“%d,%d”,&f,&h);); x=(4.0*h-f)/2.0; x=(4.0*h-f)/2.0; y=(f-2.0*h)/2.0; y=(f-2.0*h)/2.0; printfprintf( (“ “HeadsHeads=%d=%d;Feet=%dn”,h,f);Feet=%dn”,h,f); printf(pri

16、ntf(“ “ChickenChicken=%f,rabbits=%fn=%f,rabbits=%fn” ”,x,y);,x,y); 4 4 源程序代码源程序代码说明输入数据的内容输出语句输出语句赋值赋值语句语句问题:1、从键盘输入一个数,如果该数为正,打印,否则不打印;2、将考试成绩不及格的学生名单打印出来;3、解一元二次方程,求出相应的实根或复根。 对于上述或类似问题,需要进行某种判断,并根据不同情况进行不同的处理,怎样进行程序设计?2分支结构程序设计分支结构程序设计解决办法:1、引入新的程序结构,分支结构分支结构, 有时也称 判断结构判断结构 或 选择结构选择结构。2、为了和分支结构相配

17、合,同时还要引入 逻辑表达式的概念。3、有三种形式可进行分支结构的程序设计A、 if 结构B、多重选择结构(switch语句)C、无条件转移结构(goto语句)内容 if 语句关系表达式和逻辑表达式if 语句的变形及嵌套多重选择语句 (switch 语句)无条件转移语句( goto 语句)本章小结例例 3.7 求一元二次方程求一元二次方程的根的根1 1 1 1、算法分析:、算法分析:、算法分析:、算法分析:2 2 2 2、数据结构:、数据结构:、数据结构:、数据结构: 由于问题简单,只需用到一些单精度实数3 3 3 3、伪代码、伪代码、伪代码、伪代码输入方程系数 a,b,c计算判别式 d=b*

18、b-4*a*cif 判别式大于等于 0 then 计算两个实根 定位输出光标 打印结果else 计算实部 计算虚部 定位输出光标 打印结果end program4 4 4 4、源程序清单、源程序清单、源程序清单、源程序清单/exam37.cexam37.c #include #includemain() float a,b,d,c,x1,x2,p,q; printf( “输入方程系数输入方程系数: ” ); 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);

19、 printf( “x1=%f,x2=%fn”,x1,x2); else p=-b/(2*a); q=sqrt(-d)/(2*a); printf( “x1=%f+i%f,x2=%f-i%fn”,p,q,p,q); 求平方根的函数关系运算符例例 3.83.8 商店售货,按购买货物款的多少分别给予不同的商店售货,按购买货物款的多少分别给予不同的 优惠折扣,编程计算实际应付货款。优惠折扣,编程计算实际应付货款。购货不足购货不足250元,没有折扣;元,没有折扣;购货购货250元(含元(含250元,下同),不足元,下同),不足500元,减价元,减价5%;购货购货500元,不足元,不足1000元,减价元

20、,减价7.5%;购货购货1000元元,不足不足2000元,减价元,减价10%;购货购货2000元及以上,减价元及以上,减价15%;1、算法分析、算法分析: 设购物款为M,折扣为D,则D可表示为: D=0 (M250) D=0.05 (250 M500) D=0.075 (500 M1000) D=0.1 (1000 M2000) D=0.15 (2000M)2、源程序清单/ exam38.cexam38.c#includemain() float m,d,t; printf(“请输入购物金额: ”); scanf(“%f”,&m); if ( m=250 & m=500 & m=1000 &

21、m=2000) d=0.15; t=m*(1-d); /计算应付 款 printf( “实际应付款:%f”,t);输入购物款: 249实际应付款:249输入购物款: 500实际应付款:462.5例例 3.93.9 购物折扣程序购物折扣程序 的另一个写法的另一个写法改写后,程序更清晰,执行时间更省。/ exam39.cexam39.c#includemain() float m,d,t; printf(“请输入购物金额请输入购物金额: ”); scanf(“%f”,&m); if ( m=250 & m=500 & m=1000 & m2000) d=0.1; else d=0.15; t=m*

22、(1-d); /应付款应付款 printf( “实际应付款实际应付款:%fn”,t);例例 3.103.10 从键盘输入一字符从键盘输入一字符,如果为如果为Y,则打印是则打印是,为为N,打印否打印否,其它其它 字符字符,打印输入错误。打印输入错误。/ exam310.cexam310.c#includemain() char a; printf(“输入一个字符:输入一个字符:”); a=getchar(); if( a=Y | a=N ) if (a=“Y”) printf( “是是!n”); else printf( “否否!n”); else printf( “输入数据不合要求输入数据不合

23、要求!n”);#includemain() int x,y,z; printf(“Iput x,y,z:”); scanf(“%d,%d,%d”,&x,&y,&z); if ( x0) if (y0 ) if (z0) printf( “所有数据大于零所有数据大于零!”); else printf( “只有只有X,Y大于零大于零!”); else if (x=0) if (y=0) if (z=0) printf( “所有数据都为零所有数据都为零!”); else printf( “只有只有X,Y等于零等于零!”); else printf( “X 小于零小于零!”);例例 3.13.11 1

24、 嵌套不能太深,一般以三层为限,嵌套太深,容易出错。嵌嵌套套演演示示程程序序/exam311a.cexam311a.c#includemain() int x,y,z; printf(“Iput x,y,x:”); scanf(“%d,%d,%d”,&x,&y,&z); if ( x0 & y0 & z0) printf( “所有数据大于零所有数据大于零!n”); else if (x0 & y0) printf( “只有只有X,Y大于零大于零!n”); else if (x=0 & y=0 & z=0) printf( “所有数据都为零所有数据都为零!n”); else if (x=0 &

25、y=0) printf( “只有只有X,Y等于零等于零!n”); else if (x0) printf( “X 小于零小于零!n”);利用利用逻辑表达式逻辑表达式将例将例3.53.5改写,改写后程序的结构要清晰得多改写,改写后程序的结构要清晰得多。例例 3.12 3.12 将输入的字母转化为小写字母。将输入的字母转化为小写字母。1 算法分析 在计算机中,处理英文字母,其实是处理它的ASCII码值。将大写字母变成小写字母,就是将大写字母的ASCII码值变为相应的小写字母的ASCII码值。 大写字母的ASCII值比小写字母的ASCII值小32,故将相应字母的ASCII值加32就变成了小写字母。

26、程序设计时,要注意如果输入的不是大写的字母,则不用转换。/exam312a.cexam312a.c/将输入的大写字母变成小写将输入的大写字母变成小写#includemain() char ch; printf(“请输入一个大写英文字母请输入一个大写英文字母 :”); scanf(“%c”,&ch); if (ch=A & ch=Z) ch=ch+32; printf(“小写字母为:小写字母为:%cn”,ch);2 源程序代码之一/exam312b.cexam312b.c#includemain() char ch; scanf(“%c”,&ch); ch=(ch=A & chb?a:cd?c:

27、d ab?a:(cd?c:d)此处使用了条件运算符3 源程序代码之二#includemain() int i; printf(“输入数字 1- 7: ”); scanf(“%d”,&i); if (i=1) printf ( “Today is Monday!n”); else if (i=2) printf (“Today is Tuesday!n”); else if (i=3) printf (“Today is Wednesday !n”); else if (i=4) printf( “Today is Thursday!n”); else if (i=5) printf( “Tod

28、ay is Friday!n”); else if (i=6) printf( “Today is Saturday!n”); else printf( “Today is Sunday!n”);例例 3.13.13 3入星期中的某一天入星期中的某一天, ,显示对应的英文显示对应的英文此例似显此例似显复杂,复杂,是否有更好的是否有更好的办法办法?main() int i; printf( “输入数字 1- 7: ”); scanf(“%d”,&i); switch(i) case 1: printf( “Today is Monday!”);break; case 2: printf( “To

29、day is Tuesday!”);break; case 3: printf( “Today is Wednesday !”);break; case 4: printf( “Today is Thursday!”);break; case 5: printf( “Today is Friday!”);break; case 6: printf( “Today is Saturday!”);break; default: printf( “Today is Sunday!”); 例例 3.13.14 4 用 switch 语句重写打印星期程序。main() int I; printf( “输

30、入数字 1- 7: ”); scanf(“%d”,&i); if (i=1) printf( “Today is Monday!”); else if (i=2) printf( “Today is Tuesday!”); else if (i=3) printf( “Today is Wednesday !”); else if (i=4) printf( “Today is Thursday!”); else if (i=5) printf( “Today is Friday!”); else if (i=6) printf( “Today is Saturday!”); else pri

31、ntf( “Today is Sunday!”);例例 3.153.15 用 switch 语句重写例3.4的程序main() char a; printf( “输入一个字符:” ); a=getchar(); if (a=“Y” | a=“N” ) if (a=“Y” ) printf( “是n”); else printf( “否n”); else printf( “字符不合要求!n”)显然,改写后的程序更清晰,更简短。/ exam315.cexam315.c#includemain() char a; printf( “输入字符:”); a=getchar(); switch (a) c

32、ase Y: printf( “是n”); break; case N: printf( “否n”); break; default: printf( “字符不合要求!n”); 例例 3.163.16 在屏幕上显示菜单分析: 程序首先在屏幕上将功能显示出来,用户根据需要选择相应的功能,程序根据用户的选择执行相应的程序段。对于这类程序,往往是用户输入一个英文字母,然后程序根据字母来断别程序该执行什么程序段,故一般用 switch语句比较方便。2 2 源程序清单源程序清单switch(a)case i: printf(“调用输入模块!n”); break;case o: printf(“调用输出模

33、块!n”); break;case l: printf(“调用查找模块!n”); break;case q: printf(“调用退出模块!n”); break; /exam316.cexam316.c#includemain() char a; printf(“请选择:”); printf(“输入 i ”); printf(“ 输出 o ”); printf(“找出最长的单词 l”); printf(“退出 q”); a=getchar();执行选项时,要调用相应的模块(程序段)。由于现在还没有相应的程序,暂用一条打印语句代替。以后会用相应程序代替例例 3.173.17 统计某班级中计算机课

34、程中考试成绩高于80分的人数。假设学生人数为 (结束程序,按Ctrl+Break组合键)/exam317.cexam317.c#include main() int i=0, fs, j=0;Loop: scanf(“%d”,&fs); j+; /统计已读入的数据个数 if (fs80) i+; printf(“%d, %d”,i,fs); if(j10) / 当数据没读完时,继续 goto Loop; 本章小结1、分支结构:改变程序的执行流程,或有选择地执行程序;2、if else 和 switch 是结构化语句,而 goto 语句不是;3、块 if 语句 可以取代所有的分支结构,而多重分支

35、结构不可;4、块 if 语句 中的条件可以是复杂逻辑表达式,而多重分支中 的条件只能是简单表达式;5、块 if 与 goto 语句结合,可以构造任何复杂的循环, 但用专门的循环语句更方便。作作 业业1.编写程序,接受用户输入的整数,如果是奇数,则乘3加1后输出结果,是偶数,则除2后输出结果。2.已知2006年的12月1日是星期五,编写程序,接受用户输入的131间的整数,判断是星期几,打印出结果。3.将上题的结果按如下格式输出:Calendar 2006 - 12-Su Mo Tu Wu Th Fr Sa-31-作作 业业(续续)4.接受用户输入的年份和月份,判断是否是闰年,输出该月的天数 (用switch语句实现)。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号