ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:42.63KB ,
资源ID:25089567      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25089567.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(while循环.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

while循环.docx

1、while循环while 循环语法形式:while(条件) 需要循环执行的语句;while 是“当”的意思。请首先和if语句作一个比较:if(条件) 条件成立时执行的语句;二者除了关键字不一样以外,结构完全一样。但一定要注意,在条件成立时,if语句仅仅执行一遍,而while语句则将反复执行,直到条件不再成立。请看while循环的流程图:程序从“前面的语句”开始执行,然后进行条件判断,如果条件成立,则执行一次“每次循环执行的语句”,再后请特别注意红色部分,这是我们碰上的,第一次会往后走流程:红线就像汽车拐弯,掉头到条件处(并不包括前面的语句),然后再进行下一次的条件判断直到某一次判断时条件不成立

2、了,程序“继续后面的语句”。我们用while的语法套用生活中的实际例子,可以直观地看出while的用法。假设有一个爱哭的小娃娃,有一天她要求父母给买一条小红裙,可惜父母不同意,于是她就开始一个循环:while ( 父母不给买小红裙) 我哭; 这段“代码”的意思是:当“父母不给买小红裙”,那么,小女孩就一遍一遍地哭。这就是我们和循环流程的第一个遭遇战。所举的例子看似直观:“小孩一遍遍地哭,直到父母给买裙”,但真正要用程序的语言来正确地表达出来,需要很多方面要考虑到,必竟,程序是严谨的。首先,一个合适的判断是否继续的条件相当重要。小女孩要继续哭,仅仅“父母不给买小红裙”,这显示不符合事实,想想我们

3、小时候,再会哭,最终也有累的时候,所以,要想继续哭,我们的条件有两个:“父母不给买小红裙”并且“我还没有哭累”。while ( 父母不给买小红裙 & 我还没有哭累) 我哭; 其次,大多数情况下,条件需要被恰当地改变。小女孩在不停地哭,那么她如何知道父母是否买了红裙呢?所以,她不能只顾哭,还得在哭的间隙观察大人是否同意买裙。至于是否哭累,我们假设小女孩有一个疲劳度,每哭一次疲劳度加1,当疲劳度到达200时,可怜的小女孩累了while(父母不给买小红裙 & 疲劳度 200) 我哭; 我偷看爸妈是否同意买裙; 疲劳度+;例一: 用 while 语句实现求从1到100的累加和。求12的和,我们可以写

4、a = 1 + 2;求1加到100,我们当然可以这样写 a = 1 + 2 + 3 + . 100.不过这样写显然太累人了,要从1写到100啊!所以聪明如高斯的你,当然也知道这样写:a = (1+100) * 50;这确实是个在任何时候都值得称赞的,又快又简的方法,只是今天我们想让计算机累一点,老老实实地从1加到100。首先用我们先学的while式的循环。请同学们打开CB,然后新建一空白的控制台程序,在main()函数体加入下面黑体部分代码。然后按F9运行。查看运行结果以加深印象。/-#include #pragma hdrstop/-#pragma argsusedint main(int

5、argc, char* argv)int sum = 0; /变量sum将用于存储累加和,将它初始化为0,这很重要。int i = 1; /i是每次要加的数,它从1开始。while ( i= 100) sum += i; i+;/输出累加结果:cout 1到100的累加和为: sum endl;getchar();sum 初始为0,然后在每一遍的循环里,它都加上i,而,i则每次都在被加后,增加1。最终,i递增到101,超过100了,这个循环也就完成了任务。运行上面程序,输出结果为:1到100累加和为为:5050例二:用while循环实现简单的统计功能统计功能在各行业里都经常用到,比如学校学生成

6、绩总分的统计,商店中每日销售额的统计等。下面我们实现一个学生成绩的统计。由于成绩中包含有80.5这样的需要小数的部分,所以我们使用实数类型。保存,然后关闭上面的工程,然后再新建一个控制台工程。在主函数main加入以下黑体部分的代码:/-#include #pragma hdrstop/-#pragma argsusedint main(int argc, char* argv) float sum,score; int num; /num 用于存储有几个成绩需要统计。 int i; /i 用于计数 /初始化: sum = 0; i = 1; cout =成绩统计程序= endl; /用户需事先

7、输入成绩总数: cout num; cout 总共需要输入 num 个成绩(每个成绩后请加回车键): endl; while ( i = num) cout 请输入第 i score; sum += score; i+; /输出统计结果: cout 参加统计的成绩数目: num endl; cout 总分为: sum endl; getchar();/-以下是运行结果,我输入4个成绩参加统计:回车结束上面的程序。稍作休息。为了更直观地了解循环流程,现在我们来跟踪这段程序中的while循环。1、首先在循环开始处设置断点(F5 功能):2、按F9运行程序,在DOS窗口提示“请输入待统计的成绩个数:

