C++程序结构和流程控制.ppt

上传人:小飞机 文档编号:6153977 上传时间:2023-09-30 格式:PPT 页数:83 大小:207KB
返回 下载 相关 举报
C++程序结构和流程控制.ppt_第1页
第1页 / 共83页
C++程序结构和流程控制.ppt_第2页
第2页 / 共83页
C++程序结构和流程控制.ppt_第3页
第3页 / 共83页
C++程序结构和流程控制.ppt_第4页
第4页 / 共83页
C++程序结构和流程控制.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《C++程序结构和流程控制.ppt》由会员分享,可在线阅读,更多相关《C++程序结构和流程控制.ppt(83页珍藏版)》请在三一办公上搜索。

1、第3章 程序结构和流程控制语句,目的与要求3.1 程序的三种基本结构和语句3.2 分支语句3.3 循环语句3.4 控制执行顺序的语句3.5 程序设计举例(习题课)本章小结,目的与要求,通过本章学习,应掌握程序的三种基本结构,即顺序结构、分支结构和循环结构,并掌握C+语言中实现这三种基本结构的控制语句的格式、功能和执行过程。能使用这些控制语句编写具有顺序、分支和循环三种基本结构的程序。,3.1 程序的三种基本结构和语句,3.1.1 程序的三种基本结构1.顺序结构,2.分支结构,多分支结构,3.循环结构,直到型循环结构,三种基本结构都具有下列的共同特征,(1)单入口和单出口,即只有一个入口和一个出

2、口;(2)没有无用的部分,即结构中所有部分都有被执行的机会;(3)不存在“死循环”(无终止的循环),即执行时间是有限的。已有人从理论上证明了,由三种基本结构顺序组合构成的程序能处理任何复杂的问题。,3.1.2 C+程序的组成,3.1.3 C+程序的语句,C+程序的语句可以分成以下六大类:1.说明语句 2.控制语句 3.函数调用语句 4.表达式语句 5.空语句 6.复合语句,3.2 分支语句,分支语句用于实现分支结构程序设计。分支程序有两路分支结构和多路分支结构,两路分支结构可用if语句实现,多路分支结构可用嵌套的if语句和switch语句实现。,3.2.1 if语句,1.if语句的三种形式(1

3、)单选条件语句单选条件语句的格式为:if()【例3.1】输入两个整数a和b,输出其中较大的一个数。例程,if语句的三种形式,(2)双选条件语句双选条件语句的格式为:if()else【例3.2】输入两个整数a和b,输出其中较大的一个数。例程,if语句的三种形式,(3)多选条件语句多选条件语句的格式为:if()else if()else if().else if()else,【例3.3】有下列分段函数:编一程序,输入x,输出y的值。,例程,2.if语句的嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套。其一般格式为:if()if()else else if()else,【例3.5】求三

4、个整数a、b、c中的最大者,a、b、c由键盘输入。注意:if语句嵌套使用时,应当注意else与if的配对关系。C+规定:else总是与其前面最近的还没有配对的if进行配对。,例程,3.2.2 条件运算符和条件表达式,(1)条件运算符:?:(2)条件表达式:?:(3)执行过程:if(表达式1)条件表达式=表达式2 else 条件表达式=表达式3;(4)优先级 条件运算符的优先级高于赋值运算符和逗号运算符,低于算术运算符、关系运算符和逻辑运算符。,3.2.3 switch语句,1switch语句(开关语句)(1)作用:switch语句即开关语句,它根据给定的条件,决定执行多个分支程序段中的某一个分

5、支程序段。(2)格式:switch()case:case:.case:default:【例3.7】输入06的整数,将其转换成对应的星期几。,例程,2break语句在switch语句中的作用,(1)作用:中止当前语句的执行,并跳转到下一条语句处执行。(2)格式:break;【例3.8】商店打折售货。购货金额数量越大,折扣越大。具体标准为(m:购货金额,d:折扣率):m250(元)d=0%250m500d=5%500m1000d=7.5%1000m2000 d=10%m2000d=15%从键盘输入购货金额,计算实付的金额。,例程,3.3 循环语句,所谓循环结构就是在给定条件成立的情况下,重复执行一

