循环结构程序设讣
1 第六章 循环结构程序设计
·顺序结构、选择结构、循环结构是各种复杂程序 的基本枃造单元,因此熟练掌握循环结构的基 概念及使用是程序设计的最基本要求。 引入循环结构,使得我们有可能只编写少量的语 句:,让计算机重复执行它许多次,完成大量类同 的计算要求。从而简化程序中大量的重复操作 在许多问题中需要用到循环控制。比如,求若 干个数之和;迭代求根等。C语言提供以下几种循 环 WHILE循环 DO WHILE循环 FOR循环
2 • 顺序结构、选择结构、循环结构是各种复杂程序 中的基本构造单元,因此熟练掌握循环结构的基 本概念及使用是程序设计的最基本要求。 • 引入循环结构,使得我们有可能只编写少量的语 句,让计算机重复执行它许多次,完成大量类同 的计算要求。从而简化程序中大量的重复操作。 在许多问题中需要用到循环控制。比如,求若 干个数之和;迭代求根等。C语言提供以下几种循 环 • WHILE 循环 • DO WHILE 循环 • FOR 循环
6.1 while语旬 般形式:whe(条件表达式)若有多个语句参与循环 语句; 则用{}扩起来组成复合 语句。 循环变量赋初值 循环条件个满足 循环语句的必备条件: 1.设定循环变量 满足 2.循环变量赋初值 循环体 3.设定循环结束条件 循环变量值改变」 4.循环体内,循环变量 的值应变化
3 循环语句的必备条件: 1. 设定循环变量 2. 循环变量赋初值 3. 设定循环结束条件 4. 循环体内,循环变量 的值应变化。 循环条件 循环体 满足 不满足 循环变量赋初值 循环变量值改变 6.1 while语句 一般形式:while (条件表达式) 语句; 若有多个语句参与循环 则用{ } 扩起来组成复合 语句
例:由1输出到10 1设定循环变量:mum 2循环变量赋初值:mum=1 3.设定循环条件:mum<=10 num=l 4.循环变量的值改变:mm++ mm<10不满足 程序如下: 满足 man 输出num的值 Rint num=l while(num<=10) num++ printf("%dn", num); num++
4 例:由1 输出到10 1. 设定循环变量 : 2. 循环变量赋初值 : 3. 设定循环条件 : 4. 循环变量的值改变 : num num=1 num<=10 num++ num<=10 输出num的值 满足 不满足 num=1 num++ 程序如下: main( ) {int num=1; while (num<=10) {printf("%d\n",num); num++; } }
迭代算法 在循环语句中有一种方法称为迭代,它是一个不断用新值 取代变量旧值或者是由旧值递推出变量新值的过程。 例6.1求s=1+2+3+4 maino f int i=l, S=0; while(i<=4) 设定循环变量:i 2循环变量赋初值:|i=1 3.设定循环条件: i++: 4.循环变量的值改变:计+110+1=1} 21+2=3 定义变量s,存放和值 printf("s=%d",s s初值为:s=0 33+3=6; 循环体内,的动作:s=46+41
5 迭代算法 在循环语句中有一种方法称为迭代,它是一个不断用新值 取代变量旧值或者是由旧值递推出变量新值的过程。 例6.1 求s=1+2+3+4 main() { int i=1,s=0; while (i<=4) { s=s+i; i++; } printf("s=%d",s ); } i 2 1 3 4 0+1=1 1+2=3 3+3=6 6+4=10 1. 设定循环变量 : 2. 循环变量赋初值 : 3. 设定循环条件 : 4. 循环变量的值改变 : i i=1 i<=4 i++ 定义变量s,存放和值。 s初值为 : 循环体内,s的动作 : s=0 s=s+i s
计数循环:用一个变量作为循环计数器,负责为循环 计数,在重复足够次数后结束循环。 求n!=1*2之n maine 设定循环变量:i int i=ls=ln: scanf(%od", &n) 循环变量赋初值:i=1 while(i<=n) 设定循环条件:i<=n S=S 循环变量的值改变:i++ printf(s=% d",s); 定义变量s,存放n!。 s初值为:s=1 i++ 循环体内,对s的操作S=S*i 先输入n,再算n! 21*1*2 31*1*223 41*1*2*3*45
6 main() { int i=1,s=1,n; scanf("%d",&n); while (i<=n) { s=s*i; i++; } printf("s=%d",s); } 求n!=1*2*…*n 设定循环变量 : i 循环变量赋初值 :i=1 设定循环条件 :i<=n 循环变量的值改变 :i++ 定义变量s,存放n!。 s初值为 : 循环体内,对s的操作 : 先输入n , 再算 n! s=1 s=s*i i s i++ 1 1*1 2 2 1*1*2 3 3 1*1*2*3 4 4 1*1*2*3*4 5 计数循环:用一个变量作为循环计数器,负责为循环 计数,在重复足够次数后结束循环
求x main 设定循环变量: float n, X, s=1.0, i=l; scanf(%of%of', &n, &x); 循环变量赋初值:i=1 while (i<=n) 设定循环条件:i=n is=S*x; 循环变量的值改变:i++ i++ printf("s=%f"s) 定义变量s,存放x。 i+十 先输入n,x,再算x s初值为:s=1.0 21x*x 3 循环体内,s的动作:ss*3 l*x*x*x 41*x*xx*x5
7 求x n main() { float n , x , s=1.0, i=1; scanf("%f%f",&n,&x); while (i<=n) { s=s*x; i++; } printf("s=%f ",s); } 设定循环变量 : i 循环变量赋初值 :i=1 设定循环条件 :i<=n 循环变量的值改变 :i++ 定义变量s,存放x n 。 先输入n ,x, 再算 x n s初值为 : 循环体内,s的动作 : s=1.0 s=s*x i s i++ 1 1*x 2 2 1*x*x 3 3 1*x*x*x 4 4 1*x*x*x*x 5
小结:求和、求阶乘、求某数的n次方等运算,是计数循 环的典型例子 求1+2+3+4+.+n maino 求n=1*2*.*n i int i=1 求 float s=1.0.x XS0 scanf( %d, %f, &n, &x) while(i<=n)i 0+1=1 S=S X 1+2=3 ++; 234 +3=1+2+3=6 printf( s=%dn, s) 6+4=1+2+3+4=10
8 main() { int i=1; int s=0 ; while(i<=4 ) { s=s+i; i++; } printf(“s=%d\n”,s); } 小结:求和、求阶乘、求某数的n次方等运算,是计数循 环的典型例子。 long s=0 ; 求 1+2+3+4 i s 4 6+4=1+2+3+4=10 3 3+3=1+2+3=6 2 1+2=3 1 0+1=1 +…+n scanf(“%d”,&n); n 0 求 n!=1*2*…*n s=s*i; 求x n s=1 s=s*x; float s=1.0,x; scanf(“%d,%f”,&n,&x);
例62计算=∑x =x+- .. 234 算法: void maino 和式的项数n及x从键盘输入{inti,n Sum的初值为0; float x sum=0.0.m=1.0 分子m的初值为1; scanf(“%%d”,&x,&n) 分子的通式:m=mx; i=1 分母为循环变量i,初值为1 while(i<=n) 循环通式为: i m=m*x sum=sum+m/ mamX i+十 sum=summ/ printf(“sum=%8.2fn’",sum);
9 例 6.2计算 n x x x x x i x s n n i i = = + + + + + = ... 2 3 4 2 3 4 1 算法: 和式的项数 n 及x 从键盘输入 sum的初值为0; 分子m的初值为1; 分子的通式 : m=m*x; 分母为循环变量i,初值为1; 循环通式为: m=m*x sum=sum+m/i; void main() { int i,n; float x,sum=0.0,m=1.0; scanf(“%f%d”,&x,&n); i=1; while(i<=n) { m=m*x; sum=sum+m/i; i++; } printf(“sum=%8.2f\n”,sum); }
注意 while的灵活使用: 1) while语句中的表达式是关系表达式,但是,有 时侯也往往出现混合表达式。如 while(C= getchar)!=“2”) 又如 while(i++!=0等 2) while语句中的关系表达式,往往有一些简略 的写法。如: whil(x!=0)可以写成 while(x) whil(x=0)可以写成 while(!x)
10 注意while的灵活使用: 1)while语句中的表达式是关系表达式,但是,有 时侯也往往出现混合表达式。如: while((c=getchar())!=‘?’) 又如 while(i++!=0)等 2)while语句中的关系表达式,往往有一些简略 的写法。如: while(x!=0)可以写成 while(x) while(x==0)可以写成 while(!x)