Professional Documents
Culture Documents
第 5 章 循环结构
while 循环的一般形式
• 由 while 语句构成的循环也称“当”循环 .
• while 循环的一般形式 :
while( 表达式 ) 循环体
• 例如 :
k =0;
while (k <10 ) { printf ( " * " ) ; k ++; }
• 程序段将重复执行输出语句 printf, 输出 10 个 * 号。
while 语句和用 while 语句构成的循环
结构
while 循环的一般形式
• 说明 :
1) while 是 C 语言的关键字。
2) 表达式可以是 C 语言中任意合法的表达式 , 但不
能为空 , 由它控制循环体是否执行。
3) 循环体只能是一条可执行语句 , 若循环体内有多
个语句 , 应该使用复合语句。
while 语句和用 while 语句构成的循环结构
while 循环的执行过程
• while 循环的执行过程 :
1) 计算表达式的值。当值为非 0 时 , 执行 2; 当值为 0 时 , 执行 4 。
2) 执行循环体一次。
3) 转去执行 1) 。
4) 退出 while 循环。
• 进入 while 循环后 , 一定要有能使此表达式的值变为 0 的操作 , 否则循环将会无限制地进行下去 , 成为无限
循环 ( 死循环 ) 。若此表达式的值不变 , 则循环体内应有在某种条件下强行终止循环的语句 ( 如 break 等 ) 。
while 语句和用 while 语句构成的循环结构
while 循环的执行过程
• 注意 :
1)while 语句的循环体可能一次都不执行 , 即当条件表达式一开始就为 0 。
2) 通常应在循环体内改变条件表达式中有关变量的值 , 使条件表达式的值最终
变成 0, 结束循环。
3) 当循环体需要无条件循环 , 条件表达式可以设为 1( 恒真 ), 但在循环体内要有
带条件的非正常出口 (break 等 ) 。
while 语句和用 while 语句构成的循环结构
while 循环的执行过程
注意 :
#include <stdio. h >
如果将循环体改写成 :
main ( )
i =1;
{ int i, sum;
while ( sum <10000 )
i =0; sum =0;
{ i ++;
while ( sum <10000 )
sum += i*i ;
{ sum += i*i ;
}
i ++;
程序执行输出结果为 :
}
n =30 sum =10415
printf ( " n =% d sum =% d \ n " , i -1, sum);
}
while 语句和用 while 语句构成的循环
结构
while 循环的执行过程
分析:
1) 用分母的值控制循环次数。若用 n 存放分母的值 , 则每累加一
次 n 应增 2. 。每次累加的数不是整数 , 而是一个实数 , 因此 n 应
当定义成 float 类型。
2) 用 t 表示相加的每一项 , 则每加一项后 ,t 的符号 s 应改变 , 这
可用交替乘 1 和 -1 来实现。
3) 从公式看 , 不能决定 n 的最终值是多少 , 但可用最后一项的绝
对值小于 10-6 作为循环结束条件。
while 语句和用 while 语句构成的循环
结构
while 循环的执行过程
while 循环的执行过程
此方程没有解析根 , 只能通过迭代法等方法求数值根。
步骤如下 :
1) 使 x1 =0,x2 =cos x1 。
2) 判 |x2- x1|<10-6 。若 x2- x1 的绝对值小于 10-6, 则执行 x1=x2, 重
复执行 1); 否则执行 3) 。
3) 计算结束 , 输出结果。
while 语句和用 while 语句构成的循环
结构
while 循环的执行过程
do - while 语句构成 说明 :
• 的循环结构
do-while 循环结构的形式 : 1) do 是 C 语言的关键字 , 必
do 须和 while 联合使用。
循环体 2) do - while 循环由 do 开始 ,
while ( 表达式 ) ; 至 while 结束。 while( 表达
例如 : 式 ) 后的“ ;” 不可少 , 它表示
do do - while 语句的结束。
{ i ++; s += i ; 3) while 后一对圆括号中的表
do - while
}while 循环的执
( i <10 ); 达式 , 可以是 C 语言中任意合
行过程 法的表达式 , 它控制循环是否
执行。
4) 循环体只能是一条可执行
语句。若循环体内需要多个语
句 , 应该使用复合语句。
do - while 语句和用 do - while 语句构
成的循环结构
do - while 循环的执行过程 :
do - while 语句构成 1) 执行 do 后面循环体中的语句。
• 的循环结构
do-while 循环结构的形式 : 2) 计算 while 后一对圆括号中表
do 达式的值。当值为非 0, 转去执行
循环体 1); 当值为 0, 执行 3) 。
while ( 表达式 ) ; 3) 退出 do - while 循环。
例如 : do - while 循环与 while 循环之间
do 的重要区别是 :
{ i ++; s += i ; while 循环的控制出现在循环体之
do - while
}while 循环的执
( i <10 ); 前 , 只有当 while 后面条件表达式
行过程 的值为非 0 时 , 才可能执行循环体 ,
因此循环体可能一次都不执行 ;
do - while 循环先执行一次循环体 ,
然后再求条件表达式的值 , 因此 ,
循环体至少要被执行一次。
do - while 语句和用 do - while 语句构
成的循环结构
例 5.4 计算 Fibonacci 数列 , 直到
do - while 语句构成 某项大于 1000 为止 , 并输出该项
• 的循环结构
do-while 循环结构的形式 : 的值。
do
循环体 Fibonacci 数列 :f0 =0,f1 =1,f2 =1,f3
while ( 表达式 ) ; =2,f4 =3,…, fn =fn -2 + fn -1 。
例如 :
do 程序中定义三个变量 f1 、 f2 、 f, 给
{ i ++; s += i ;
do - while
}while 循环的执
( i <10 ); f1 赋初值 0,f2 赋初值 1, 然后进行
行过程 以下步骤 :
1) f =f1 + f2; f1 =f2; f2 =f;
2) 判断 f2 是否大于 1000, 若不大
于 , 重复 1) 继续循环 ; 否则执行
3) 。
3) 循环结束 , 输出 f2 的值。
do - while 语句和用 do - while 语句构
成的循环结构
例 5.4 计算 Fibonacci 数列 , 直到
do - while 语句构成 某项大于 1000 为止 , 并输出该项
• 的循环结构
do-while 循环结构的形式 : 的值。
do 程序如下 :
循环体 #include <stdio. h >
while ( 表达式 ) ; main()
例如 : { int f1, f 2, f;
do f1 =0; f 2 =1;
{ i ++; s += i ; do
do - while
}while 循环的执
( i <10 );
{ f =f1 + f2; f1 =f2; f2 =f;
行过程 } while (f2 <=1000);
printf( " F =% d\ n " , f2);
}
程序执行结果 :
F =1597
for 语句和用 for 语句构成的循环结构
for 语句构成的循环结构
for 循环的执行过程
有关 for 语句的说明
for 循环的执行过程
有关 for 语句的说明
for 循环的一般形式等价于下面的程序段 :
表达式 1;
while( 表达式 2)
{
循环体 ;
表达式 3;
}
for 语句和用 for 语句构成的循环结构
for 语句构成的循环结构
for 循环的执行过程
有关 for 语句的说明
for 循环的执行过程 :
1) 计算表达式 1 。
2) 计算表达式 2 。若其值为非 0, 转向 3); 若其值为 0, 转向 5) 。
3) 执行一次 for 循环体。
4) 计算表达式 3, 转向 2) 。
5) 结束循环。
for 语句和用 for 语句构成的循环结构
for 语句构成的循环结构
for 循环的执行过程
有关 for 语句的说明
for 循环的执行过程
有关 for 语句的说明
例 5.5 编写程序 , 求 1 +2 +3 +…
+100 。
#include <stdio. h >
main ( ) 程序运行结果 :
{ int i, sum; sum =5050
sum =0;
for (i =1; i <=100; i ++)
sum += i ;
printf ( " sum =% d\ n " ,sum);
for 语句和用 for 语句构成的循环结构
for 语句构成的循环结构
for 循环的执行过程
有关 for 语句的说明
for 循环的执行过程
有关 for 语句的说明
程序如下 :
例 5.8 编写程序 , 找出 2 ~100 以 #include <stdio. h >
内的所有质数 ( 素数 ) 。 main ( )
{ int k, i, tag;
分析:如果一个数只能被 1 和它本 for ( i =2; i <=100; i ++)
身整除 , 则这个数是质数。反过来说 , { tag =0;
如果一个数 i 能被 2 到 i -1 之间的 for ( k =2; k <i; k ++)
某个数整除 , 则这个数 i 就不是质 if (i% k ==0) tag =1;
数。 if (tag ==0) printf( " % d, " ,
i);
}
}
循环结构的嵌套
在一个循环体内又完整地包含了另一个循环 , 称
为循环嵌套。
分析程序可知,可修改该程序,提高程序的执行效率。
#include <stdio. h >#include <math. h >
main ( )
{ int k, i, tag;
printf( " 2, " );
for ( i =3; i <=100; i +=2 )
{ tag =0;
for ( k =2; tag ==0 && k <sqrt(i); k ++)
if (i% k ==0) tag =1;
if (tag ==0) printf( " % d, " , i);
}
}
运行结果与改进前的程序相同 , 但循环次数已减少到 184 次 !
break 和 continue 语句在循环体中的作
用
用 break 语句可以使流程跳出 switch 语句体 , 也
可用 break 语句在循环结构中终止本层循环体 ,
从而提前结束本层循环。
break 语句的使用说明 :
注意 :
执行 continue 语句并没有使整个循环终止。
在 while 和 do - while 循环中 ,continue 语句使流程直接跳到循环控制条
件的测试部分 , 然后决定循环是否继续进行。
在 for 循环中 , 遇 continue 后 , 跳过循环体中余下的语句 , 而去对 for 语
句中的“表达式 3” 求值 , 然后进行“表达式 2” 的条件测试 , 最后根据
“表达式 2” 的值来决定 for 循环是否执行。
break 和 continue 语句在循环体中的作
用
continue 语句的作用是跳过本次循环体中余下尚
未执行的语句 , 立刻进行下一次的循环条件判定 ,
即仅结束本次循环。