C语言(循环结构)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.必须限制使用goto,因为滥用goto语句将使程 序流程无规律,可读性差。
4.goto语句的使用实例:
100
例:用if语句和goto语句构成循环,求 ∑n n=1
main() { int i,sum=0; i=1; loop: if (i<=100) { sum=sum+i; i++; goto loop;} printf(“%d”,sum); }
运行结果为: pi=3.141594
2、求fibonacci数列的20个数 这个数列有如下特点:第1,2两个数为1,1。
从第3个数开始,该数是其前两个数之和。即:
F1=1 (n=1)
F2=1
Fn=Fn-1+Fn-2
(n=2)
(n≥3)
程序如下 main( ) { long int f1,f2; int i; f1=1;f2=1; for(i=1;i<=10;i++) { printf("%12ld%12ld",f1,f2); if(i%2==0)printf("\n"); f1=f1+f2; f2=f2+f1; } }
答案: main() { int i, sum=0,t=12; for (i=1;i<=10;i++) { sum=sum+t; t=t+10;} printf("%d",sum); }
4、求分数序列:2/1,3/2,5/3,8/5,13/8, 21/13,…,的前20项之和。
分析: 1)可以用一个变量s保存结果通过s=s+(每一项值) 2)用一个变量来保存分子,一个变量来保存分母, 则可求出每一项的值 3)从第2项起,每个分数的分子是前项的分子与分 母之和,分母是前项的分子。
(l )用goto语句和if语句构成循环; (2)用while语句; (3)用如do-while语句; (4)用 for语句。
goto语句以及用goto语句构成循环
1. goto语句的一般形式:
goto 语句标号
语句标号用标识符表示,它的命名规则与变量名 相同,即由字母、数字和下划线组成,其第一个字符 必须为字母或下划线。 2.goto语句的一般用途: (1)与if语句一起构成循环结构; (2)从循环体中跳转到循环体外;
答案:D 解释:注意 ”/” 的结 果总是整数,小数舍 掉;break结束循环。
2.统计从键盘上输入的字符个数,遇到回车时 输出这个数字,结束程序。
分析:对于循环次数不确定只给出循环结束条件的问 题,一般用while语句解决;而在循环次数已经确定的 情况下,一般用for语句。
答案:
#include < stdio.h>
(5) for( ; ; ) { …. while( ) {…} …. }
(6) do { … for( ; ; ) {…} } while( );
几种循环语句的比较
(1)四种循环都可以用来处理同一问题,一般情况下 它们可以互相代替。但一般不提倡用goto型循环。 (2) while和 do-while循环,只在 while后面指 定循环条件,在循环体中应包含使循环趋于结束的 语句(如 i++,或i=i+1等)。 for循环可以在表达式3中包含使循环趋于结束的操 作,甚至可以将循环体中的操作全部放到表达式3 中。因此for语句的功能更强,凡用while循环能完 成的,用for循环都能实现。
3、判断m是否素数 #include <math.h> main( ) { int m,i,k; scanf("%d",&m); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1)printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m); }
运行结果如下: 5050
while语句
1.while语句的一般形式
while (表达式) 语句
当表达式为非0时,执行while语句中的内嵌语句。
2.while语句的执行流程
表达式
非0
0
语句
100
3.例:求∑n
n=1
main () { int i,sum=0; i=1; while (i<=100) { sum=sum+i; i++; } printf (“%d”,sum); }
i=i+c
② for( ;(c=getchar( ))!=„\n‟;) printf(“%c”,c);
多重循环
一个循环体内又可包含另一个完整的循环结构,称 为循环的嵌套,内嵌的循环中还可以嵌套循环,这 就是多层循环
for循环、while循环、do-while循环既可以自己嵌套 自己,又可以互相嵌套。
(7)表达式2一般是关系表达式(如 i<=100)或逻辑 表达式(如a<b&&x<y),但也可以是数值表达式 或字符表达式,只要其值为非零,就执行循环体。分 析下面两个例子:
i=0 取一个字 符=>c
C≠换行符
T F
①for ( i=0;(c=getchar( ))!=„\n‟;i+ =c); 此 for语句的执行过程见图 ,它的 作用是不断输入字符,将 它们的 ASCII码相加,直到输入一个“换行” 符为止。
(2)如果表达式2省略,即不判断循环条件,循环 无终止地进行下去。也就是认为表达式2始终为真。 例如: for(i=1; ;i++)sum=sum+i; 它相当于: i=1; while(1) {sum=sum+i; i+ +;}
(3)表达式3也可以省略,但此时程序设计者应另外 设法保证循环能正常结束。如: for(i=l;i<=100;) {sum=sum+i; i++; } (4)可以省略表达式1和表达式3,只有表达式2,即只给循 环条件。如: for(;i<=100;) {sum=sum+i; i++;} 相当于 while(i<=100) {sum=sum+i; i++;}
(2) main() { int sum=0,i; scanf(“%d”,&i); do {sum=sum+i; i++; } while (i<=10) ; printf (“sum=%d”,sum); }
for语句
for循环语句是C语言中功能最强的循环语句,它有
多个变化形式,并且可以很方便的代替其它的循环语 句。本单元将详细介绍for循环语句的语法格式、功能 及应用实例,还进一步介绍不同循环语句的嵌套使用。
do
循环体语句 while (表达式); 2. do-while语句的执行流程
循环体语句
循环体语句
当表达式值为真
T
表达式
F
(b)
(a)
3.用do-while语句求∑n 程序如下:
100 n=1
i=1
sum=sum+i i=i+1 T
main() (a) { int i,sum=0; i=来自百度文库; do { sum=sum+i; i++; } while (i<=100) ; (b) printf (“%d”,sum); }
1、for语句的一般形式
for(表达式1;表达式2;表达式3)语句
2、for语句的执行流程
求表达式1
表达式2
真
假
语句
求表达式3
for语句的 下一语句
3、关于for语句的说明 (1) for语句的一般形式中的“表达式1”可以省略, 注意省略表达式 1时,其后的分号不能省略。 如 for(;i<=100;i++) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。
main() { int counter=0;
while( getchar()!=„\n‟)
counter++; printf(“the chars num is %d . \n”,counter);
}
3.求级数12+22+32+……前10项之和。
分析:循环次数已知,用for语句;注意循环累加、 循环累乘等类似程序的设计。
i≤100
F
i=1
sum=sum+i i=i+1
直到i>100
4.例:while和do-while循环的比较
(1) main() { int sum=0,i; scanf(“%d”,&i); while (i<=10) ; {sum=sum+i; i++; } printf (“sum=%d”,sum); }
4.注意: (1)循环体如果包含一个以上的语句,应该用花括弧 括起来, 以复合语句形式出现。如果不加花括弧,则
while语句的范围只到 while后面第一个分号处。
(2)在循环体中应有使循环趋向于结束的语句。如果 无此语句,则i的值始终不改变,循环永不结束。
do-while语句
1.do-while语句的一般形式为:
(5)3个表达式都可省略,如: for(; ;)语句 相当于 while(1)语句 即不设初值,不判断条件(认为表达式2为真值), 循环变量不增值。无终止地执行循环体。
(6)表达式1可以是设置循环变量初值的赋值表达式, 也可以是与循环变量无关的其他表达式。如: for(sum=0;i<=100;i++) sum=sum+ i; 表达式1和表达式3可以是一个简单的表达式,也可以 是逗号表达式,即包含一个以上的简单表达式,中间 用逗号间隔。如: for(sum=0,i=1;i<=100;i+ +)sum=sum+i; 或 for(i=0,j=100;i<=j;i+ +,j --)k=i+j;
(3)用 while和 do-while循环时,循环变量初始化的操
作应在 while和do-while语句之前完成。而 for语句可以 在表达式 1中实现循环变量的初始化。
(4) while循型、 do-while循环和 for循环,可以用 break语句跳出循环,用 continue语句结束本次循环。而 对用 goto语句和 if语句构成的循环,不能用break语句和 continue语句进行控制。
循环结构举例
1、求pi的近似值 #include <math.h> main( ) { int s; float n,t,pi; t=1;pi=0;n=1;s=1; while((fabs(t))>1e-6) {pi=pi+t; n=n+2; s=-s; t=s/n; } pi=pi*4; printf("pi=%10.6\n",pi); } 用π/4=1- 1/3+1/5- 1/7+ · · ·公 式求π的值,直到最后一项的 绝对值小于10-6为止.
第五章 循环结构程序设计
5.1 循环结构的应用场合
5.2 goto语句
5.3 while语句 5.4 do-while语句 5.5 for语句 5.6 多重循环 5.7 几种循环语句的比较 5.8 转移控制语句
5.9 循环结构的实例
循环结构的应用场合
在许多问题中需要用到循环控制。例如,要输入全 校学生成绩;求若干个数之和;迭代求根等。几乎所有 实用的程序都包含循环。循环结构是结构化程序设计的 基本结构之一,它和顺序结构、选择结构共同作为各种 复杂程序的基本构造单元。因此熟练掌握选择结构和循 环结构的概念及使用是程序设计的最基本的要求。
答案: #define N 20 main() { int n,t; float a=2,b=1,s=0; for (n=1;n<=N;n++) { s=s+a/b; t=a; a+=b;b=t; } printf(“the total is %9.2f\n”,s); }
课堂练习
1.以下程序的运行结果是 main() { int i; for(i=3;i<10;i++) { if(i*i/20>1) break; printf("%d ",i); } printf("\n"); } A) 3 4 5 6 7 B) 3 4 C) 3 4 5 D) 3 4 5 6 。
下面几种情况均为合法的形式
(1) while ( ) {… while( ) {…} } (2) do {… do {…} while ( ); } while( ); (3) for(; ;) { for(; ;) {…} } (4) while( ) {… do {…} while( ); …. }
转移控制语句
1、break语句 break语句的一般形式为: break; break语句不能用于循环语句和switch语句 之外的任何其他语句中。 break语句的功能是跳转到本循环语句或 switch语句的下一条语句处。 2、continue语句 一般形式为: continue; 其作用为结束本次循环,即跳过循环体中下 面尚未执行的语句,接着进行下一次是否执 行循环的判定。