8、”时,输入4,并回车。3、程序将在一瞬间运行到第一步设置的断点所在行。即 while(.)这一行。 此时请鼠标挪到 i 上,稍等片刻,出现提示 “i=1,同样的方法可以观察num的值。可见第一遍循环时,i = 1,num = 4,条件:i = num 显然成立,循环得以继续。4、按F8,程序往下运行一行,接着再按F8,程序要求输入一个成绩,请切换到DOS窗口,随便输入一个数,并回车。回车后,程序运行到下图中蓝底的一行:5、之后,连续按F8,你将发现程序“回头”运行到 while(.)这一行。此时,i=2, i 0 ) a-;变量a初始值为 0,条件 a 0 显然不成立。所以循环体的 a-;语句

9、未被执行。本段代码执行后,变量a值仍为0;代码段二:int a = 0;do a-;while( a 0 );尽管循环执行前,条件 a 0 一样不成立,但由于程序在运行到 do.时,并不先判断条件,而是直接先运行一遍循环体的语句:a-。于是a的值成为 -1,然后,程序才判断 a 0 ,发现条件不成立,循环结束。do.while中的条件和while循环中的条件一样是:“允许继续循环的条件”,而不是“结束循环的条件”,这和Pascal语言中的do.until正好相反,学习过Pascal(Delphi)的学员可得注意。以笔者的经验,do.while循环用得并不多,大多数的循环用while.来实现会更

10、直观。下面我们仅简单地将1到100的连加程序转换为用do.while实现:int sum =0;int i=1;do sum += i; i+;while(i=100);例三:用 do.while实现可以多次统计的程序。在例二中,我们做了一个统计程序。假如一个学生有三门成绩,如语文,数学,英语要统计总分,例二的程序可以方便地使用,但如果要连续统计一个班级每个学生的这三门成绩,我们就得不断地运行例二的成绩,这显然不方便。一个同学的三门成绩需要一层循环,要不断统计多个同学各自的成绩,就需要再套上一层循环。请看下面例子中,如何在原来的 while.循环上再加一层do.while循环。程序的思路是:统

11、计完一遍后,就问一句是否要继续统计新同学的成绩,如果用户输入字母Y或y,表示需要统计一下位,否则,程序结束循环。这个程序是在例二的基础上进行功能改进,以下粗体部分为新加的代码。/-#include #pragma hdrstop/-#pragma argsusedint main(int argc, char* argv) float sum,score; int num; /num 用于存储有几个成绩需要统计。 int i; /i 用于计数 char c; /用来接收用户输入的字母 do /初始化: sum = 0; i = 1; cout =成绩统计程序= endl; /用户需事先输入成绩

12、总数: cout num; cout 总共需要输入 num 个成绩(每个成绩后请加回车键): endl; while ( i = num) cout 请输入第 i score; sum += score; i+; /输出统计结果: cout 参加统计的成绩数目: num endl; cout 总分为: sum endl; /提问是否继续统计: cout c; while( c = y | c = Y);/-程序完成一次统计以后,会提问“是否开始新的统计”,用户输入一个字母,存到变量 c,然后程序在do.while的条件里检查是否等于或。如果不等于,就结束循环。由于程序在统计之后有一个提问的时间

13、,所以,原来的getchar()就不再需要了。在这个例子,外层循环使用do.while是最好的选择,因为,用户运行本程序,多数情况下,他至少想统计一次。最后我们来看do.while循环的流程图,请和while的流程图对比。10.3for 循环for 循环里在,里用得最多,也是最灵活的循环语句。要学好它,需要从已经学过的while循环的身上,“挖掘”出有关循环流程的要素,这些要素隐藏在while,或do.while的背后,但它将直接体现在for循环的结构上。10.3.1循环条件三要素学习了两种循环,我们来挖掘一下循环流程中的“条件三要素”。第一、条件一般需要进行一定的初始化操作。请看我们用whi

14、le循环实现1到100累加的代码:int sum = 0; /变量sum将用于存储累加和,将它初始化为0,这很重要。int i = 1; /i是每次要加的数,它从1开始。while ( i= 100) sum += i; i+;这段代码中,循环的条件是 i = 100;因此,一开始,i肯定需要一个确定的值。前面的:int i = 0;这一行代码,在声明变量i的同时,也为i赋了初始值:1。这样,条件 i = 100 得以成立(因为i为1,所以 i 1 ) cout 死循环 1 永远为true。所以,一个最后可以变成不成立条件在大多数情况下是必需的。比如在while的那个例子:while ( i=

15、 100)条件i = 100 ,由于i 在循环中被改变,所以它至少在理论上有可能造成 i = 100 不成立。第三、在循环中改变循环条件的成立因素这一条和第二条互相配套。比如这段代码:int i=1;while ( i= 100) sum += i;同样是一段可怕的“死循环”。因为i没有被改变的机会,其值永远为,从而循环条件 i=100也就永远为真。所以在循环中最后一句(下面加粗部分),不可遗忘。while ( i= 100) sum += i; i+;当然,在这段程序里,i+除了起改变条件成立因素以外,同时也起上sum不断加递增的数,从而实现得到累加和。说完这一些,我们来看,中最灵活循环结构

