- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安庆师范学院计算机与信息学院
for语句(1)
初始化表达式 修正表达式
for语句语法如下: for(表达式①;表达式②;表达式③) 循环体语句 循环条件 表达式①通常用于循环的初始化,包括循环变量的 赋初值、其他变量的准备等; 表达式②为循环的条件,如果缺省则条件为真; 表达式③通常设计为循环的调整部分,主要是循环 变量的变化部分;
s+3
S+100
/* 计算下次投币数 */
安庆师范学院计算机与信息学院
引言(2)
•循环语句组成
(a)“先工作后判断”循环结构形式(b)“先判断后工作”循环结构形 式
安庆师范学院计算机与信息学院
引言(3)
•循环的三种语句
for语句
while语句
构成当型循环结构 构成直到型循环结构
do-while语句
安庆师范学院计算机与信息学院
while语句(2)
例5-1
表达式 非0 语句 0 i<=100 非0 0 i=1;s=0;
s=s+i;i=i+1;
图5-2 while循环结构流程图 图5-3例5-1流程图
安庆师范学院计算机与信息学院
while语句(3)
/* EX5-1.C */
#include <stdio.h> main() { int i,s; i=1;s=0; while(i<=100) /* 循环控制 */ { 思考 s=s+i; i=i+1; 计算1到100之间所有3的倍数的和 } printf("1到100的和为%d\n",s); }
安庆师范学院计算机与信息学院
while语句(4)
(1)程序设计中应避免出现 “死循环”。 注意(2)循环执行的次数用以下公式计算: 循环次数 = (终值-初值)/ 步长 + 1 例如上例循环次数为(100 –1)/1 + 1,即100次。 步长也可以为负数,例如下面程序段也能计算 1+2+…+100: int i,s; i=100; s=0; while(i>=1) { s=s+i; i=i-1;} 实际上是计算100+99+……+1 (3)注意循环体语句先后次序对执行结果的影响。
安庆师范学院计算机与信息学院
单循环程序设计(3)
【例5-10】求Fibonacci数列的前40个数。该数列的生成 方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3 个数开始,每个数等于前2个数之和。
分析
安庆师范学院计算机与信息学院
单循环程序设计(3)
/* EX5-10. C*/ #include <stdio.h> main() { long f1,f2,f3; int i; f1= f2=1; printf("%10ld%10ld",f1,f2); for(i=3;i<=40;i++) {f3=f1+f2; printf("%10ld",f3); if(i%5==0)printf("\n"); f1=f2; f2=f3; ? 如何逆序输出? } }
安庆师范学院计算机与信息学院
for语句(5)
注意 (4) 表达式③也可以省略,但作为循环变量的调整
功能不能缺少,可以在循环体中完成,例如下面的for 循环: for(i=1,s=0;i<=100;) {s = s + i;i++;} (5) 如果表达式①和③都省略的话,相当于while 循环,例如下面的程序形式: i=1,s=0; for(;i<=100;) /*相当于 while(i<=100)*/ s+=i++;
安庆师范学院计算机与信息学院
单循环程序设计(2)
【例5-8】输入的两个正整数,求其最大公约数和最小公 倍数。 #include <stdio.h> main() {int m,n,a,b,t; printf("从键盘读入 m 和 n: "); scanf("%d,%d",&m,&n); a=m;b=n; while(b!=0) { t=a%b;a=b;b=t; } printf("%d和%d的最大公约数为%d\n",m,n,a); printf("%d和%d的最小公倍数为%d\n",m,n,m*n/a); }
安庆师范学院计算机与信息学院
for语句(7)
使用for循环语句编写程序,求解满足条件s=1+ 例 2+3+……+n≥1000的最小n和s的值。 /* EX5-6.C */ #include <stdio.h> main() { int n,s; for(n=1,s=0;s<=1000;n++)s+=n; n--; printf("n=%d,s=%d\n",n,s); }
安庆师范学院计算机与信息学院
其他控制语句(2)
3.说明
(1) break能用于循环语句和switch语句中,continue 只能用于循环语句中。
(2)循环嵌套时,break和continue只影响包含它们的 当层循环,与外层循环无关。 (3)为了防止出现死语句或死循环,执行break和 continue都是有条件的,即都必须放在if条件之后: if(表达式) break; if(表达式) continue;
安庆师范学院计算机与信息学院
其他控制语句(1)
为了使循环控制更加灵活,C语言提供了break语句 和continue语句。 1.一般格式: break; continue;
2.功能
(1)break:强行结束循环,转向执行循环语句的下一 条语句。 (2)continue:对于for循环,跳过循环体其余语句, 转向修正表达式的计算;对于while和do-while循环,跳 过循环体其余语句,转向循环继续条件的判定。
n值很大应怎样处理?
安庆师范学院计算机与信息学院
for语句(4)
(1)for循环可以用以下while循环代替: 注意 表达式①; while (表达式②) {循环体语句; 表达式③;} (2)表达式①可以放在for循环的前面,但原处的分号不能 少,例如:表达式①; for(; 表达式②; 表达式③) 循环体语句; (3)表达式②也可以省略,此时循环条件始终为真 for(表达式①; ;表达式③) {循环体语句; if(条件)break; /*结束循环*/ }
【例5-4】使用for语句编程求1+2+3+……+100的和。 /* EX5-4.C */ #include <stdio.h> main() { int i, sum; for(i=1,sum=0;i<=100;i++) sum+=i; printf(“1到100的和为%d\n,sum”); }
思考 用for语句编程求1×2×3×……×n的值,如果
安庆师范学院计算机与信息学院
while语句(5)
例1:用 求π 的近似值,直到某一项 的绝对值小于10-4为止。求绝对值用数学函数fabs()。 /* EX5-2.C */ while(fabs(temp)>=1e-4) #include "math.h" { sum=sum+temp; #include "stdio.h" i=i+2; main() sign=-sign; { int sign; temp=sign/i; float i; } float sum,temp; sum=sum*4; sum=0; printf("pi=%f\n",sum); sign=1; temp=1; } i=1;
安庆师范学院计算机与信息学院
do-while语句(2)
计算s=1+2+3+…+100
/* EX5-3.C */
main( ) { int i,s; i=1;s=0; do {s=s+i; i=i+1; } while(i<=100); printf("s=%d\n",s); } 可见do-while循环和while循环可以完成相同的任务。
安庆师范学院计算机与信息学院
多重循环程序
【例5-14】计算100以内的所有素数之和。 分析
这是穷举算法的一个典型例子。需要设置两重
循环:外循环是控制产生2到100的数的循环; 内
循环首先判断当前外循环变量的值是否为素数,是
则累加求和。 程序如下:
安庆师范学院计算机与信息学院
多重循环程序
/* EX5-15.C */ #include <stdio.h> main() {int i,j,s=0; for(i=2; i<=100; i++) {for(j=2; j<=i/2; j++) if(i%j==0) break; if(j>i/2) /* i是素数,因为2~i/2没有i的因子 */ s=s+i; } printf("100以内所有素数和为:%d\n",s); }
安庆师范学院计算机与信息学院
while语句(1)
while循环格式: while (表达式) 语句 其中的语句可以是一条语句,或相当于一条语句的复 合语句,称为循环体。 while语句的执行过程为: (1) 计算表达式的值; (2)判断表达式的值,若为非0,则执行循环体;若 为 0,则结束循环,执行while语句后面的语句。 (3)执行完循环体转步骤(1)
安庆师范学院计算机与信息学院
for语句(6)
注意