




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第3章 程序结构和流程控制语句目的与要求3.1 程序的三种基本结构和语句3.2 分支语句3.3 循环语句3.4 控制执行顺序的语句3.5 程序设计举例本章小结目的与要求 通过本章学习,应掌握程序的三种基本结构,即顺序结构、分支结构和循环结构,并掌握C+语言中实现这三种基本结构的控制语句的格式、功能和执行过程。能使用这些控制语句编写具有顺序、分支和循环三种基本结构的程序。3.1 程序的三种基本结构和语句 3.1.1 程序的三种基本结构1.顺序结构S1S2顺序结构顺序结构(a)(b)2.分支结构 真假BS2S1分支结构分支结构(a)(b)多分支结构真真真假假B1B2BnS1S2SnSn+1.假
2、多分支结构多分支结构3.循环结构真假BS当型循环结构当型循环结构(a)(b)直到型循环结构假真SB直到型循环结构直到型循环结构(a)(b)三种基本结构都具有下列的共同特征 (1)单入口和单出口,即只有一个入口和一个出口; (2)没有无用的部分,即结构中所有部分都有被执行的机会; (3)不存在“死循环”(无终止的循环),即执行时间是有限的。 已有人从理论上证明了,由三种基本结构顺序组合构成的程序能处理任何复杂的问题。3.1.2 C+程序的组成源程序文件1源程序文件2源程序文件n编译预处理命令函数1函数n函数2函数说明函数体数据定义执行语句C+程序的组成C+程序3.1.3 C+程序的语句 C+程序
3、的语句可以分成以下六大类: 1.说明语句 2.控制语句 3.函数调用语句 4.表达式语句 5.空语句 6.复合语句3.2 分支语句 分支语句用于实现分支结构程序设计。 分支程序有两路分支结构和多路分支结构,两路分支结构可用if语句实现,多路分支结构可用嵌套的if语句和switch语句实现。 3.2.1 if语句 1.if语句(即条件语句)的三种形式 ( 1)单选条件语句单选条件语句的格式为: if () 【例3.1】 输入两个整数a和b,输出其中较大的一个数。 例程例程单选条件语句执行过程表达式语句假(0)真(非0)(a)(b)if语句的三种形式(2)双选条件语句双选条件语句的格式为: if
4、() else 【例3.2】 输入两个整数a和b,输出其中较大的一个数。例程例程两选条件语句执行过程表达式语句1假(0)语句2真(非0)(a)(b)if语句的三种形式(3)多选条件语句多选条件语句的格式为: if () else if () else if () . else if () else 【例3.3】有下列分段函数: 编一程序,输入x,输出y的值。 x2-5 0 x10y=x+1 x0 x3 x10例程例程2.if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套。其一般格式为: if () if () else else if () else 【例3.5】 求三个整
5、数a、b、c中的最大者,a、b、c由键盘输入。 注意:ifif语句嵌套使用时,应语句嵌套使用时,应当注意当注意elseelse与与ifif的配对关系。的配对关系。C+C+规定:规定:elseelse总是与其前面最总是与其前面最近的还没有配对的近的还没有配对的ifif进行配对。进行配对。 例程例程3.2.2 条件运算符和条件表达式 (1)条件运算符: ? :(2)条件表达式: ?:(3)执行过程: if 表达式1 条件表达式=表达式2 else 条件表达式=表达式3; (4)优先级 条件运算符的优先级高于赋值运算符和逗号运算符,低于算术运算符、关系运算符和逻辑运算符。 3.2.3 switch语
6、句 1switch语句(即开关语句)(1)作用: switch语句即开关语句,它根据给定的条件,决定执行多个分支程序段中的某一个分支程序段。(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
7、.5% 1000m2000 d=10% m2000d=15% 从键盘输入购货金额,计算实付的金额。例程例程3.3 循环语句 所谓循环结构就是在给定条件成立的情况下,重复执行一个程序段;当给定条件不成立时,退出循环,再执行循环下面的程序。 实现循环结构的语句称为循环语句。在C+中,循环语句有while语句、dowhile语句和for语句。3.3.1 while语句 (1)作用: 实现“当型”循环结构。(2)格式: while () (3)执行过程: 先计算表达式的值,当表达式的值为非0时,重复执行指定的语句;当表达式的值为0时,结束循环。【例3.9】用while语句计算:S=1+2+3+4+n。
8、【例3.10】用while语句计算T=n!,即求连乘积:T=1234n。例程例程例程例程 while语句执行过程语句真(非0)假(0)表达式(a)(b)3.3.2 dowhile语句 (1)作用: 实现“直到型”循环结构。 (2)格式: do while (); (3)执行过程: 先执行语句,然后计算表达式的值,当表达式的值为非0时, 就重复执行指定的语句;当表达式的值为0时,结束循环。【例3.11】用dowhile语句计算S=1+2+3+4+n。【例3.12】 用dowhile语句计算T=n!,即求连乘积:T=1234n。 例程例程例程例程真(非0)假(0)表达式语句Do while执行过程
9、(a)(b)3.3.3 for语句1.for语句格式: for (;) 2.for语句的执行过程:表达式2语句真(非0)假(0)求解表达式1求解表达式3for 语句执行流程图TF for (;)退出for语句 执行过程for语句【例3.13】用for 语句计算: S=1+2+3+4+n。【例3.14】 用for 语句计算T=n!,即求T=1234n。【例3.15】计算S= ,即求: 201k) 1k(k12120120191321211例程例程例程例程例程例程3.3.4 三种循环语句的比较 (1)while与for语句为先判断后执行(当型:可能一次也不执行循环体); dowhile语句是先执行
10、后判断(直到型:循环体至少执行一次)。(2)三种语句都是循环条件为真时执行循环体,为假时结束循环。(3)在循环体至少执行一次的情况下,三种循环语句构成的循环结构可以相互转换。 实际上,用得最多的是for语句,其次是while语句,而dowhile语句相对于前两种语句则用得较少。 3.3.5 循环语句的嵌套 循环语句中又包含有循环语句的结构称为循环语句的嵌套。 【例3.16】 求出100200之间的所有素数,输出时一行打印五个素数。例程例程3.4 控制执行顺序的语句3.4.1 break语句(1)作用: 终止switch语句与单循环语句的执行; 对多重循环语句,可从内循环体跳到外循环体。(2)格
11、式: break; 可将【例3.16】的程序进行改造。例程例程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.4 ex
12、it( )和abort( )函数1.exit( )函数(1)作用: 无条件正常终止程序的执行,并将控制返回给操作系统。(2)格式: exit();2.abort( )函数(1)作用: 用于异常终止程序的执行。(2)格式: abort( );3.5 程序设计举例 程序设计有三种基本结构,即顺序结构、分支结构和循环结构。 分支结构程序主要是用分支语句(if、switch)实现的,而循环结构程序则主要是用循环语句(while、do while、for)语句实现。 本节重点对分支与循环语句的应用编程举例。 3.5.1 分支语句应用举例 分支语句用于实现分支结构程序设计。 能够用分支结构程序解决的常见问
13、题有:比较数的大小、找出若干数中最大值与最小值、分段函数、解一元二方程、判断闫年、多分支问题。 分支语句有if语句和switch语句。 (1)if 语句 if语句又有单选、双选与多选if语句,格式分别为: 单选if语句 双选if语句 多选if语句if () if () if () else else if else if语句可以嵌套使用,但应当注意else与if的配对关系。C+规定:else总是与其前面最近的还没有配对的if进行配对。if 语句【例3.18】 编写程序,求一元二次方程ax2+bx+c=0的解。 C+程序设计的一般步骤为:l进行数学分析建立求解数学模型;l 根据数学模型确定程序框
14、架及所用语句;l 根据数学模型确定所要定义的变量及其数据类型;l给变量输入数据;l 编写计算程序,执行程序得到运算结果;l输出运算结果。 例程例程(2)switch语句 switch语句的格式为: switch () case : . case : default: 注意:在执行switch语句的过程中,一般用break语句结束switch语句的执行【例3.19】 输入某一年的年份和月份,计算该月的天数。 例程例程3.5.2 循环语句应用举例 循环语句用于实现循环结构程序设计。 能够用循环结构程序解决的常见问题有:累加和、连乘积、求一批数的和及最大值与最小值、求数列的前n项、判素数、求两个整数
15、的最大公约数和最小公倍数、用迭代法求平方根、用穷举法求不定方程组的整数解、打印图形等等。 循环语句有while语句、dowhile语句和for语句。 循环语句格式while语句、dowhile语句和for语句的格式如下:while语句 dowhile语句 while () do ; while (); for语句 for (;) ;应注意三种循环语句的特点、它们间的区别及由三种循环语句构成的嵌套循环结构。 循环语句应用举例【例3.20】 用公式 ,即:求自然对数底e的近似值(n=10)。分别用while语句、dowhile语句和for语句三种语句实现。 【例3.21】 ,用累加和的方法求s值,
16、直到 最后一项 0.00001为止。【例3.22】 裴波那契数列的前几个数为1,1,2,3,5,8,其规律为: f1=1(n=1) f2=1(n=2) fn=fn-1+fn-2(n3) 编写程序求此数列的前面40个数。101n!n11e!1! 31! 21! 111ne!) 1(! 41! 31! 21! 11! 01nsn!) 1(nn例程例程例程例程例程例程循环语句应用举例【例3.23】 有100个学生种100棵树,其中高中生每人种3棵树,初中生每人种2棵树,小学生每3人种1棵树,问高中生、初中生、小学生各有多少人?【例3.24】 编写程序,按下列格式打印九九表。 * 1 2 3 4 5
17、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 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81例程例程例程例程本章小结 一个C+程序由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数体组成,函数体由数据定义和若干个执行语句组成。语句是组成程序的基本单元。 程序的三种基本结构和C+语句1.程序的三种基本结构 组成C+程序的函数是由若干个基本结构组
18、合而成的。有三种基本结构,即顺序结构、分支结构和循环结构。各种控制结构是通过语句来实现的。2.C+中的语句 C+语言的语句可以分成六大类,即说明语句、控制语句、函数调用语句、表达式语句、空语句和复合语句。其中控制语句主要有分支语句与循环语句。 3.分支语句 分支语句用于实现分支结构程序设计。分支语句有if语句和switch语句。 (1)if浯句 if语句的格式为: if () else if语句可以嵌套使用,但应当注意else与if的配对关系。C+规定:else总是与其前面最近的还没有配对的if进行配对。(2)条件运算符和条件表达式 由条件运算符(? :)构成的条件表达式的一般格式为: ?:
19、(3)switch语句 switch语句的格式为: switch () case : case : . case : default: 分支结构程序解决的常见问题 注意:在执行switch语句的过程中,每当执行完一个case后面的语句后,程序会不加判断地自动执行下一个case后面的语句。如果要结束switch语句的执行,可用break语句来实现。 能够用分支结构程序解决的常见问题有:比较数的大小、找出若干数中最大值与最小值、分段函数、解一元二方程、判断闫年、多分支问题。 4.循环语句 循环语句用于实现循环结构程序设计。循环语句有while语句、dowhile语句和for语句。(1)while语
20、句 while语句用来实现“当型”循环结构,其格式为: while () ( 2)dowhile语句 dowhile语句用来实现“直到型”循环结构,其格式为: do while (); (3)for语句 for语句是功能较强的一种循环语句,其格式为: for (;) 应注意三种循环语句的特点、它们间的区别及由三种循环语句构成的嵌套循环结构。循环结构程序解决的常见问题 能够用循环结构程序解决的常见问题有:累加和、连乘积、求一批数的和及最大值与最小值、求数列的前n项、判素数、求两个整数的最大公约数和最小公倍数、用迭代法求平方根、用穷举法求不定方程组的整数解、打印图形等。 5.控制执行顺序的语句 (
21、1)break语句 break语句的格式为: break; break语句只能用在循环语句和switch语句中,其功能是终止循环语句和switch语句的执行。(2)continue语句 continue语句的格式为: continue; continue语句只能用在循环语句中,其功能是结束本次循环,重新开始下一次循环。 (3)goto语句 C+允许语句前带有一个标号,称为语句标号。 C+中带标号语句的格式为: : goto语句的格式为: goto ; goto语句的功能是改变程序的执行流程,无条件地转移到指定语句标号的语句处去执行。从程序设计的角度出发,在程序设计时应尽量避免使用goto语句。
22、 6本章重点、难点重点:重点:程序的三种基本结构,各种控制语句的格式、功能、执行过程及使用方法。难点:难点:使用if、while、for语句编写分支与循环程序。例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 void main(void) int a,b,max; coutab; if (ab) max=a; else max=b; coutmax=maxendl;返回返回
23、程序执行后提示: 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; else max=c; else if (bc) max=b; else max=c; coutmax=maxendl;
24、程序执行后提示: 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 data error.n; 返回返回例 3.7(B)#include void main
25、() 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 void main() int m,c; float d,f; c
26、outm; 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; while (i
27、=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); co
28、utsum=sumendl;返回返回例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+
29、) t=t*i; coutt=tendl;返回返回例3.15#include 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(1)#include #include #include void main(void) int a,k,i,n,flag; n=0; for (a=100;a=200;a+) k=sqrt(a); flag=1; for (i=2;i=k & flag=1;i+) i
30、f (a%i=0) flag=0; if (flag=1) coutsetw(12)a; n=n+1; i f ( n % 5 = = 0 ) coutendl; coutendl; 程序运行后,输出:101 103 107 109 113127 131 137 139 149151 157 163 167 173179 181 191 193 197199返回返回例3.16(2)#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;ik) co
31、utsetw(12)a; n=n+1; i f ( n % 5 = = 0 ) coutendl; coutendl; 程序运行后,输出: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; coutInput 10 integer:; for (i=1;ia; if (a=0) continue; k+; s+=a; coutk=kts=sn;程序执行后提示: Input 10 integer:1
32、 2 3 4 5 6 7 8 9 0 k=9 s=45返回返回例3.18(1)#include #include void main(void) float a,b,c,d,t1,t1,x1,x2; coutabc; if (a=0.0) if(b=0.0) coutInput data error!endl; else x1=c/b; coutSingle root:x1endl; e l s e d=b*b4*a*c; t1=b/(2*a); t2=sqrt(fabs(d)/(2*a); if (d=0.0) x1=t1; coutTwo equal real roots:x10.0) x
33、1=t1+t2; x2=t1t2; coutTwo distinct real roots:x1,x2endl; else coutComplex roots:; coutt1+t2i,t1t2iendl; 例3.18(2)例3.18(3)程序运行后,提示: Input a,b,c:2 -5 3输出: Two distinct real roots:1.5,1返回返回例3.19(1)#include void main() int year,month,day; coutyearmonth; switch (month) case 1: case 3: case 5: case 7: case
34、 8: case 10: case 12:day=31;break; 例3.19(2) case 4: case 6: case 9: case 11:day=30;break; case 2:if (year%400=0 | year%4=0 & year%100!=0) day=29; else day=28; break; default:coutInput data error!endl;day=0;break; if (day!=0) coutThe day of year,month is dayendl;例3.19(3)程序运行后,提示: Input year and month
35、:2002 1输出: The day of 2002,1 is 31返回返回例3.20(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.20(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=sen
36、dl; 程序执行输出: e=2 例3.20(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.20(4) 在本例中,程序运算输出结果e=2与自然对数的底e=2.71828误差较大。为了使误差控制在规定的范围之内,应要求数列中最后一项的值小于。即: 若取=0.00001,则循环的结束条件为p=0.00001。上述程序可改为如下形式。!1n例3.20(5) (用while语句编程)#include void main(void) int i=1; float s=1.0,t=1,p=1; while(p=0.00001) t=t*i; p=1/t; s=s+p; i+;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职代会员工管理办法
- 上海高危产妇管理办法
- 行业系统消防管理办法
- 2025年HF-FB防弹玻璃项目发展计划
- 蚌埠艺术培训管理办法
- 营销费用兑付管理办法
- 行政平台维护管理办法
- 专利实施许可管理办法
- 磁器口古镇管理办法
- 精装房验收管理办法
- 药学综合知识与技能11讲解
- “匠心杯”班组长管理创新技能竞赛(决赛)考试题库500题(含答案)
- 森林防火林区道路建设基本要求
- 临床思维方法与医患沟通
- 幼儿居家饮食安全
- 《钢铁行业智能制造标准体系建设指南(2023版)》
- 设计材料与工艺课程 课件 第1章 产品设计材料与工艺概述
- 《SDH学习知识总结》课件
- GB/T 44841-2024非合金及低合金铸铁焊接工艺评定试验
- 2024年20kV及以下配电网工程劳务定额计价清单
- DB11T 1620-2019 建筑消防设施维修保养规程
评论
0/150
提交评论