版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计5.1循环语句概述
5.2for语句和while语句
5.3直到型循环do-while语句
5.4break语句与continue语句5.5应用举例良好的源程序书写习惯──注释(续)[Return]第5章循环结构程序设计5.1循环语句概述
5.215.1循环语句概述求1~100的累计和。根据已有的知识,可以用“1+2+……+100”来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum+=n来计算(n依次取1、2、……、100),只要解决以下3个问题即可:
(1)将n的初值置为1;
(2)每执行1次“sum+=n”后,n增1;
(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。
根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。在C语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。5.1循环语句概述求1~100的累计和。2(4)用goto语句和if语句构成循环。使用goto语句实现求解1~100累计和的程序可以如下:main(){intn=1,sum=0;loop:sum+=n;n++;if(n<=100)gotoloop;printf(“sum=%d\n”,sum);}其中“loop:”为语句标号(格式:标号:语句行),其命名遵循标识符命名规则。goto语句格式:goto标号,功能为:使系统转向标号所在的语句行执行。注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。
另外,从功能上说,for语句可完全代替当型循环语句while,所以该语句也不是必需的。[Return]
(4)用goto语句和if语句构成循环。使用goto语句实现35.1.1while语句(1)一般格式
while(循环继续条件)
{ 循环体语句组; }(2)执行过程1.求解“循环继续条件”表达式。如果其值为非0,转2;否则转3。2.执行循环体语句组,然后转1)。3.执行while语句的下一条。显然,while循环是for循环的一种简化形式(缺省“变量赋初值”和“循环变量增值”表达式)。
5.1while语句和用while语句构成的循环结构5.1while语句和用while语句构成的循环结构4[案例5.3]用while语句求1~100的累计和。
/*案例代码文件名:AL5_3.C*/
/*程序功能:求1~100的累计和*/
main()
{inti=1,sum=0; /*初始化循环控制变量i和累计器sum*/
while(i<=100)
{sum+=i; /*实现累加*/
i++; /*循环控制变量i增1*/
}
printf(“sum=%d\n”,sum);
} [程序演示]程序运行情况如下:
sum=5050
[案例5.3]用while语句求1~100的累计和。
/*55.循环嵌套(1)循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。(2)for语句和while语句允许嵌套,do-while语句也不例外。[Return]5.循环嵌套65.2直到型循环do-while语句1.一般格式do{循环体语句组;}while(循环继续条件); /*本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。2.执行过程执行过程如图5-3所示。(1)执行循环体语句组。(2)计算“循环继续条件”表达式。如果“循环继续条件”表达式的值为非0(真),则转向(1)继续执行;否则,转向(3)。(3)执行do-while的下一条语句。do-while循环语句的特点是:先执行循环体语句组,然后再判断循环条件。5.2直到型循环do-while语句1.一般格式7[案例5.4]用do-while语句求解1~100的累计和。
/*案例代码文件名:AL5_4.C*/
/*程序功能:求1~100的累计和*/
main()
{inti=1,sum=0; /*定义并初始化循环控制变量,以及累计器*/
do
{sum+=i; /*累加*/
i++;
}
while(i<=100); /*循环继续条件:i<=100*/
printf(“sum=%d\n”,sum);
} [程序演示]do-while语句比较适用于处理:不论条件是否成立,先执行1次循环体语句组的情况。除此之外,do-while语句能实现的,for语句也能实现,而且更简洁。[Return][案例5.4]用do-while语句求解1~100的累计和81.for语句的一般格式
for([变量赋初值];[循环继续条件];[循环变量增值])
{循环体语句组;}2.for语句的执行过程执行过程如图5-1所示。(1)求解“变量赋初值”表达式。(2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。(3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。(4)执行for语句的下一条语句。3.说明(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。1.for语句的一般格式
for([变量赋初值9(2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。(3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。例如,for(sum=0;i<=100;i++)sum+=i;for(sum=0,i=1;i<=100;i++)sum+=i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。
(2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形10在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。
[案例5.1]求1~100的累计和。
/*案例代码文件名:AL5_1.C*/
/*程序功能:求1~100的累计和*/
main()
{inti,sum=0; /*将累加器sum初始化为0*/
for(i=1;i<=100;i++)sum+=i; /*实现累加*/
printf("sum=%d\n",sum);
} [程序演示]程序运行情况如下:sum=5050在3条循环语句中,for语句最为灵活,不仅可11[案例5.2]求n的阶乘n!(n!=1*2*……*n)。
/*案例代码文件名:AL5_2.C*/
/*程序功能:求n!*/
main()
{inti,n;
longfact=1; /*将累乘器fact初始化为1*/
printf(“Inputn:”);scanf(“%d”,&n);
for(i=1;i<=n;i++)fact*=i; /*实现累乘*/
printf("%d!=%ld\n",n,fact);
} [程序演示]程序运行情况如下:
Inputn:5↙
5!=120[案例5.2]求n的阶乘n!(n!=1*2*……*n)。
125.4break语句与continue语句为了使循环控制更加灵活,C语言提供了break语句和continue语句。1.一般格式:break;continue;2.功能(1)break:强行结束循环,转向执行循环语句的下一条语句。(2)continue:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。3.break和continue语句对循环控制的影响如图5-4所示。4.说明(1)break能用于循环语句和switch语句中,continue只能用于循环语句中。(2)循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。[Return]5.4break语句与continue语句为了使循环控135.5应用举例[例5.5]求Fibonacci数列的前40个数。该数列的生成方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始,每个数等于前2个数之和。算法设计,请参见第2章第1节(2.1)。参考源程序如下:
/*案例代码文件名:AL5_5.C*/
main()
{longintf1=1,f2=1; /*定义并初始化数列的头2个数*/
inti=1; /*定义并初始化循环控制变量i*/
for(;i<=20;i++) /*1组2个,20组40个数*/
{printf(“%15ld%15ld”,f1,f2); /*输出当前的2个数*/
if(i%2==0)printf(“\n”); /*输出2次(4个数),换行*/
f1+=f2;f2+=f1; /*计算下2个数*/
}
} [程序演示]5.5应用举例[例5.5]求Fibonacci数列的14[例5.6]输出10~100之间的全部素数。所谓素数n是指,除1和n之外,不能被2~(n-1)之间的任何整数整除。算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。(2)判断某数n是否是素数的算法:根据素数的定义,用2~(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。判断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。参考源程序如下:main()
{inti=11,j,counter=0;
for(;i<=100;i+=2) /*外循环:为内循环提供一个整数i*/
[例5.6]输出10~100之间的全部素15{for(j=2;j<=i-1;j++) /*内循环:判断整数i是否是素数*/
if(i%j==0) /*i不是素数*/
break; /*强行结束内循环,执行下面的if语句*/
if(counter%10==0) /*每输出10个数换一行*/
printf(“\n”);
if(j>=i) /*整数i是素数:输出,计数器加1*/
{printf(“%6d”,i);
counter++;
}
}
} [程序演示]
思考题:外循环控制变量i的初值从11开始、增量为2的作法有什么好处?为提高运行速度,如何优化内循环?(提示:从减少计算次数角度来考虑)
[Return]{for(j=2;j<=i-1;j++)16良好的源程序书写习惯──注释(续)(3)循环结构在C语言中,循环结构由循环语句for、while和do...while来实现。作为注释,应在它们的前面说明其功能,在循环条件判断语句行的后面,说明循环继续条件的含义,如下所示。
1)for语句/*功能*/for(变量初始化;循环条件;变量增值)/*循环继续条件的含义*/{……}良好的源程序书写习惯──注释(续)(3)循环结构172)while语句/*功能说明*/while(循环条件) /*循环继续条件的含义*/{……}3)do...while语句/*功能说明*/do{……}while(循环条件); /*循环继续条件的含义*/如果循环嵌套,还应说明每层循环各控制什么。
[Return]
2)while语句18第5章循环结构程序设计5.1循环语句概述
5.2for语句和while语句
5.3直到型循环do-while语句
5.4break语句与continue语句5.5应用举例良好的源程序书写习惯──注释(续)[Return]第5章循环结构程序设计5.1循环语句概述
5.2195.1循环语句概述求1~100的累计和。根据已有的知识,可以用“1+2+……+100”来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum+=n来计算(n依次取1、2、……、100),只要解决以下3个问题即可:
(1)将n的初值置为1;
(2)每执行1次“sum+=n”后,n增1;
(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。
根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。在C语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。5.1循环语句概述求1~100的累计和。20(4)用goto语句和if语句构成循环。使用goto语句实现求解1~100累计和的程序可以如下:main(){intn=1,sum=0;loop:sum+=n;n++;if(n<=100)gotoloop;printf(“sum=%d\n”,sum);}其中“loop:”为语句标号(格式:标号:语句行),其命名遵循标识符命名规则。goto语句格式:goto标号,功能为:使系统转向标号所在的语句行执行。注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。
另外,从功能上说,for语句可完全代替当型循环语句while,所以该语句也不是必需的。[Return]
(4)用goto语句和if语句构成循环。使用goto语句实现215.1.1while语句(1)一般格式
while(循环继续条件)
{ 循环体语句组; }(2)执行过程1.求解“循环继续条件”表达式。如果其值为非0,转2;否则转3。2.执行循环体语句组,然后转1)。3.执行while语句的下一条。显然,while循环是for循环的一种简化形式(缺省“变量赋初值”和“循环变量增值”表达式)。
5.1while语句和用while语句构成的循环结构5.1while语句和用while语句构成的循环结构22[案例5.3]用while语句求1~100的累计和。
/*案例代码文件名:AL5_3.C*/
/*程序功能:求1~100的累计和*/
main()
{inti=1,sum=0; /*初始化循环控制变量i和累计器sum*/
while(i<=100)
{sum+=i; /*实现累加*/
i++; /*循环控制变量i增1*/
}
printf(“sum=%d\n”,sum);
} [程序演示]程序运行情况如下:
sum=5050
[案例5.3]用while语句求1~100的累计和。
/*235.循环嵌套(1)循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。(2)for语句和while语句允许嵌套,do-while语句也不例外。[Return]5.循环嵌套245.2直到型循环do-while语句1.一般格式do{循环体语句组;}while(循环继续条件); /*本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。2.执行过程执行过程如图5-3所示。(1)执行循环体语句组。(2)计算“循环继续条件”表达式。如果“循环继续条件”表达式的值为非0(真),则转向(1)继续执行;否则,转向(3)。(3)执行do-while的下一条语句。do-while循环语句的特点是:先执行循环体语句组,然后再判断循环条件。5.2直到型循环do-while语句1.一般格式25[案例5.4]用do-while语句求解1~100的累计和。
/*案例代码文件名:AL5_4.C*/
/*程序功能:求1~100的累计和*/
main()
{inti=1,sum=0; /*定义并初始化循环控制变量,以及累计器*/
do
{sum+=i; /*累加*/
i++;
}
while(i<=100); /*循环继续条件:i<=100*/
printf(“sum=%d\n”,sum);
} [程序演示]do-while语句比较适用于处理:不论条件是否成立,先执行1次循环体语句组的情况。除此之外,do-while语句能实现的,for语句也能实现,而且更简洁。[Return][案例5.4]用do-while语句求解1~100的累计和261.for语句的一般格式
for([变量赋初值];[循环继续条件];[循环变量增值])
{循环体语句组;}2.for语句的执行过程执行过程如图5-1所示。(1)求解“变量赋初值”表达式。(2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。(3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。(4)执行for语句的下一条语句。3.说明(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。1.for语句的一般格式
for([变量赋初值27(2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。(3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。例如,for(sum=0;i<=100;i++)sum+=i;for(sum=0,i=1;i<=100;i++)sum+=i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。
(2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形28在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。
[案例5.1]求1~100的累计和。
/*案例代码文件名:AL5_1.C*/
/*程序功能:求1~100的累计和*/
main()
{inti,sum=0; /*将累加器sum初始化为0*/
for(i=1;i<=100;i++)sum+=i; /*实现累加*/
printf("sum=%d\n",sum);
} [程序演示]程序运行情况如下:sum=5050在3条循环语句中,for语句最为灵活,不仅可29[案例5.2]求n的阶乘n!(n!=1*2*……*n)。
/*案例代码文件名:AL5_2.C*/
/*程序功能:求n!*/
main()
{inti,n;
longfact=1; /*将累乘器fact初始化为1*/
printf(“Inputn:”);scanf(“%d”,&n);
for(i=1;i<=n;i++)fact*=i; /*实现累乘*/
printf("%d!=%ld\n",n,fact);
} [程序演示]程序运行情况如下:
Inputn:5↙
5!=120[案例5.2]求n的阶乘n!(n!=1*2*……*n)。
305.4break语句与continue语句为了使循环控制更加灵活,C语言提供了break语句和continue语句。1.一般格式:break;continue;2.功能(1)break:强行结束循环,转向执行循环语句的下一条语句。(2)continue:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。3.break和continue语句对循环控制的影响如图5-4所示。4.说明(1)break能用于循环语句和switch语句中,continue只能用于循环语句中。(2)循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。[Return]5.4break语句与continue语句为了使循环控315.5应用举例[例5.5]求Fibonacci数列的前40个数。该数列的生成方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始,每个数等于前2个数之和。算法设计,请参见第2章第1节(2.1)。参考源程序如下:
/*案例代码文件名:AL5_5.C*/
main()
{longintf1=1,f2=1; /*定义并初始化数列的头2个数*/
inti=1; /*定义并初始化循环控制变量i*/
for(;i<=20;i++) /*1组2个,20组40个数*/
{printf(“%15ld%15ld”,f1,f2); /*输出当前的2个数*/
if(i%2==0)printf(“\n”); /*输出2次(4个数),换行*/
f1+=f2;f2+=f1; /*计算下2个数*/
}
} [程序演示]5.5应用举例[例5.5]求Fibonacci数列的32[例5.6]输出10~100之间的全部素数。所谓素数n是指,除1和n之外,不能被2~(n-1)之间的任何整数整除。算法设计要点:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026汽车后市场完整性评估与售后服务链重构策略
- 2026轻工业投资扩张方向与市场潜力评估报告
- 2026中国智能家居设备渗透率提升路径与商业模式探讨报告
- 2026中国新能源汽车传动轴行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国叶黄素酯行业隐形冠军企业成长路径研究报告
- 2026Fast芯片组多场景压力测试与性能极限报告
- 2026中国数字营销行业深度分析与发展趋势与投资策略研究报告
- 2026马来西亚伊斯兰金融产品创新伊斯兰债券投资市场与全球竞争力比较分析
- 2026圣文森特和格林纳丁斯金融服务行业创新运营模式研究及投资产品设计变化分析
- 2026中国智能厨电行业市场现状分析及投资评估规划前景研究报告
- GB/T 13320-2025钢质模锻件金相组织评级图及评定方法
- 2026中国资源循环集团电池有限公司招聘4人备考题库及一套参考答案详解
- JJG(交通) 111-2012 前插式激光测距自动弯沉仪
- 《化工企业可燃液体常压储罐区安全管理规范》解读课件
- 高中高三数学解析几何专项课件
- GB/T 46623-2025金属增材制造成形件机械性能与其取样方向、位置的相关性
- 2025至2030中国生物质燃气设备行业市场发展分析及发展前景与投资报告
- 小儿败血症课件
- 危楼拆除安全培训课件
- 客运安全专题培训课件
- 心率失常教学课件
评论
0/150
提交评论