《C程序设计06循环控制》由会员分享,可在线阅读,更多相关《C程序设计06循环控制(35页珍藏版)》请在金锄头文库上搜索。
1、第第 六六 章章 循循 环环 控控 制制6.1 6.1 概述概述 前面已介绍了顺序结构,选择结构,本章介绍循环结构。如: sum=1+2+3+100;实际问题: 一组重复执行的语句。利用循环结构解决。C语言用四种形式循环2. while 语句3. do while 语句4. for语句1. if语句与 goto语句6.2 goto6.2 goto语句及与语句及与ifif语句构成循环语句构成循环1. goto语句2. 与if构成循环.例: 求形式: goto 标号;功能: 无条件转向标号处。标号:用标识符命名。main ( ) int i, sum=0; i=1; loop:if (i=100)
2、 sum=sum+i; i+; goto loop; printf(%d, sum);运行结果如下:5050sum=sum+i;i+;当i=100成立main ( ) int sum=0, i=0; loop: sum=sum+i; i+; if (i100成立 6 6 . .3 3 w w h h i il le e语语 句句 为了使程序的结构化功能强,应尽量少用 goto语句。1. 形式: while (表达式)语句2. 执行过程: 先判断表达式的值。若0.则执行其后面的语句,否则while执行完毕。专门的当型循环语句while语句3. 流程图:0=0表达式语句下一语句将上述例子用whil
3、e语句写出 while (i=100) sum+=i; i+; sum=sum+i;i+;当i=100成立statementexpression 语句中应有使表达式=0的语句。 否则会出现无限循环死循环。注: while后面的语句一般为复合语句, 即:加 6.4 do while6.4 do while语句语句 一种专门的 “直到型” 循环语句。2. 执行过程: 先执行语句,再判表达式的值,若0,再执行语句,否则结束循环3. 流程:语句表达式0=01. 形式: do语句while(表达式);statementexpressionmain ( ) int i, sum=0; i=1; do su
4、m=sum+i; i+; while (i100成立6.5 for6.5 for语句语句1. 形式 首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值。依此重复下去,直到表达式2的值=0(假)。一种形式更为灵活的循环语句。2.执行过程for(表达式1; 表达式2; 表达式3)语句3. 流程:=0(假)0(真)计算表达式1求表达式2值语句计算表达式3结束for语句语句表达式3表达式2表达式1用for语句写出上述例子for用while代替的流程 表达式1; while(表达式2) 语句 表达式3; for ( i=1; ib) i=b; j=a;
5、 for( ; i=j; i+) sum=sum+i; printf ( n sum=%d, sum); 可以省略表达式1, 但须保留分号;这时在for之前就得赋值给循环变量; 表达式2一般不可省略,否则为无限循环相当于: while (1) sum=sum+i; i+; 例: for (i=1; ; i+) sum=sum+i;相当于条件永真、永不为0,若用while表示 表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为0而正常结束循环。例: for (sum=0,i=1;i=100;) sum=sum+i; i+; 若同时省略表达式1,表达式3,则相当于whil
6、e(表达式2)语句。相当于 while (i=100) sum+=i; i+; 例: for (; i=100;) sum+=i; i+; 三个表达式均省略 即for(;)语句则相当于while(1)语句.表达式1、表达式3可以是逗号表达式,以使循环变量值在修改时可以对其它变量赋值。如 for (sum=0,i=1;i=100;i+,i+)相当于 sum=0; for (i=1;i100时结束。#define PI 3.14159main() for(r=1; r100) break; printf (%f, area);6.8.1 break6.8.1 break6.8.1 break6.8
7、.1 break语句语句语句语句 从结构化程序要求出发,用break,退出循环,进入for语句的下一条语句。 注: break只能用于循环语句和switch语句。 continue continue语句语句 main( ) int n; for (n=100; n200; n+) if (n%3!=0) printf(%d, n); 问题: 编写程序,打印100200中不能被3整除的数。main() int n; for (n=100; n=10-6t=1,pi=0,n=1,s=1n=n+2;s=-s;t=s/n;pi=pi*4;输出pi程序如下#include main() int s; f
8、loat n,t,pi; t=1;pi=0;n=1.0;s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi);例2: 求 Fibonacci数例: 1, 1, 2, 3, 5, 8, 前40个数。规律: F1=1, F2=1 Fn=Fn1+ Fn2 (n2)程序要点: 每输出4个数时换行。 f1=f1+f2; f2=f1+f2; 交替的结果正好为一序列程序如下: main ( ) long int f1, f2; int i; f1=1; f2=1; for (i=1; i=20;
9、 i+) printf(%12ld %12ld , f1, f2); if (i%2= =0) printf(n ); f1=f1+f2; f2=f2+f1; f1=1, f2=1 for i=1 to 20 输出f1, f2 f1=f1+f2; f2=f2+f1;运行结果为:15342331597109467502551422935245782415781718553772584177111211393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830
10、914930352102334155 判一个数m是否为素数的方法: 每打印10个数,换一次行。当用2, 3, 的整数去除它时均不能除尽, 则为素数。例2. 求100200的素数.程序如下:#include main() int m, k, i, n=0; for (m=101; m=200; m=m+2) if ( n%10=0) printf(n); k=sqrt(m); for (i=2; i=k+1) printf(%dt,m); n=n+1; 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199运行结果如下: