while和do while循环C语言while和do while循环详解Word下载.docx

上传人:b****5 文档编号:21512522 上传时间:2023-01-30 格式:DOCX 页数:8 大小:108KB
下载 相关 举报
while和do while循环C语言while和do while循环详解Word下载.docx_第1页
第1页 / 共8页
while和do while循环C语言while和do while循环详解Word下载.docx_第2页
第2页 / 共8页
while和do while循环C语言while和do while循环详解Word下载.docx_第3页
第3页 / 共8页
while和do while循环C语言while和do while循环详解Word下载.docx_第4页
第4页 / 共8页
while和do while循环C语言while和do while循环详解Word下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

while和do while循环C语言while和do while循环详解Word下载.docx

《while和do while循环C语言while和do while循环详解Word下载.docx》由会员分享,可在线阅读,更多相关《while和do while循环C语言while和do while循环详解Word下载.docx(8页珍藏版)》请在冰豆网上搜索。

while和do while循环C语言while和do while循环详解Word下载.docx

为了避免程序陷入死循环,必须要有能改变循环控制变量的语句,使循环控制表达式Exp_cntrl的值趋于逻辑假,以便使循环趋于终止。

【例1】统计输出100以内的所有奇数之和。

分析:

本题是重复执行“把100以内的当前奇数1、3、5、7,…累加求和”的相似操作,故采用循环结构。

循环算法的关键是要确定循环条件表达式和循环体。

循环控制变量及初始条件确定:

由题意可知,奇数i作为循环控制变量,初值为第一个奇数,即i=1。

另外,还有求和变量sum=0。

循环条件表达式的确定:

循环控制变量i为[1,100]间的奇数。

故循环条件表达式为i<

=100。

循环体确定:

该题循环体中包含以下两部分操作。

∙把当前奇数变量i累加到求和变量sum中,即sum+=i;

∙为计算当前奇数的下一个奇数做准备,也就是控制变量的增量部分,即i+=2。

流程图如图2所示。

图2流程图

实现代码如下:

1.#include<

stdio.h>

2.intmain(void){

3.intsum=0,i=1;

//i初始为第一个素数

4.while(i<

=100)//循环执行的判断条件

5.{

6.sum+=i;

7.i+=2;

//控制变量的增量

8.}

9.printf("

sum=%d\n"

sum);

10.return0;

11.}

运行结果为:

sum=2500

需要说明的是,必须在零的基础上进行累加,故sum需要初始化为0,否则将是无意义的随机值。

循环控制条件不必刻意去思考最后一个奇数是否包含100,让程序根据奇数的定义及相邻奇数的差值自行计算确定100以内的最后一个奇数。

do-while循环

do-while循环的格式如下。

do{

Statement_1;

Statement_2;

}while(Exp_cntrl);

//分号不可丢

do

Simp1e_Statement;

while(Exp_cntrl);

注意,在do-while结构中,while括号后的分号不能丟。

do-while循环的执行流程是:

首先无条件地执行一次循环体,然后再根据循环控制表达式的值来判断是否继续执行循环体。

若为真,则继续执行;

若为假,则停止执行,退出do-while循环。

也就是说,do-while循环至少执行一次循环体。

do-while循环和while循环的主要差别是:

前者至少执行一次循环体,后者有可能一次也不执行循环体。

do-while循环的执行流程图,如图3所示。

图3do-while循环流程图

do-while循环主要用在一直进行尝试性的操作,直到满足条件为止的情景。

【例2】编程实现猜数字游戏,假设谜底为0〜10的整数,猜谜者每次输入一个整数,直到猜对为止。

本题属于先输入所猜数字才能判断是否猜中,如果猜中,游戏结束,如果没猜中,继续猜,直到猜中为止。

故该题符合do-while循环的使用场景。

实现代码为:

3.intpwd=7,gs;

//pwd:

谜底

4.printf("

\tGamesBegin\n"

);

5.do{

6.printf("

Pleaseguess(0~10):

"

7.scanf("

%d"

&

gs);

8.}while(gs!

=pwd);

9.printf("

\tSucceed!

\n"

10.printf("

\tGainesover\n"

11.return0;

12.}

运行结果:

GamesBegin

3

5

8

7

Succeed!

Gainesover

while和do-while的等价关糸

在多数情况下,while循环和do-while循环是等价的,如下例所示。

【例3】计算表达式1-1/2+1/3-1/4+1/5-----1/100的值。

通过观察可以发现,该表达式是把分母从1开始到100为止的所有数据项:

1、-1/2、1/3、…、-1/100累加求和。

也就是说先判断分母是否小于等于100,如果是,再组建该项,并把该项累加到求和变量上。

符合循环条件前置的特点,故可选择while循环实现。

实现代码:

2.intmain(void)

3.{

4.doubles=0.0,item;

5.intsign=1,n=1;

//n:

分母

6.while(n<

=100)

7.{

8.item=sign*(1.0/n);

//组建当前项,注意1.0的作用

9.s+=item;

//累加当前项

10.sign*=-1;

//改变下一项的符号位

11.n++;

//改变下一项的分母

12.}

13.printf("

sum=%lf\n"

s);

//double的格式控制符为%lf

14.return0;

15.}

sum=0.688172

再次分析:

由于事先知道求和变量s中至少包含一项1,故第一次累加的分母判断条件可以去掉,从第二项开始,首先判断分母是否小于等于100,再组项,然后累加。

故该例子也符合循环条件后置的情况,所以本例也可以使用do-while循环,实现求该表达式的值。

4.doubles=0.0,item;

6.do

//n:

12.}while(n<

=100);

sum=0.688172

注意,每一项的组建均是:

分数值(分子与分母相除的结果)与符号位相乘的结果,尽管在本例中写成term=sign*1.0/n;

同样能得到正确结果,但不提倡这种写法。

建议分数值表示部分显式加上括号,即:

item=sign*(1.0/n);

这是一种规范的写法,这样可避免因编译器的差异而造成结果不确定的情况,即增强了代码的可移植性。

另外,参考代码item=sign*(1.0/n);

中的1.0如果误写成1,即item=sign*(1/n);

则输出错误结果:

sum=1.000000。

原因是除了第一项n为1时,1/n=1外,其余当n≥2时,1/n分子、分母同为整数值,结果为取整,故从第二项开始每一项的结果均为0。

while和do-while的不等关糸

并不是所有的while循环都可等价替换为do-while循环结构。

当while循环第一次循环条件就不满足时,此时不能把该while循环转换为do-while循环。

如例4所示。

【例4】分析如下两段代码的输出结果,总结while循环和do-while循环的差异。

实现代码1:

4.ints=0,i=15;

5.while(i<

=10)

6.{

7.s+=i;

8.i++;

9.}

s=%d\n"

实现代码2:

5.do

9.}while(i<

=10);

10.printf("

使用while循环结构,循环判断条件前置,先判断i是否满足小于等于10时,如果满足,则把i累加到3上;

否则,循环结束。

本例中i初始为15,不满足i小于等于10,故循环体一次也不执行。

s为0。

使用do-while循环结构,循环判断条件后置,先无条件执行一次循环体,即先把i的初始值15累加到s上,i自增1变为16,然后判断i的值16是否小于等于10,结果为假,故循环终止。

s的值为15。

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

当前位置:首页 > 医药卫生 > 预防医学

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

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