6、个程序段;当给定条件不成立时,退出循环,再执行循环下面的程序。实现循环结构的语句称为循环语句。在C+中,循环语句有while语句、dowhile语句和for语句。,3.3.1 while语句,(1)作用:实现“当型”循环结构。(2)格式:while()(3)执行过程:先计算表达式的值,当表达式的值为非0时,重复执行指定的语句;当表达式的值为0时,结束循环。【例3.9】用while语句计算:S=1+2+3+4+n。【例3.10】用while语句计算T=n!,即求连乘积:T=1234n。,例程,例程,3.3.2 dowhile语句,(1)作用:实现“直到型”循环结构。(2)格式:do while(

7、);(3)执行过程:先执行语句,然后计算表达式的值,当表达式的值为非0时,就重复执行指定的语句;当表达式的值为0时,结束循环。【例3.11】用dowhile语句计算S=1+2+3+4+n。【例3.12】用dowhile语句计算T=n!,即求连乘积:T=1234n。,例程,例程,3.3.3 for语句,1.for语句格式:for(;)2.for语句的执行过程:,for语句,【例3.13】用for 语句计算:S=1+2+3+4+n。【例3.14】用for 语句计算T=n!,即求T=1234n。【例3.15】计算S=,即求:,例程,例程,例程,3.3.4 三种循环语句的比较,(1)while与for

8、语句为先判断后执行(当型:可能一次也不执行循环体);dowhile语句是先执行后判断(直到型:循环体至少执行一次)。(2)三种语句都是循环条件为真时执行循环体,为假时结束循环。(3)在循环体至少执行一次的情况下,三种循环语句构成的循环结构可以相互转换。实际上,用得最多的是for语句,其次是while语句,而dowhile语句相对于前两种语句则用得较少。,3.3.5 循环语句的嵌套,循环语句中又包含有循环语句的结构称为循环语句的嵌套。【例3.16】求出100200之间的所有素数,输出时一行打印五个素数。,例程,3.4 控制执行顺序的语句,3.4.1 break语句(1)作用:终止switch语句

9、与单循环语句的执行;对多重循环循环语句,可从内循环体跳到外循环体。(2)格式:break;,3.4.2 continue语句,(1)作用:在循环语句中,结束本次循环,重新开始下一次循环。(2)格式:continue;【例3.17】输入10个整数,统计其中正数的和及正数的个数。,例程,3.4.3 语句标号和goto语句,1.语句标号(1)作用:指示语句在程序中的位置,常常作为转移语句(goto语句)的转移目标。(2)格式::语句标号用标识符来表示,它的命名规则与标识符的命名相同。2.goto语句(1)作用:改变程序的流程,无条件地转移到指定语句标号的语句处去执行。(2)格式:goto;,3.4.

10、4 exit()和abort()函数,1.exit()函数(1)作用:无条件正常终止程序的执行,并将控制返回给操作系统。(2)格式:exit();2.abort()函数(1)作用:用于异常终止程序的执行。(2)格式:abort();,3.5 程序设计举例(习题课),程序设计有三种基本结构,即顺序结构、分支结构和循环结构。分支结构程序主要是用分支语句(if、switch)实现的,而循环结构程序则主要是用循环语句(while、do while、for)语句实现。本节重点对分支与循环语句的应用编程举例。,3.5.1 分支语句应用举例,分支语句用于实现分支结构程序设计。能够用分支结构程序解决的常见问题

11、有:比较数的大小、找出若干数中最大值与最小值、分段函数、解一元二方程、判断闫年、多分支问题。分支语句有if语句和switch语句。,(1)if 语句,if语句又有单选、双选与多选if语句,格式分别为:单选if语句 双选if语句 多选if语句if()if()if()else else if else if语句可以嵌套使用,但应当注意else与if的配对关系。C+规定:else总是与其前面最近的还没有配对的if进行配对。,if 语句,【例3.19】编写程序,求一元二次方程ax2+bx+c=0的解。C+程序设计的一般步骤为:l进行数学分析建立求解数学模型;l 根据数学模型确定程序框架及所用语句;l

