内容正文:
总复习方案·第五章循环结构程序设计
}while(num!=0&.&.t<-4):
第三节for循环
知识体系
e.Y5
[for循环的格式、for循环的运行过程
for循环的使用说明
循环问题常见算法
知识梳理
©Y⑤
一、for循环的格式
1.在C语言中,for语句使用最为灵活,它完全可以
while循环和do一while循环。
它的一般形式为:
2.运行过程:
它的执行过程如下:
(1)先求解
(2)求解
,若其值为真(非0),则执行for语句中指定的
,然后执行
下面第(3)步;若其值为
,则
,转到第5)步。
(3)求解
(4)转回上面第
步继续执行。
(5)循环结束,执行for语句下面的后续语句。
3.说明:
for语句最简单的应用形式也是最容易理解的形式如下:
for(
)循环体:
循环变量赋初值一般是一个赋值语句,它用来给循环控制变量赋初值:循环条件是一个
,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环
一次后按什么方式变化。这三个部分之间用“”分开。
for(i=1;i<100;i)sum=sum+i;
先给i赋初值1,判断i是否小于等于100,若是则执行循环体语句,之后值增加1。再重
新判断,直到条件为假,即>100时,结束循环。
相当于:
·91·
单招零距离·计算机专业综合·下册
i=1:
while(i<=100)
sum=sum+i;
i++;}
对于for循环中语句的一般形式,就是如下的while循环形式:
表达式1:
while(表达式2)
{语句
表达式3:》
注意:
(1)for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环
变量增量)”都是
,即可以缺省,但“
”不能缺省。
(2)省略了“表达式1(循环变量赋初值)”,表示在「or语句中没有对循环控制变量赋初
值。但可以在for语句之前对
赋初值。
(3)省略了“表达式2(循环条件)”,则在循环体中如不做其它处理时便成为
for(i=1;;i+)sum=sum+i;
相当于:
i=1;
while(1)
sum=sum+i;
i++;
}
(4)省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在循环语
句体中加入修改
的语句。
for(i=1:i=100:)
{sum=sum十i;
i++;
}
(5)省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。
for(:i=100:)
sum=sum+i;
i十+:
}
相当于:
while(i<=100)
{sum=sum十i:
i++;
(6)3个表达式都可以省略。
for(;;)语句:
·92·
总复习方案·第五章循环结构程序设计
相当于:
while(1)语句:
(7)表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
for(sum=0;i←100;i++)sum=sum+i;
(8)表达式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:
(9)表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只
要其值非零,就执行循环体。
for(i=0;(c=getchar())!=
';i+c);
或
for(;(c=getchar())!=
';)
printf("%c",c):
二、for循环解决实际问题的一般步骤与while循环类似
三、循环问题常见的算法
1.迭代算法:如累加、累乘,猴子吃桃问题、求逆序数、辗转相除求最大公约数等。
2.穷举法:如求特殊数(水仙花数、素数、同构数、完数、百钱买百鸡问题等)。
3.循环的嵌套。如下一节的多重循环输出星号的文本作图问题,分解因子等。
典例精析
@r⊙
【例1】写出下列程序的执行结果:
#include "stdio.h"
int main()
{
int i;
for(i=0;i<5:i++)
printf("i=%d",i):
printf("
i=%d",i):
【分析】i从0变化到4,执行循环体。但当i=5时才退出循环,执行for循环之外的输出。
【答案】程序运行结果为:
i=0i=1i=2i=3i=4
i=5
【例2】写出下列程序的执行结果。
#include "stdio.h"
int main()
{inti=70,t=2:
for(:i5;i-=2)
·93·
单招零距离·计算机专业综合·下册
t=t+2:
printf("t=%d",t):
【分析】循环变量的初值为70,终值为5,步长为一2,则循环次数为:(终值一初值)/步长
+1次,为33次,则t中加了33个2即66,则t的值为68。
【答案】程序运行结果:t=68
【例3】写出下列程序的运行结果:
#include <stdio.h
int main()
int i;
for(i=1:i<=5:i++)
switch (i%5)
{case 0:printf("*")break:
case 1:printf("#");break;
default:printf("
");
case 2:printf ("8.");break:
}
【分析】for循环与switch结构相结合或其它循环与switch结构相结合是我们编程经常
要用的。注意switch结构中的break是退出switch结构,不是退出for循环。
【答案】程序运行结果:
#&
&
&.¥
【例4】下面程序运行的结果是:
#include <stdio.h>
int main()
int i,t,s;
for(t=0,s=0,i=1:i=10;i++)
{t=t+i++;
s=s十t:
printf("*"):
printf("
"):
printf("i=%d,t=%d,s=%d",i,t,s);
【分析】1=t十i十十:i先参加累加,再自增加1,for语句中也有i十+,所以可以看成是步
长为2,则可以推出i的变化为1,3,5,7,9,到11则退出循环。循环5次,输出5个星号,最终
s中加的是1+1+3十1+3+5+…+1十3+5+9=55。
【答案】程序运行结果为:
·94·
总复习方案·第五章循环结构程序设计
关光米米米
i=11,t=25,s=55
【例5】编程求m!=1¥2*3*.¥m的值,要求以12*3*.*m=m!的格式输出。
如:m=5,则输出为1*2*3*.*5=120。请完成程序。
include "stdio.h"
int main()
(int i,m:
double s=1:
scanf("%d",&.m):
/兴光关米兴米关关关米米关关米米米BEGIN关*关米米关关关米兴米米关兴兴/
printf("=%.f",s);
}
【答案】
for(i=1;i<=m;i)
(if(i!=m)
printf("%d米",i):
else
printf("%d",i):
s=s*i;
巩固练习
©Y⊙
l.若x,y均为int型变量,且x=100,则下面关于for循环的判断正确的是(
)。
for(y=100:x!=y;十+x,y++)printf("********¥"):
A.循环体只执行一次
B.循环体一次也不执行
C.是死循环
D.输出结果:****兴**
2.以下循环语句能正确运用的是(
)。
A.for(;;x++)
B.for(x=0,i=1:i<=10:i++)
C.for(;x>0;x--)
D.for(x=0:i<5:i++)
3.执行以下语句的结果是(
)。
int i;
for(i=1;i<10:i++)
if(++i%2==0)
if(i++%3==0)》
if(++i%5==0)
printf("%d ",i);
·95·
单招零距离·计算机专业综合·下册
A.234
B.345
C.456
D.无任何输出
4.若a,b均是int型变量,则执行如下语句的结果是?
for(a=1;a<5;a+=2)
{for(b=1:b<5:b++)
printf("%d ",a b):
printf("
");
}
5.写出下列程序的执行结果:
#include <stdio.h
int main()
int i,number,sum=0;
for(number=i=1;i<=10;i+)
sum+=number;i+;
f(i%3==0)
number=-i;
else number=i;
printf("sum=%d",sum);
拓展练习
1.写出下列程序的运行结果:
#include "stdio.h"
int main()
int i,a,b,c;
char ch;
for(a=0,b=0,c=0,i=26:i1:i--)
{ch=90+i-26;
switch(ch)
case'A':a+:
case'F':b十+;
default:c十+;break;
}
if(a>-1)a++:
if(b1)b++;
else if(c>=1)c;
printf("a=%d,b=%d,c=%d,ch=%c",a,b,c,++ch);
·96·
总复习方案·第五章循环结构程序设计
2.写出下列程序的结果:
#include <stdio.h>
int main()
int a,b,c,i;
a=1:b=1:
for(i=1:i<=5:i+=1)
{c=a十b:
printf("%3d",c);
a=b;b=c;
}
3.用近似公式y=1+1/1!+1,2!+1/3!+..+1.n!求y的近似值。n从键盘录入。
请完成程序:
#include "stdio.h"
int main()
int i,n;
double p=1,s=1;
scanf("%d",&.n);
/关关米米0关类英米米荣BEGIN0关并米关关关关关关*/
/0关兴关关关米0关米米END关兴兴0关关米关兴米米/
printf("y=%.8f",s):
}
4.从键盘上输入一个数,判断该数是否为素数。请完成程序:
#include "stdio.h"
int main()
int i,n,flag=1;
printf("Please input an integer number:n");
scanf("%d",&n);
/*米关关关关*关关关米BEGIN关举举*为0关并米0/
/*兴*米米***米米米END*米米*关**兴关**/
if(flag==1)
printf("%d is prime",n):
else
printf("%d isn't a prime",n);
·97·
单招零距离·计算机专业综合·下册
技能实践
》@
1.打印输出1到1000之间的全部“同构数”。所谓“同构数”是指这样的一个数:它出现在
它的平方数的右端。如5的平方是25,5是居右端的数,5就是一个同构数。25的平方是
625,因此25也是同构数,完成所缺程序。
include "stdio.h"
int main()
int x,d,k,t;
for(x=1;x=1000:x++)
if(x>10)k=100:
if(x>100)k=1000:
d=x¥x;
t=d/k;
if(
=x)
printf("%d,%d
",x,d):
2.程序改错题:已知某球从100米高度自由落下,落地后反复弹起,每次弹起的高度都是
上次的一半。求此球第10次落地后反弹起来的高度和球所经过的路程。程序中有三处错误,
请改正。
#include "stdio.h"
int main()
int i;
float h=100,s=0,r;
/米米**米**米务米米米*米米f0Und**米米米米米米*米**兴并关/
for(i=1:i<10:i++)
{r=h/2:
/米*米**米**兴米*米彩*米f0ud米*米*¥关米¥米关¥兴米米0/
s=s十h;
h=r/2;
printf("h=%f s=%f",h,s);
}
3.程序设计题:有一数列,2,32,53,85,13/8.…,编写程序求该数列的前8项及前8项
之和,小数点后取三位。最后的sum输出为:sum=13.244,
#include "stdio.h"
int main()
·98
总复习方案·第五章循环结构程序设计
int i;
float a=2,b=1,sum=0,x;
for(i=1:i=8:i++)
/关米兴米关关光关关米米关关关米BEGIN兴关0关米米关***关关关米关/
/*关关关关关关米关米类关关关关END米米关兴0米米米*米关*关关关
printf("
sum=%.3f",sum);
第四节循环结构的嵌套
知识体系
©r⊙
「循环铺助语句的作用
多重循环的概念、多重循环的运行过程
多重循环的使用说明
多重循环解决实际问题的一般步骤和方法
知识梳理
©Y⊙
一、循环辅助语句
1.break语句
功能:在循环体中,
循环体,即提前
,接着执行循环下面的语句。
说明:break
的switch结构或循环结构。
注意:break语句如用在switch结构中,则是用来退出switch结构。
如:编程求s=1+2+3十4+…+100,但是当s的值大于30时停止,输出此时s的值。
#include "stdio.h"
int main()
int i,s=0;
for(i=1:i=100:i++)
s=s+i;
if(s>30)break;
printf("s=%d",s);
·99·sum=sum+t∗flag;
flag=-flag;
i++;
}
【技能实践】
1.(1)m%n (2)x∗y/n
2.(1)floats=0,k=1;改为floats=1,k=1;
(2)while(k>0.001)改为 while(k>=0.001)
(3)k=1/n∗(n+1);改为k=1/(n∗(n+1));
3.while(n! =0)
{m=m∗10+n%10;
n=n/10;
}
第二节 do-while循环
【知识梳理】
一、do-while循环的格式
2.循环体 计算表达式的值 真 假
3.(1)至少要执行一次 分号 语法
(2)结束 假 死循环
【巩固练习】
1.B 2.A 3.B
4.c,99
5.a=8,b=7
6.digit=x%10;
sum=sum+digit∗digit∗digit;
x=x/10;
【拓展练习】
1.3 4 6 7 9 10
2.a=5,b=13,i=4
3.(1)sum+f3/f2 (2)++i<=8或i++<8
【技能实践】
1.(1)x-y==c (2)n<3&&flag==0
2.(1)r=n%m;改为r=m%n;
(2)gbs=x∗y/n;改为gbs=x∗y/m;
(3)gys=r;改为gys=m;
3.num=num∗2;
d=num;
printf("%d",d);
t++;
num=num-d;
第三节 for循环
【知识梳理】
一、for循环的格式
1.取代 for(表达式1;表达式2;表达式3)循环体
2.(1)表达式1
(2)表达式2 循环体 假(0) 结束循环
(3)表达式3
(4)(2)
3.循环变量赋初值 循环条件 循环变量增量
关系表达式或逻辑表达式 ;
(1)选择项 ;
(2)循环控制变量
(3)死循环
(4)循环控制变量
【巩固练习】
1.B 2.B 3.D
4.1 2 3 4
3 6 9 12
5.sum=9
【拓展练习】
1.结果为:a=2,b=8,c=46,ch=B
2.2 3 5 8 13
3.for(i=1;i<=n;i++)
{p∗=i;
s+=1/p;
}
4.for(i=2;i<=n-1;i++)
if(n%i==0)
{flag=0;
break;
}
【技能实践】
1.(1)k=10 (2)d-t∗k
2.(1)for(i=1;i<10;i++)改为for(i=1;i<=
10;i++)
(2)s=s+h改为s=s+h+r;
(3)h=r/2改为h=r;
3.sum+a/b;
printf("%.3f\t",a/b);
r=b;
b=a;
a=x+a;
第四节 循环结构的嵌套
【知识梳理】
一、循环辅助语句
1.终止并跳出 结束循环 终止并跳出最近一层
2.本次循环 尚未执行 是否执行循环体 判断
81
单招零距离计算机专业综合下册