循环程序设计
? 思考;如何求 1 × 1+2× 2+3 × 3=?
1+2+3+4+……=?
? 特点:有限次的重复某个操作。
? 在 C语言中,引入 while语句,do-while语句 和 for语句三
种循环结构来处理此类问题。
? While结构:
While (条件表达式)
语句序列;
循环程序设计( while循环)
? 例 2:求 1~ 10之间所有数之和
? 循环结构的三个术语:
1,循环条件,循环结构中的条件表达式如 while
(j<10)其中,j<10就是循环条件。
2,循环体,在每个循环周期均要执行一次的语
句序列。如 while下用 { }括起来的语句序列。
3,循环控制变量,能够决定控制条件是真是假
的量。
如 while(x<= 10)中的变量 x
S=0;I=1;
While(I<= 10)
{S=s+I;I++;}
? 执行过程:
1)求解“循环继续条件”表达式。如果其值为非
0,转 2);否则转 3)。
2)执行循环体语句组,然后转 1)。
3)执行 while语句的下一条。
循环程序设计( while循环)
? 要写出一个正确的循环结构,对控制变量要做
三方面的工作:
? 1、对循环控制变量赋初值。
? 2、将循环控制变量写入正确的控制条件。
? 3、对循环控制变量值的更新。
如,x=1; /* 给 x赋初值 */
while(x<= 10) /*条件 */
{s=s+x;
x++; /*对 x的值做更新、调整 */
} 看书上例题 6- 1p62
? 首先设置一个累计器 sum,其初值为 0,利用 sum += n
来计算( n依次取 1,2,……, 100),只要解决以下 3
个问题即可:
( 1)将 n的初值置为 1;
( 2)每执行 1次,sum += n”后,n增 1;
( 3)当 n增到 101时,停止计算。此时,sum的值
就是 1~ 100的累计和。
循环程序设计( do …while 循环)
? While语句表达的是“当满足条件的时候,做
某事”
? Do…while 语句表达的是“做某事,直到不满
足条件的时候为止”
? Do…while 结构:
Do
{语句序列; }
While (条件表达式)
循环程序设计( do …while 循环)
例 1:用 do …while 循环求 1~ 10之间所有数
之和。
程序算法:如下
x=1;
do
{s=s+x;
x++;}
while (x<=10)
执行过程:
( 1)执行循环体语句组。
( 2)计算“循环继续条件”表达式。如果“循环继续条
件”表达式的值为非 0(真),则转向( 1)继续执行;
否则,转向( 3)。
( 3)执行 do-while的下一条语句。
do-while循环语句的特点是:先执行循环体语句组,然后
再判断循环条件。
看书上例题 6- 3p64
任务,下去理解 p63,p65两道例题(理解
两种循环的区别)。(一定要理解透彻)
? C语言中 for循环能更好地体现循环的上
述三个要点:(循环控制变量的 初始化、
循环控制 条件,循环控制变量的 更新 )
? For结构:
循环程序设计( for循环)
For(初始化表达式;条件表达式 2;修正表达式)
{循环体 }
例如;上述求类加和的程序段可改写为:
For(x=1,s=0;x<=10;x++)
S=s+x; 结构显得更为紧凑
for语句的执行过程(重点强调)
( 1)求解“变量赋初值”表达式。
( 2)求解“循环继续条件”表达式。如果其值非 0,执行( 3);否
则,转至( 4)。
( 3)执行循环体语句组,并求解“循环变量增值”表达式,然后转
向( 2)。
( 4)执行 for语句的下一条语句。
求 n的阶乘 n!( n!=1*2*……*n )。
/*程序功能:求 n! */
main()
{ int i,n;
long fact=1; /*将累乘器 fact初始化为 1*/
printf(“Input n:,);
scanf(“%d”,&n);
for(i=1; i<=n; i++) /*实现累乘 */
fact *= i;
printf("%d ! = %ld\n",n,fact);
} [程序演示 ]
程序运行情况如下:
Input n,5↙
5 ! = 120
? 6,5几种循环的比较
? C语言中, 三种循环结构 ( 不考虑用 if/goto构成的循环 )
都可以用来处理同一个问题, 但在具体使用时存在一些
细微的差别 。 如果不考虑可读性, 一般情况下它们可以
相互代替 。
? (1)循环变量初始化,while和 do-while循环, 循环变量初
始化应该在 while和 do-while语句之前完成;而 for循环,
循环变量的初始化可以在表达式 1中完成 。
? (2)循环条件,while和 do-while循环只在 while后面指定循
环条件;而 for循环可以在表达式 2中指定 。
? (3)循环变量修改使循环趋向结束,while和 do-while循环
要在循环体内包含使循环趋于结束的操作; for循环可以
在表达式 3中完成 。
? (4)for循环可以省略循环体, 将部分操作放到表达式 2,
表达式 3中, for语句功能强大 。
? (5)while和 for循环先测试表达式, 后执行循环体, 而 do-
while是先执行循环体, 再判断表达式 。 ( 所以 while,for
循环是典型的当型循环, 而 do-while循环可以看作是直
到型循环 ) 。
? (6)三种基本循环结构一般可以相互替代, 不能说哪种更
加优越 。 具体使用哪一种结构依赖于程序的可读性和程
序设计者个人程序设计的风格 ( 偏好 ) 。 我们应当尽量
选择恰当的循环结构, 使程序更加容易理解 。 ( 尽管 for
循环功能强大, 但是并不是在任何场合都可以不分条件
使用 ) 。
? 书上例题 6-9区别三种基本结构 ( p72)
6.6 break语句与 continue语句
为了使循环控制更加灵活,C语言提供了 break语句和 continue语句。
1.一般格式,break;
continue;
2.功能
( 1) break:强行结束循环,转向执行循环语句的下一条语句。
( 2) continue:对于 for循环,跳过循环体其余语句,转向循环变量增
量表达式的计算;对于 while和 do-while循环,跳过循环体其余语句,
但转向循环继续条件的判定。
3,break和 continue语句对循环控制的影响如图所示。 Next page
break,continue主要区别:
? continue语句只终止本次循环, 而不是终止整个循环结构的执行;
? break语句是终止循环, 不再进行条件判断 。
4.说明
( 1) break能用于循环语句和 switch语句中,continue只能用于循环语
句中。
( 2)循环嵌套时,break和 continue只影响包含它们的最内层循环,
与外层循环无关。
表达式 1
...
表达式 2
...
N
Y
Y
N
循环后的语句
表达式 1
...
表达式 2
...
N
Y
Y
N
循环后的语句
b r e a k c o nt i nu e
循环条件
终止循环条
件
其它
操作
终止本次循
环的条件
6.7 应用举例
例 1:求 Fibonacci数列的前 40个数。该数列的生成方法为:
F1=1,F2=1,Fn=Fn-1+Fn-2( n>=3),即从第 3个数开始,每
个数等于前 2个数之和。
源程序如下:
main()
{ long int f1=1,f2=1; /*定义并初始化数列的头 2
个数 */
int i=1; /*定义并初始化循环控制变量 i*/
for( ; i<=20; i++ ) /*1组 2个,20组 40个数 */
{ printf(“%15ld%15ld”,f1,f2); /*输出当前的 2个数 */
if(i%2==0) printf(“\n”); /*输出 2次( 4个数),换行
*/
f1 += f2; f2 += f1; /*计算下 2个数 */
}
} [程序演示 ]
? 例 2:判断素数( p6-14)
? 思考;如何求 1 × 1+2× 2+3 × 3=?
1+2+3+4+……=?
? 特点:有限次的重复某个操作。
? 在 C语言中,引入 while语句,do-while语句 和 for语句三
种循环结构来处理此类问题。
? While结构:
While (条件表达式)
语句序列;
循环程序设计( while循环)
? 例 2:求 1~ 10之间所有数之和
? 循环结构的三个术语:
1,循环条件,循环结构中的条件表达式如 while
(j<10)其中,j<10就是循环条件。
2,循环体,在每个循环周期均要执行一次的语
句序列。如 while下用 { }括起来的语句序列。
3,循环控制变量,能够决定控制条件是真是假
的量。
如 while(x<= 10)中的变量 x
S=0;I=1;
While(I<= 10)
{S=s+I;I++;}
? 执行过程:
1)求解“循环继续条件”表达式。如果其值为非
0,转 2);否则转 3)。
2)执行循环体语句组,然后转 1)。
3)执行 while语句的下一条。
循环程序设计( while循环)
? 要写出一个正确的循环结构,对控制变量要做
三方面的工作:
? 1、对循环控制变量赋初值。
? 2、将循环控制变量写入正确的控制条件。
? 3、对循环控制变量值的更新。
如,x=1; /* 给 x赋初值 */
while(x<= 10) /*条件 */
{s=s+x;
x++; /*对 x的值做更新、调整 */
} 看书上例题 6- 1p62
? 首先设置一个累计器 sum,其初值为 0,利用 sum += n
来计算( n依次取 1,2,……, 100),只要解决以下 3
个问题即可:
( 1)将 n的初值置为 1;
( 2)每执行 1次,sum += n”后,n增 1;
( 3)当 n增到 101时,停止计算。此时,sum的值
就是 1~ 100的累计和。
循环程序设计( do …while 循环)
? While语句表达的是“当满足条件的时候,做
某事”
? Do…while 语句表达的是“做某事,直到不满
足条件的时候为止”
? Do…while 结构:
Do
{语句序列; }
While (条件表达式)
循环程序设计( do …while 循环)
例 1:用 do …while 循环求 1~ 10之间所有数
之和。
程序算法:如下
x=1;
do
{s=s+x;
x++;}
while (x<=10)
执行过程:
( 1)执行循环体语句组。
( 2)计算“循环继续条件”表达式。如果“循环继续条
件”表达式的值为非 0(真),则转向( 1)继续执行;
否则,转向( 3)。
( 3)执行 do-while的下一条语句。
do-while循环语句的特点是:先执行循环体语句组,然后
再判断循环条件。
看书上例题 6- 3p64
任务,下去理解 p63,p65两道例题(理解
两种循环的区别)。(一定要理解透彻)
? C语言中 for循环能更好地体现循环的上
述三个要点:(循环控制变量的 初始化、
循环控制 条件,循环控制变量的 更新 )
? For结构:
循环程序设计( for循环)
For(初始化表达式;条件表达式 2;修正表达式)
{循环体 }
例如;上述求类加和的程序段可改写为:
For(x=1,s=0;x<=10;x++)
S=s+x; 结构显得更为紧凑
for语句的执行过程(重点强调)
( 1)求解“变量赋初值”表达式。
( 2)求解“循环继续条件”表达式。如果其值非 0,执行( 3);否
则,转至( 4)。
( 3)执行循环体语句组,并求解“循环变量增值”表达式,然后转
向( 2)。
( 4)执行 for语句的下一条语句。
求 n的阶乘 n!( n!=1*2*……*n )。
/*程序功能:求 n! */
main()
{ int i,n;
long fact=1; /*将累乘器 fact初始化为 1*/
printf(“Input n:,);
scanf(“%d”,&n);
for(i=1; i<=n; i++) /*实现累乘 */
fact *= i;
printf("%d ! = %ld\n",n,fact);
} [程序演示 ]
程序运行情况如下:
Input n,5↙
5 ! = 120
? 6,5几种循环的比较
? C语言中, 三种循环结构 ( 不考虑用 if/goto构成的循环 )
都可以用来处理同一个问题, 但在具体使用时存在一些
细微的差别 。 如果不考虑可读性, 一般情况下它们可以
相互代替 。
? (1)循环变量初始化,while和 do-while循环, 循环变量初
始化应该在 while和 do-while语句之前完成;而 for循环,
循环变量的初始化可以在表达式 1中完成 。
? (2)循环条件,while和 do-while循环只在 while后面指定循
环条件;而 for循环可以在表达式 2中指定 。
? (3)循环变量修改使循环趋向结束,while和 do-while循环
要在循环体内包含使循环趋于结束的操作; for循环可以
在表达式 3中完成 。
? (4)for循环可以省略循环体, 将部分操作放到表达式 2,
表达式 3中, for语句功能强大 。
? (5)while和 for循环先测试表达式, 后执行循环体, 而 do-
while是先执行循环体, 再判断表达式 。 ( 所以 while,for
循环是典型的当型循环, 而 do-while循环可以看作是直
到型循环 ) 。
? (6)三种基本循环结构一般可以相互替代, 不能说哪种更
加优越 。 具体使用哪一种结构依赖于程序的可读性和程
序设计者个人程序设计的风格 ( 偏好 ) 。 我们应当尽量
选择恰当的循环结构, 使程序更加容易理解 。 ( 尽管 for
循环功能强大, 但是并不是在任何场合都可以不分条件
使用 ) 。
? 书上例题 6-9区别三种基本结构 ( p72)
6.6 break语句与 continue语句
为了使循环控制更加灵活,C语言提供了 break语句和 continue语句。
1.一般格式,break;
continue;
2.功能
( 1) break:强行结束循环,转向执行循环语句的下一条语句。
( 2) continue:对于 for循环,跳过循环体其余语句,转向循环变量增
量表达式的计算;对于 while和 do-while循环,跳过循环体其余语句,
但转向循环继续条件的判定。
3,break和 continue语句对循环控制的影响如图所示。 Next page
break,continue主要区别:
? continue语句只终止本次循环, 而不是终止整个循环结构的执行;
? break语句是终止循环, 不再进行条件判断 。
4.说明
( 1) break能用于循环语句和 switch语句中,continue只能用于循环语
句中。
( 2)循环嵌套时,break和 continue只影响包含它们的最内层循环,
与外层循环无关。
表达式 1
...
表达式 2
...
N
Y
Y
N
循环后的语句
表达式 1
...
表达式 2
...
N
Y
Y
N
循环后的语句
b r e a k c o nt i nu e
循环条件
终止循环条
件
其它
操作
终止本次循
环的条件
6.7 应用举例
例 1:求 Fibonacci数列的前 40个数。该数列的生成方法为:
F1=1,F2=1,Fn=Fn-1+Fn-2( n>=3),即从第 3个数开始,每
个数等于前 2个数之和。
源程序如下:
main()
{ long int f1=1,f2=1; /*定义并初始化数列的头 2
个数 */
int i=1; /*定义并初始化循环控制变量 i*/
for( ; i<=20; i++ ) /*1组 2个,20组 40个数 */
{ printf(“%15ld%15ld”,f1,f2); /*输出当前的 2个数 */
if(i%2==0) printf(“\n”); /*输出 2次( 4个数),换行
*/
f1 += f2; f2 += f1; /*计算下 2个数 */
}
} [程序演示 ]
? 例 2:判断素数( p6-14)