12、根据数学模型确定所要定义的变量及其数据类型;l给变量输入数据;l 编写计算程序,执行程序得到运算结果;l输出运算结果。,例程,(2)switch语句,switch语句的格式为:switch()case:.case:default:注意:在执行switch语句的过程中,一般用break语句结束switch语句的执行【例3.20】输入某一年的年份和月份,计算该月的天数。,例程,3.5.2 循环语句应用举例,循环语句用于实现循环结构程序设计。能够用循环结构程序解决的常见问题有:累加和、连乘积、求一批数的和及最大值与最小值、求数列的前n项、判素数、求两个整数的最大公约数和最小公倍数、用迭代法求平方根、

13、用穷举法求不定方程组的整数解、打印图形等等。循环语句有while语句、dowhile语句和for语句。,循环语句格式,while语句、dowhile语句和for语句的格式如下:while语句 dowhile语句 while()do;while();for语句 for(;);应注意三种循环语句的特点、它们间的区别及由三种循环语句构成的嵌套循环结构。,循环语句应用举例,【例3.21】用公式,即:求自然对数底e的近似值(n=10)。分别用while语句、dowhile语句和for语句三种语句实现。【例3.22】,用累加和的方法求s值,直到 最后一项 0.00001为止。【例3.23】裴波那契数列的前

14、几个数为1,1,2,3,5,8,其规律为:f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n3)编写程序求此数列的前面40个数。,例程,例程,例程,循环语句应用举例,【例3.24】有100个学生种100棵树,其中高中生每人种3棵树,初中生每人种2棵树,小学生每3人种1棵树,问高中生、初中生、小学生各有多少人?【例3.25】编写程序,按下列格式打印九九表。*1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24

15、 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81,例程,例程,本章小结,一个C+程序由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数执行部分组成,函数执行部分由数据定义和若干个执行语句组成。语句是组成程序的基本单元。,程序的三种基本结构和C+语句,1.程序的三种基本结构 组成C+程序的函数是由若干个基本结构组合而成的。有三种基本结构,即顺序结构、分支结构和循环结构。各种控制结构是通过语句来实现的。2.C+中的语句 C+语言的语句可以分成六大类,即说明语句、控制语句、函数调用语句、表达式语句、空语句和复

16、合语句。其中控制语句主要有分支语句与循环语句。,3.分支语句,分支语句用于实现分支结构程序设计。分支语句有if语句和switch语句。(1)if浯句 if语句的格式为:if()else if语句可以嵌套使用,但应当注意else与if的配对关系。C+规定:else总是与其前面最近的还没有配对的if进行配对。,(2)条件运算符和条件表达式,由条件运算符(?:)构成的条件表达式的一般格式为:?:,(3)switch语句,switch语句的格式为:switch()case:case:.case:default:,分支结构程序解决的常见问题,注意:在执行switch语句的过程中,每当执行完一个case后

17、面的语句后,程序会不加判断地自动执行下一个case后面的语句。如果要结束switch语句的执行,可用break语句来实现。能够用分支结构程序解决的常见问题有:比较数的大小、找出若干数中最大值与最小值、分段函数、解一元二方程、判断闫年、多分支问题。,4.循环语句,循环语句用于实现循环结构程序设计。循环语句有while语句、dowhile语句和for语句。(1)while语句 while语句用来实现“当型”循环结构,其格式为:while()(2)dowhile语句 dowhile语句用来实现“直到型”循环结构,其格式为:do while();,(3)for语句,for语句是功能较强的一种循环语句,

18、其格式为:for(;)应注意三种循环语句的特点、它们间的区别及由三种循环语句构成的嵌套循环结构。,循环结构程序解决的常见问题,能够用循环结构程序解决的常见问题有:累加和、连乘积、求一批数的和及最大值与最小值、求数列的前n项、判素数、求两个整数的最大公约数和最小公倍数、用迭代法求平方根、用穷举法求不定方程组的整数解、打印图形等等。,5.控制执行顺序的语句,(1)break语句 break语句的格式为:break;break语句只能用在循环语句和switch语句中,其功能是终止循环语句和switch语句的执行。(2)continue语句 continue语句的格式为:continue;contin

