项目4-循环结构程序设计1_第1页
项目4-循环结构程序设计1_第2页
项目4-循环结构程序设计1_第3页
项目4-循环结构程序设计1_第4页
项目4-循环结构程序设计1_第5页
已阅读5页,还剩41页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

循环:跑圈循环结构就像一圈圈地跑足球场,跑完一圈再跑一圈。也就是说,在符合的条件下,重复执行某项任务。像400米一圈的跑道,跑800米的话就跑2圈,当跑完第一圈接着跑第二圈,第二圈结束已经到达800米,终止跑步。i=1;//从第1圈开始跑do{//跑10圈

printf("在跑第"%d"圈。",i); i++;}while(i<=10);任务4.1用while语句实现的循环结构任务说明在日常生活中遇到的有些循环问题,事前不知道循环次数,这时可以使用while语句实现循环。在本任务中,将学习while语句的格式、执行流程和应用方法。任务实施1.任务功能编写程序,用while语句求1+2+3+…+100的值。2.编程思路〔1〕取数。第一个数为1,其后的数都是在前一个数的根底上加1得到,直至100。〔2〕求和。可定义一个变量sum来存放和,给sum赋初值0。当第1次判断表达式i<=100成立时,第一次执行循环体,sum+1赋给sum,i的值变为2;当第2次判断表达式i<=100成立时,第二次执行循环体时,sum+2赋给sum,i的值变为3;…。以此类推,直至循环结束,执行流程如图4-1所示。图4-1求1+2+3+…+100流程图3.源程序Ex4-1.c#include<stdio.h>voidmain(){inti=1,sum=0;//循环控制变量i和累计器sum初始化

while(i<=100){sum+=i;//累加

i++; //i自加

}printf("sum=%d\n",sum);//输出结果}4.运行、调试用VC++6.0开发环境下,编辑、编译和调试源程序Ex4-1.c。程序运行的结果为:sum=5050任务拓展在源程序Ex4-1.c的根底上,假设把while的循环体改为:{i++; /*i自加*/sum+=i;/*累加*/}请同学们分析一下结果为多少?如果想得到正确的结果sum=5050,那么如何修改源程序Ex4-1.c?1.while语句格式

while又叫“当型”循环语句,它的格式为:

while(表达式)

{

循环体语句;

}相关知识2.while语句执行流程

while语句执行流程如图4-2所示。

while循环执行过程是:

①求解表达式(循环继续条件)。如果其值为非0,转第②步;否则转第③步。②执行循环体语句组,然后转第①步。③执行while语句的下一条。图4-2while语句的执行流程

注意事项:(1)循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。(2)while语句的表达式一般是关系表达或逻辑表达式,也可以是其它表达式,只要表达式的值为非0,即可使循环继续。(3)由于while语句是先判断表达式,后执行循环体语句,所以循环体语句有可能一次也不执行。

课堂练习:

编写程序,求的值。总结:用while循环求#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体课堂练习:功能:为指定的成绩进行加分,直到分数大于等于60分为止,输出加分前的成绩和加分后的成绩,并且统计加分的次数。步骤:1.定义一个变量,用来保存加分的次数。2.使用循环为成绩加分3.每次执行循环加分操作,加1分,并且统计加分的次数

P72思考与练习:2.〔1〕〔2〕1.do-while语句格式do-while语句也称之为“直到〞循环语句,它的格式为:do{循环体语句;}while(表达式);2.dowhile语句执行流程do-while语句执行流程如图4-4所示。do-while循环执行流程是:①执行循环体语句。②求解表达式。如果表达式的值为非0〔真〕,那么转向第①步继续执行;否那么,转向第③步。③执行do-while的下一条语句。do-while循环语句的特点是:先执行循环体语句,然后再求解表达式,决定是否继续循环。循环体语句至少被执行一次。相关知识图4-4do-while语句的执行流程本卷须知:〔1〕“while(表达式)〞后面的分号不能省。〔2〕当循环体语句仅由一条语句构成时,可以省略大括号{}。

【例4-1】用do-while语句求1+2+3+…+100的值。#include<stdio.h>voidmain(){inti=1,sum=0;//循环控制变量i和累计器sum初始化

do{sum+=i;//累加

i++;//变量i自加

}while(i<=100);printf("sum=%d\n",sum);}任务说明while语句在进入循环之前先判断循环条件。但在日常生活中,有时也需要先无条件执行一次循环体语句,然后再根据判断条件确定是否重复执行循环体语句。这时可以使用do-while语句实现循环控制。在本任务中,将学习do-while语句的格式、执行流程和应用方法。任务实施1.任务功能编写程序,计算数学式的近似值。要求至少累加到1/n<=0.00984为止。输出循环次数及累加和。

2.编程思路图4-3计算数学式近似值的流程图

3.源程序Ex4-2.c#include<stdio.h>voidmain(){intn=1,N;floatsum=0;do{sum=sum+(float)1/n;//将每一项累加到sum中

n++;//变量n自加,求新的分母值

}while((float)1/n>0.00984);N=n-1;//求循环的次数

printf("N=%d\nsum=%.4f\n",N,sum);}4.运行、调试用VC++6.0开发环境下,编辑、编译和调试源程序Ex4-2.c。程序运行的结果为:任务拓展用while语句编写循环结构程序,重新计算本任务中的数学式的近似值。要求至少累加到1/n≤0.00984为止。

作业与练习补充题思考与练习P733.编程题〔1〕1.for语句格式

for(表达式1;表达式2;表达式3)

{

循环体语句;

}“表达式1”-对循环变量赋初值。“表达式2”-判断循环变量是否满足继续循环的条件。“表达式3”-改变循环变量。2.for语句的执行流程执行过程流程如图4-6所示。相关知识图4-6for语句的执行流程【例4-2】用for语句求1~100的累计和。#include<stdio.h>voidmain(){inti,sum=0;//循环控制变量i和累计器sum初始化for(i=1;i<=100;i++){sum+=i;//累加

}

printf("sum=%d\n",sum);}程序运行的结果为:sum=50503.for语句的几点说明〔1〕“表达式1〞、“表达式2〞和“表达式3〞局部均可缺省,甚至全部缺省,但其间的分号不能省略。如for(;;)①表达式1省略。例:i=1;for(;i<=100;i++)sun+=i;由此可以看出表达式1并不是真的省略了,而是换了一个地方。②表达式3也可以省略。例:for(i=1;i<=100;){sum+=i;i++;}③表达式2省略。例如:for(i=1;;i++)sum+=i;如果表达式2省略,就不判断循环条件,即认为循环条件始终为真,循环无终止地进行,如果没有别的方法退出循环,将成为死循环。循环条件2省略的流程如图4-7所示。

图4-7循环条件省略流程图〔2〕当循环体语句仅由一条语句构成时,可以省略大括号{}。〔3〕表达式1,既可以是给循环变量赋初值的赋值表达式,也可以是其它表达式〔如逗号表达式〕。例如:for(sum=0,i=1;i<=100;i++)sum+=i;〔4〕表达式2是一个逻辑量,除一般的关系〔或逻辑〕表达式外,也允许是数值〔或字符〕表达式。C语言将非0值看成是逻辑真,将0值看成是逻辑假。

P72思考与练习:3.〔3〕任务4.3用for语句实现的循环结构任务说明在三种循环语句中,for语句功能更强、最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定,但给出了循环继续的条件的情况。本任务将学习for语句的格式、执行流程和应用方法。任务实施1.任务功能编写程序,求n的阶乘n!〔n!=1*2*…*n〕。2.编程思路由任务要求可知n!=1*2*…*n,假设从键盘输入n的值为5,那么5!=1*2*3*4*5=120。编程时,可首先设一个累乘器fact用来存放乘积,初值为1。然后分别把1,2,…,n与fact相乘后赋值给fact。具体重复运算如下:图4-5求n!的流程图

第1次:fact=fact*1

第2次:fact=fact*2

…

第n次:fact=fact*n

执行流程如图4-5所示。3.源程序Ex4-3.c

#include<stdio.h>voidmain(){ 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);}4.运行、调试用VC++6.0开发环境下,编辑、编译和调试源程序。程序运行的结果为:Inputn:5<回车>5!=120任务拓展用while循环求n的阶乘n!〔n!=1×2×…×n〕,体会与本任务中用for循环求阶乘n!的不同之处。三种循环的比较while和do...while可以根据具体情况选用。假设有一种棋类游戏,首先掷骰子,假设不为6,前进骰子的点数的步长;假设为6,前进骰子的点数的步长,并可以再掷一次。循环的嵌套三种循环可互相嵌套,层数不限不允许交叉,循环与分支可以相互嵌套但不允许交叉外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程

(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环

1.for循环嵌套

for循环嵌套如图4-9~图4-11所示。图4-9for与for循环的嵌套图4-10for与while循环的嵌套图4-11for与do-while循环的嵌套循环嵌套相关知识

2.while循环嵌套while循环嵌套如图4-12~图4-14所示。图4-12while与while循环的嵌套图4-13while与for循环的嵌套图4-14while与do-while循环的嵌套3.do-while循环嵌套do-while循环嵌套如图4-15~图4-17所示。图4-15do-while与do-while嵌套图4-16do-while与for嵌套图4-17do-while与while嵌套

4.课堂练习〔1〕设计一程序,计算1!+2!+3!+…+10!。执行流程如图4-18所示。#include<stdio.h>voidmain(){inti,j,fact,sum=0;for(i=1;i<=10;i++){fact=1; for(j=1;j<=i;j++) { fact=fact*j;} sum=sum+fact;}printf("sum=%ld\n",sum);}图4-18阶乘和的执行流程〔2〕设计一程序,显示输出如下所示的矩形。矩形图案如图4-19所示,执行流程如图4-20所示。#include<stdio.h>voidmain(){

inti,j;

for(i=1;i<=5;i++){for(j=1;j<=9;j++){ printf("*");}printf("\n");}}图4-20输出矩形图案的执行流程图4-19矩形图案

〔3〕设计一程序,显示输出如下所示的三角形。三角形图案如图4-21所示,执行流程如图4-22所示。#include<stdio.h>voidmain(){

inti,j,k;

for(i=1;i<=5;i++)

{

for(j=1;j<=5-i;j++)

{

printf("");

}

for(k=1;k<=2*i-1;k++)

{

printf("*");

}

printf("\n");

}}图4-21三角形图案

图4-22输出三角形图案的执行流程分析:共有5行,外循环变量i:1~5第一行输出4个空格,1个星号第二行输出3个空格,3个星号第三行输出2个空格,5个星号第5行输出0个空格,9个星号任务4.4循环嵌套任务说明假设在循环结构的循环体内,又出现了另一个完整的循环结构,那么称为“循环嵌套〞。通常把里面的循环称为“内循环〞,外面的循环称为“外循环〞。本任务主要学习循环嵌套编程的方法。任务实施1.任务功能用循环嵌套编写程序输出九九乘法口诀表。2.编程思路乘法表的特点是:〔1〕共有9行;〔2〕每行的式子数很有规律,第几行,就有几个式子;〔3〕对于每一个式子,既与所在的行有关,又与所在的行上的位置〔列〕有关。我们先看输出其中一行的情况。假设要输出的是第i行,我们知道i行共有i个式子,可用如下程序段实现:for(j=1;j<=i;j++) printf("%3d*%d=%-2d",j,i,i*j);如果给上述程序段加一个外循环,使i从1取到9,每执行一次内循环,就输出了乘法表中对应行的所有式子。执行流程如图4-8所示。图4-8输出九九乘法口诀表执行流程图3.源程序Ex4-4.c#include<stdio.h>//包含头文件voidmain(){ inti,j,k=0;for(i=1;i<=9;i++)//外循环执行9次

{ for(j=1;j<=i;j++)//内循环每次的执行次数与i有关

{ k=i*j; printf("%3d*%d=%-2d",j,i,k);//输出结果

}printf("\n");//换行

}}4.运行、调试用VC++6.0开发环境下,编辑、编译和调试源程序。程序运行的结果为:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81任务拓展用双层for循环打印下面的图形。********************提示:外层用一个for循环〔控制图形所在的行〕,内层用两个for循环〔一个用来控制每行图形中“*〞输出,另一用来控制每行图形中空格“〞的输出。〕任务4.5break、continue语句的应用任务说明前面介绍的while,do-while,for语句,都是在判定循环条件不成立时,才结束整个循环。在实际应用中,有时还要求在循环的中途退出循环,这就要用到break,continue语句。如果需要将程序转到指定的位置去执行,可以采用goto语句。本任务介绍以上三种语句的使用方法。任务实施

1.任务功能编写程序,把100~200之间的能被3整除的数输出,并且每行输出10个。

2.编程思路重复判断100~200之间的每一个数,可用前面介绍的while、do-while和for语句实现。假设某个数不能被3整除,那么可提前结束本次循环而直接进入下次循环,用continue即可。执行流程如图4-23所示。图4-23执行流程3.源程序Ex4-5.c#include<stdio.h>voidmain(){intn,count=0;//count用来计数for(n=100;n<=200;n++){if(n%3!=0)continue;//不能被3整除的跳过count++;printf("%5d",n);if(count%10==0)printf("\n");//假设count能被10整除,换行}printf("\n");//换行}4.运行、调试用VC++6.0开发环境下,编辑、编译和调试源程序。任务拓展求100~200之间的全部素数。提示:在源程序Ex4-5.c的根底上,用一个for循环嵌套即可处理。1.break语句break语句的格式很简单,由关键字break和分号组成。break语句的一般格式是:break;该语句只用于以下两个场合:〔1〕在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论