-
1 文字讲解
-
2 视频讲解
-
3 拓展资料
一、while循环语句的有关知识
1、while语句的一般形式
while( 表达式 )
{
语句序列;
}
说明:①表达式是循环条件,语句序列为循环体。
二、while语句的执行过程

说明:
它的执行过程如图4-1所示。
① 首先计算“表达式”的值,如果非0,循环条件为真,则进入第②步,开始一次循环周期;如果为假,则进入第③步。
② 执行“{ }”内的“语句序列”,这些“语句序列“称为“循环体”,循环体执行完后,返回第①步,开始下一轮的循环条件测试。
③ 结束循环,执行 while 循环后面的语句。
while 语句中的表达式与 if 语句一样,通常是一个关系表达式或逻辑表达式,但从理论上讲,可以为任何类型的表达式。循环体中的语句既可以是简单语句,也可以是复合语句。
注意:
① 循环必须在有限的次数内结束,否则会出现“死循环”,在程序中应避免出现死循环。
② while循环执行的特点是先判断条件,后执行循环体,因此,循环次数可能为0。
三、while循环语句例题讲解
例4-1 编程求1+2+3+4+5
算法分析:
可以看成等差数列求和,公差d=1
下标i: 1,2,3,4,5, …, n, …
项: 1,2,3,4,5,…,an, …
公差d=1,a0=0, a1=1,
递推公式: ,
通项公式: an=n
初始化是 a0或a1开始
关键点:每次计算方法一样,重复项。
和Sn: 1,3,6,10,15, …,Sn, …
S0=0, S1=S0+a1=a1
递推公式:
通项公式: Sn=n*(n+1)/2
初始化是从 S0 或 S1 开始
关键点:每次计算方法一样,重复项。
初始值:,
S初始值:对于累加和,S应初始化为0,对于累乘积,S应初始化为1.
变量分析:由于下标与数据项完全一样,可以用变量 i 同时表示下标和数据项。变量 s 可以表示和 Sn 。特别注意,在某一时间,计算好当前项,对于前一项数据不需要保存,故可以使用 s=s+i 。
流程图:

源程序:
#include <stdio.h>
main( )
{ int sum, i;
sum = 0; // 注意:此处sum表示S0
i = 1; // 注意:此处i表示第一项a1与序号1
while( i<=5 )
{ sum = sum + i; // 表示累加当前项
i = i+1; // 表示产生下一项
}
printf("1+2+3+4+5=%d\n", sum); //输出和
}
运行结果如图4-2所示。

程序测试分析:
期望结果为15,运行结果为15,相符,表示程序正确。
运行过程如表4-1所示。
| 表4-1 例4-1的运行过程 | |||
| 变量名 | sum | i | 循环条件(i<=5) |
| 初始状态 | 0 | 1 | 真 |
| 第一轮循环后 | 0+1=1 | 2 | 真 |
| 第二轮循环后 | 1+2=3 | 3 | 真 |
| 第三轮循环后 | 3+3=6 | 4 | 真 |
| 第四轮循环后 | 6+4=10 | 5 | 真 |
| 第五轮循环后 | 10+5=15 | 6 | 假(结束循环) |
一个循环结构通常包含下面3个部分:
① 循环变量赋初值(如while语句前的语句“i=1;”)。
② 循环条件(如“i<=5”)。
③ 循环变量值的调整(如“i=i+1;”)。调整循环变量的值可以让循环条件在某个时候变为假,从而结束循环。
当循环体只有一条语句时,“{ }”可以省略
四、while循环语句练习
思考题1: 计算1+2+3+4+5,请将下面的程序补充完整。
#include <stdio.h>
main( )
{ int sum, i;
sum = 1 ;
i = 1 ;
while( i<=5 )
{
i = i+1; // 表示产生下一项
sum = sum + i; // 表示累加当前项
}
printf("1+2+3+4+5=%d\n", sum); //输出和
}
上面程序为什么不对?上面只加 2+3+4+5+6
特别注意事项:对于此类程序,需要考虑 a1 是否加进来或多加了一次,
最后一项是否加进来,最后一项的后一项是否加进来,也就是多加、少加、重复加数据项的问题。
思考题2 请编写程序,计算1+5+9+13+17+21
源程序参考如下:
#include <stdio.h>
main( )
{
int i, a, s, d;
d = 4; //表示公差
a = 1; // 表示a1
s = 1; // 表示S1
i = 1; // 表示下标1
while( i < 6 )
{
a = a + d; //产生下一项
s = s + a; //累加下一项
i = i + 1; //产生下一个标号
printf("%d\n",i); //打印下标
}
printf("1+5+9+13+17+21=%d", s);
}
思考题3 请编写程序,计算1+4+7+10+13+16
源程序参考如下1:
#include <stdio.h>
main( )
{
int i, a, s;
a = 1; // 表示a1
s = 1; // 表示S1
i = 1; // 表示下标1
while( i < 6 )
{
a = a + 3 ;//产生下一项
s = s + a; //累加下一项
i = i + 1; //产生下一个标号
printf("%d\n",i); //打印下标
}
printf("1+4+7+10+13+16=%d", s);
}
#include <stdio.h>
main( )
{
int i, s;
s = 2; // 表示S1
i = 1; // 表示下标1
while( i < 6 )
{ //通项公式 an=1+(n-1)*3
i = i + 1; //产生下一个标号
s = s + i*(i+1) ; //累加下一项 ,应用通项公式。
// i = i + 1; //产生下一个标号
printf("%d,%d\n",i,s); //打印下标
}
printf("1+4+7+10+13+16=%d", s);
}
1*1+2*2+3*3+4*4+5*5
1*2+2*3+3*4+4*5+5*6