16、:for循环。10.3.2三要素在for循环结构上体现for 循环的语法:for(条件初始化;条件;条件改变) 需要循环执行的语句;可见,for的结构中,不仅提供了的“条件”的位置,同时也提供了条件初始化,和条件改变的位置。这三者虽然在同一行上,但并不是依次连接地执行。条件初始化的表达式首先被执行(并且只被执行一次);然后程序检查条件是否成立,如果成立就执行循环体中的语句,否则直接结束循环。执行完一遍循环以后,程序执行“条件改变”语句。到100整数累加的程序,改为for循环写,是最合适的了:int sum = 0;int i;for( i=1; i = 100;i+) sum += i;程序先

17、执行条件初始化语句:i=1;然后立即判断条件i = 100 吗?显示,此时该条件成立;于是程序执行循环体的语句,此时只有一句: sum += i;然后,执行改变条件因子的语句:i+;此时,i值变为 2;程序再次判断条件 i = 100 ?,依然成立,于是开始第二遍循环变量i 可以初始化条件时才临时声明:for(int i = 1;i = 100;i+) for 语句的复合结构,使得程序变得简捷。比如上面的例子中,原来while或者do.while结构中,循环体必须两句语句,现在只需一句(即:i+这一句被移到for的特定位置上),这样,我们可以去除花括号:for(int i=0;i = 100;

18、i+) sum += 100;当然,如果在其它情况下,for的循环体仍需有多行语句时,仍是不可避免的。事实上,就算现在这种情况,我也建议大家使用花括号。这样可以让程序的结构看上去更清晰。在本例中,如果非要讲究简捷,我们还可以将循环体的那惟一的一行移到“条件改变”的位置:for(int i=1; i=100;sum += i,i+);sum += i和i+之间用逗号分开。而在for后面的()行末,则直接跟上分号,表示for不必再执行其它的语句。考虑到后置+的特性(在完成表达式的求值后,才进行加操作),也可以将sum += i和i+合为一句:for(int i=1;i=100;sum += i+)

19、;以上讲了for语句极尽合并之技巧,以求一个简捷。反过来,for语句也可以向 while或do.while语句一样拆开写:int i = 1;for(; i = 100;) sum += i; i+;看,条件初始化语句被移出for的结构,而条件改变语句则被当成一行普通语句,直接加入到循环体。而在相应的位置上,只留下分号,用于表示空语句(请注意这一行中有2个分号,分别在 i=100前后):for (; i = 100;)如上行所示,for循环结构中的“条件初始”和“条件的改变”表达式都被省略,在这种情况下for和while或do.while循环完全一样。比如求累加和:int i=1,sum=0;

20、for(;i=100;) sum += i; i+;int i=1,sum=0;while(i=100) sum += i; i+;下面分析几个实例:(用于分析的实例不提供上机的完整代码,请同学们自行创建空白工程,然后加入需要代码,确保每个实例都可运行,这是初学者逐步熟练的必经之路信不信由你。打开CB吧)。题一:用for循环在屏幕上逐行输出数字:200。分析:这需要一个变量,其值从变到,并且每变一次新值,就用 cout 语句在屏幕上输出其值。答案:for(int i=1;i=200;i+) cout i endl;由于循环中执行的动作只有一句,所以我们省略了。题二:能被、整除,这些数称为的因子

21、,请循环列出的所有因子。分析:因子?忘了吗?求的因子,就是求中哪些整数可以整除。我们学过%操作符,它用于求两数相除的余数。所以整除不整除,只要看余数是否为即可。答案:for(int i=1;i=36;i+) if(36 % i = 0) /余数为,说明整除 cout i ;/多输出一个空格,用于做两数之间的间隔如果运行程序,得到结果应是:在这道题中,我们也看到了两种流程的结合:for循环流程和if条件分支流程。复杂问题的解决,往往就是条件流程和循环流程的种种组合,下面要讲的多层循环也是这些组合中一种。10.4多层循环有些问题需要多层循环嵌套才能解决。前面可以多次统计的程序,就使用了两层循环。外

22、层的do.while实现重复统计,层的while循环实现一次统计。继续分析一些题目:题三:输出以下容,要求使用两种方法,第一种方法采用单层循环,第二种方法采用双层循环。123456789方法一:分析:单层循环的思路是:从输出到,并且,每当输出三个数字时,多输出一个换行符。答案:for(int i=1;i=9;i+) cout i; if( i % 3 = 0) /又一次用到“求余”操作。 cout endl;方法二:分析:双层循环的思路是:输出三行,每行输出三个数字。答案:for(int i=1;i=3;i+) for(int j=i;j=i+3;j+) cout j; cout endl;代

23、码中,层的for用于输出每一行的数字,而外层的for则在每一行输出完成后,输出一个换行符,用于换行.需要另加注意的是,层循环的条件初始化,和外层循环有关。即这一句:int j=i; 正是。每次开始层循环时,j的值都将从当前i的值开始。这道题似乎让人留恋于用单层循环解决一切,因为看上去用双层循环并不是很直观?题四:请用输出以下容:112123123412345123456123456712345678123456789题目刚出,只见一同学噼噼啪啪开始输入代码,并且很快在屏幕上输出正确的容,他的答案是:cout 1 endl;cout 12 endl;cout 123 endl;cout 1234 endl;cout 12345 endl;cout 123456

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1