1、第八讲 WHILE、DO WHILE FOR语句 1、 WHILE语句 while循环控制 语句一般格式 while (表达式) 语句 表达式: l 一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 l 用来控制循环体是否执行 语句: l 称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句 l 是循环重复执行的部分 功能: 计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句 【例】编写程序,求100个自然数的和 即: s=1+2+3+
2、 … +100 思路:寻找加数与求和的规律 加数i——从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。 求和——设变量 sum 存放和,循环求sum=sum+i,直至i超过100。 程序: main( ) { int i,sum; i=1; sum=0; while (i<=100) { sum=sum+i; i++; } printf("sum=%d\n",sum); } 注意: l 如果while的 (表达式) 值为0,则循环体一次也不执行 (例如当i的初值=101) 。
3、 l 在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。 l 在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。 思考程序段的输出? while (i<=100) { i++; sum=sum+i; } l 为了保证循环正常运行,应该特别注意: – 循环控制条件的描述 – 控制条件的初始状态(初始值) – 循环体内部对控制条件的影响 2、do-while语句 l 语句一般格式 do 语句 while (表达式); l 功能: – 先执行内嵌语句(循环体),之后计算表达式的值,
4、不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。 【例】用do-while语句 求100个自然数的和 说明: l while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构 l 区别: l do- while 语句先执行循环体再判断条件,循环体至少执行一次; l while 语句先判断条件再执行循环体,循环体有可能一次也不执行 l do—while循环体中一定要有能使表达式值趋于0的操作(如i++),否则会出现死循环。 do-while语句的简单应用 【例】用辗转相除
5、法求m和n的最大公约数
程序:
main( )
{ int m,n,r;
scanf("%d, %d",&m,&n);
if (m 6、句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。
3.1省略for语句的表达式:
⑴ 表达式1、2、3全省略,即:
for ( ; ; )
就等同于:while (1),会无限循环(死循环)
⑵ 省略表达式1和表达式3,即:
for(;表达式2;)
就等同于:while( 表达式2 )
⑶ 省略表达式2,即:
for(表达式1; ;表达式3)
就等同于:表达式1; while(1){…表达式3;}
注意:在省略某个表达式时,应在 7、适当位置进行循环控制的必要操作,以保证循环的正确执行
例如:
⑴ i=1;
for ( ; i<=100; i++) sum+=i;
⑵ for (i=1; ; i++)
{ … if(i>100)…
…}
⑶ for (i=1; i<=100; )
{…i++; … }
⑷ i=1;
for ( ; ; )
{ … if(i>100) …
i++; … }
3.2说明:
所有用 while 语句实现的循环都可以用for 语句实现。
for(表达式1;表达式2 ;表达式3)
语句;
等价 8、于:
表达式1;
while (表达式2)
{ 语句;
表达式3;
}
3.3for语句的简单应用:
【例】求n! ,即计算p=1×2×3×…×n的值。
思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。
设置:
· 乘数i ,初值为1,终值为n(n是循环控制终值,需要从键盘输入)
· 累乘器 p ,每次循环令p = p*i
程序:
main( )
{ int i, n; long p;
p=1;
printf("Enter n:");
scanf("%d",&n);
f 9、or (i=1; i<=n; i++)
p = p * i;
printf("p = %ld \n",p);
}
思考:
· 如何输出1!, 2!, … , n! ?
· 如何求s =1!+ 2!+ … + n! ?
3.4熟悉几个循环语句
l while (!x) x++;
当 x=0 时,执行循环体x++;
l while ((c=getchar( )) != '\n') n=n+1;
n 称为计数器,作用是统计输入字符的个数
l while (num++<=2) ; printf("%d\n",num);
循环体是空语句,退出循环后输出n 10、um的值
l do x*=-3; while(x>5);
先执行循环体x*=-3,再判断条件(x>5)
l for (n=0; n<26; n++) printf("%c ", n+'A');
作用是输出26个大写字母
l for (sum=0, i=1; i<=100; sum=sum+i, i+=2) ;
作用是计算100以内的奇数和
4、几种循环语句的比较
l while和do-while语句的表达式只有一个,for语句有三个。
l while 和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。
while语句多用于循 11、环次数不定的情况
do-while语句多用于至少要运行一次的情况
for语句多用于要赋初值或循环次数固定的情况
5、循环的嵌套
l 如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套
l 例如:
#include