19、ue语句只能用在循环语句中,其功能是结束本次循环,重新开始下一次循环。,(3)goto语句,C+允许语句前带有一个标号,称为语句标号。C+中带标号语句的格式为::goto语句的格式为:goto;goto语句的功能是改变程序的执行流程,无条件地转移到指定语句标号的语句处去执行。从程序设计的角度出发,在程序设计时应尽量避免使用goto语句。,例3.1,#include void main(void)int a,b,max;coutab;max=a;if(bmax)max=b;coutmax=maxendl;,返回,程序执行后提示:Input a,b:3 8 max=8,例3.2,#include

20、void main(void)int a,b,max;coutab;if(ab)max=a;else max=b;coutmax=maxendl;,返回,程序执行后提示:Input a,b:3 8 max=8,例3.3,#include void main(void)float x,y;coutx;if(x0)y=x+1;else if(x10)y=x*x-5;else y=x*x*x;couty=yendl;,程序执行后提示:Input x:3 y=4,返回,例 3.5,#include void main()int a,b,c,max;coutabc;if(ab)if(ac)max=a;e

21、lse max=c;,else if(bc)max=b;else max=c;coutmax=maxendl;程序执行后提示:Input a,b,c:1 4 5 max=5,返回,例 3.7(A),#include void main()int a;couta;switch(a)case 0:coutSundayn;case 1:coutMondayn;case 2:coutTuesdayn;case 3:coutWednesdayn;case 4:coutThursdayn;case 5:coutFridayn;case 6:coutSaturdayn;default:coutInput d

22、ata error.n;,返回,例 3.7(B),#include void main()int a;couta;switch(a)case 0:coutSundayn;break;case 1:coutMondayn;break;case 2:coutTuesdayn;break;case 3:coutWednesdayn;break;case 4:coutThursdayn;break;case 5:coutFridayn;break;case 6:coutSaturdayn;break;default:coutInput data error.n;,返回,例3.8,#include vo

23、id main()int m,c;float d,f;coutm;if(m=2000)c=8;else c=m/250;switch(c)case 0:d=0;break;case 1:d=5;break;case 2:case 3:d=7.5;break;case 4:,case 5:case 6:case 7:d=10;break;case 8:d=15;break;f=m*(1-d/100.0);coutf=fendl;程序执行后提示:Input m:500 f=462.5,返回,例3.9,#include void main()int i,n,sum;coutn;sum=0;i=1;w

24、hile(i=n)sum=sum+i;i+;coutsum=sumendl;,程序执行后提示:Input an integer:5 sum=15,返回,例3.10,#include void main()int i,n;float t;coutn;t=1.0;i=1;while(i=n)t=t*i;i+;coutt=tendl;,程序执行后提示:Input an integer:5 t=120,返回,例3.11,#include void main()int i,n,sum;coutn;sum=0;i=1;do sum=sum+i;i+;while(i=n);coutsum=sumendl;,

25、返回,例3.12,#include void main()int i,n;float t;coutn;t=1.0;i=1;do t=t*i;i+;while(i=n);coutt=tendl;,返回,例3.13,#include void main(void)int i,n,sum;coutn;sum=0;for(i=1;i=n;i+)sum=sum+i;coutsum=sumendl;,返回,例3.14,#include void main()int i,n;float t;coutn;t=1.0;for(i=1;i=n;i+)t=t*i;coutt=tendl;,返回,例3.15,#inc

26、lude void main(void)int i;float t,sum;sum=0;for(i=1;i=20;i+)t=1.0/(i*(i+1);sum=sum+t;coutS=sumendl;,程序执行后输出:s=0.952381,返回,例3.16,#include#include#include void main(void)int a,k,i,n;n=0;for(a=100;a=200;a+)k=sqrt(a);for(i=2;i=k;i+)if(a%i=0)break;,if(ik)coutsetw(12)a;n=n+1;if(n%5=0)coutendl;coutendl;,程序

27、运行后,输出:101 103 107 109 113127 131 137 139 149151 157 163 167 173179 181 191 193 197199,返回,例3.17,#include void main()int a,i,k=0,s=0;couta;if(a=0)continue;k+;s+=a;coutk=kts=sn;,程序执行后提示:Input 10 integer:1 2 3 4 5 6 7 8 9 0 k=9 s=45,返回,例3.19(1),#include#include void main(void)float a,b,c,d,t1,t1,x1,x2;

28、coutabc;if(a=0.0)if(b=0.0)coutInput data error!endl;else x1=c/b;coutSingle root:x1endl;else,d=b*b4*a*c;t1=b/(2*a);t2=sqrt(fabs(d)/(2*a);if(d=0.0)x1=t1;cout0.0)x1=t1+t2;x2=t1t2;coutTwo distinct real roots:x1,x2endl;else coutComplex roots:;coutt1+t2i,t1t2iendl;,例3.19(2),例3.19(3),程序运行后,提示:Input a,b,c:2

29、-5 3输出:Two distinct real roots:1.5,1,返回,例3.20(1),#include void main()int year,month,day;coutyearmonth;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;,例3.20(2),case 4:case 6:case 9:case 11:day=30;break;case 2:if(year%400=0|year%4=0,例3.20(3),程序运行后,提示:Input year and month:

30、2002 1输出:The day of 2002,1 is 31,返回,例3.21(1)(用while语句编程),#include void main(void)int i=1;float s=1.0,t=1,p;while(i=10)t=t*i;p=1/t;s=s+p;i+;coute=sendl;程序执行输出:e=2,例3.21(2)(用dowhile语句编程),#include void main(void)int i=1;float s=1.0,t=1,p;do t=t*i;p=1/t;s=s+p;i+;while(i=10);coute=sendl;程序执行输出:e=2,例3.21(

31、3)(用for语句编程),#include void main(void)int i;float s=1.0,t=1,p;for(i=1;i=10;i+)t=t*i;p=1/t;s=s+p;coute=sendl;程序执行输出:e=2,例3.21(4),在本例中,程序运算输出结果e=2与自然对数的底e=2.71828误差较大。为了使误差控制在规定的范围之内,应要求数列中最后一项的值小于。即:若取=0.00001,则循环的结束条件为p=0.00001。上述程序可改为如下形式。,例3.21(5)(用while语句编程),#include void main(void)int i=1;float s

32、=1.0,t=1,p=1;while(p=0.00001)t=t*i;p=1/t;s=s+p;i+;coute=sendl;程序执行输出:e=2.71828,例3.21(6)(用dowhile语句编程),#include void main(void)int i=1;float s=1.0,t=1,p=1;do t=t*i;p=1/t;s=s+p;i+;while(p=0.00001);coute=sendl;程序执行输出:e=2.71828,例3.21(7)(用for语句编程),#include void main(void)int i;float s=1.0,t=1,p=1;for(i=1

33、;p=0.00001;i+)t=t*i;p=1/t;s=s+p;coute=sendl;程序执行输出:e=2.71828,返回,例3.22,#include void main(void)int i,t1=1;float s=1.0,t=1,p;i=1;do t=t*i;t1=(-1)*t1;p=t1/t;s=s+p;i+;while(1/t0.00001);,返回,couts=sendl程序执行后输出:s=0.367879,例3.23(1),#include#include void main()long int f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)c

34、outsetw(12)f1setw(12)f2;if(i%2=0)coutendl;f1=f1+f2;f2=f2+f1;,例3.23(2),程序运行后,输出:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155,返回,例3.24,#include void main(void)int i,j,k;for(i=1;i=33;i+)for(j=1;j=50;j+)k=100-i-j;if(k%3=0),程序运行后,输出:5 32 63 10 24 66 15 16 69 20 8 72,返回,例3.25,#include void main()int i,j;cout*t;for(i=1;i=9;i+)coutit;coutendl;for(i=1;i=9;i+)coutit;for(j=1;j=i;j+)couti*jt;coutendl;,返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号