内容正文:
总复习方案·第五章循环结构程序设计
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·
单招零距离·计算机专业综合·下册
2.continue语句
功能:结束
跳过循环体中
的语句,进行下一次
的
注意:此语句仅用于
中。
如:输出100~200之间的不能被3整除的数。
#include <stdio.h
int main()
int n;
for(n=100:n=200:n++)
{if(n%3==0)
continue;
printf("%d ",n);
}
二、多重循环
1.概念:
一个循环体内又包含
,称为循环的
,内嵌的循环中还可以嵌
套循环即为
循环。
如:编程输出如下图形。
米米兴兴关米兴关
兴关弟弟关关养0
米米关关兴米关
关弟荣荣关关荣兴
程序:#include"stdio.h"
int main()
(int i,j;
for(i=1:i=4:i++)
{printf(”米****关¥米");
printf("
");
其中语句:printf("关*******");等价于:for(j=l:j=8;j十十)printf("*"):
于是构成了二重循环语句:
程序可以写为:
#include "stdio.h"
int main()
int i,j:
for(i=1:i=4:i++)
¥这是循环,循环变量是ⅱ*
{for(j=1:j=8;j++)
/*这是
循环,循环变量是j,一般
,否则
易导致混乱
printf("米"):
从而达不到预期的执行效果*
printf("
"):
·100
总复习方案·第五章循环结构程序设计
2.执行过程:
外循环由外循环控制变量ⅰ控制,i由1递增到4,每1次的外循环中,都要执行由内循环
控制变量j控制的8次内循环操作和1次换行操作。由此:每次内循环输出一个星号,每次外
循环输出一行(8个)星号,4次外循环,输出了
星号。
又如:分析下列程序的执行结果。
#include "stdio.h"
int main()
int i.j;
for(i=0:i<5;i++)
printf("%d",i);
forj=1:j<5;j++)
printf("%d".j);)
分析:结果为
两个for循环嵌套理解的方法:外面一个for一共要运行
次,里面的for一共要运
行
次,每当外面一个for运行1次,里面的一个for就要运行4次,直到里面的for4次运
行完,然后又回到最外面的for继续运行,然后里面的for再运行4次。
三、多重循环嵌套使用说明:
1.三种循环语句可
不限。
2.外层循环可包含
个以上内循环,但不能
3.嵌套嵌套的跳转:禁止从
跳入
、或跳人
的另一循环体中。
如下面的四种嵌套形式可行的。
(1)while()
(2)do
(3)while()
{……
{…
{……
while()
do
do
{……
{…
{…
)while();
while()
4.444
)while();
(4)for(;;)
…✉
do
{…
while();
while()
{…
·101·
单招零距离·计算机专业综合·下册
四、多重循环嵌套解决实际问题的一般步骤和方法。
循环嵌套解决问题的一般步骤可以
,也可先把里面做好,再在外面加入循环,即
。下面举例用二重循环嵌套解决问题的方法来说明问题。
如:求出10一99之间的所有素数。
1.由外再里。
分析:这个问题可用一个变量x从10变化到99,再用一段程序来判断变化中的每一个x
是否是素数,如是素数则输出,如不是素数则不输出。
#include "stdio.h"
int main()
int x,i,flag;
for(x=10:x=99:x十+)
{下面的程序段完成判断x是否是素数。如果是素数则输出。
得出如下程序:
#include "stdio.h"
int main()
int x,i,flag:
for(x=10:x=99:x十+)
flag=1;
for(i=2;i<
:i++)
if
=0)
flag=0;
ifc
printf("%4d",
}
2.由里再外
分析:对于一个数x来讲是否是素数,可用一段程序来判定输出。再在外面加一个循环,
让x从10变化到99,则成。
先写如下代码:
flag=1:
for(i=2:i=x-1:i++)
if(x%i==0)
flag=0;
·102·
总复习方案·第五章循环结构程序设计
break:
if(flag==1)
printf("%4d",x);
}
再在其上加一行代码让x从10变化到99:
典例特析
CY⑤
【例1】写出下列程序的执行结果:
#include "stdio.h"
int main()
int a,b,j;
for(a=1,b=1;a<=50;a++)
if(b>=20)break;
if(b%3==1)
{for(j=1:j<=3:j++)
b=b+1:
continue:
}
b-=5;
printf("a=%d,b=%d",a,b);
}
【分析】抓住两个变量a,b的变化,遇到continue则上去执行a十+再判断是否循环,遇
到break则退出循环。for(j=l;j<=3;j十+)b=b十1;可以等效为b=b+3后再做,则变成
一重循环的题了。
【答案】a=8,b=22
【例2】写出下列程序的执行结果:
include "stdio.h"
int main()
int a=0,i,j;
for(i=1:i<=2;i++)
for(Gj=-1:j>=-3;j--)
switch(i+j)
case 0:
case 3:a+=2;break;
case 1:break:
case 2:a+=3;
default:a+=5;
·103·
单招零距离·计算机专业综合·下册
if(a>10)break:
printf("a=%d,i=%d,j=%d
",a,i,j);
【分析】根据i和j的变化组合的和计算a,注意switch中的break是退出switch结构,
而if语句后的break则是退出for循环。
【答案】程序运行结果为:a=12,i=2,j=-1
【例3】编程判断一个两位子整数是否包含于另外一个多余两位的五个母整数中,输出
这个两位子整数被母整数包含还是不包含。
【分析】包含情况主要是把母整数备份一份,再每次求100的余数取两位与前子整数判
断是否相等,如相等则是包含。否则把母整数整除10后去掉一位再循环判断。
【答案】
#include "stdio.h"
int main()
long x,y,i,num,flag:
printf("请输入一个两位的子整数:"):
scanf("%ld",&x):
for(i=1;i<=5:i++)
{printf("请输入第%d个母整数:",i);
scanf("%ld",&y):
num=y:
flag=0;
while(num>=10)
{if(num%100==x)
{f1ag=1:
break:
num/=10:
}
if(flag==1)
printf("%ld包含%ldn",y,x):
else
printf("%ld不包含%ld八n",y,x);
·104·
总复习方案·第五章循环结构程序设计
巩固练
CY⑤
1.写出下列程序的执行结果:
#include <stdio.h
int main()
int i=0,a=0;
while(i<20)
{for(;:)
if((i%10)=0)break;else i-;}
i+=11;a+=i:
printf("%d八n",a):
}
2.写出下列程序的结果:
#include<stdio.h
int main()
int i,j;
for(i=4;i=1;i-)
{printf("¥"):
for(j=1;j<=4-ij++)
printf("*")
printf("
"):
}
3.写出下列程序的结果:
#include"stdio.h"
int main()
int i,b,k=0;
for(i=1:i=5:i++)
{b=i%2;
while(b-->=0)
k十+;
printf("%d,%d",k,b):
4.程序设计题:黄红问李明电话号码,李明报了十一个整数,说按顺序每个整数求出一位
电话号码,每个整数的最后一位如是奇数,则就是它,如不是奇数,则是它的十位数加上个位数
且求余10的阶乘的各位数之和再求余10。请求出这个电话号码的各位数。
#include <stdio.h>
·105·
单招零距离·计算机专业综合·下册
int main()
?0米米米0*关0*米BEGIN米关米关并并并0关关并/
/关关米¥关关米兴兴米米END关关关关关米关关兴兴米/
拓展练习
1.写出下列程序的运行结果:
#include "stdio.h"
int main()
int i,j,k,s,p,t;
p=1:t=1;
for(i=3:i>=-1:i--)
{s=0:p=p*i:
t=t-i;
for(j=1;j<=i;j++)
t=t+j:s+=j;
printf("s=%d t=%d p=%d",s,t,p);
}
2.若1982年人口为10.3亿,求当我国人口增长率分别为3%,2.5%,2%,1%,0.5%时,
从1982年算起多少年就会达到或超过14亿。请填空:
#include "stdio.h"
int main()
float p,r;
int i,y:
for(i=1;
scanf("%f",&.r);
p=10.3;
y=0:
while(p<14)
{p=
y=y+1:
·106·
总复习方案·第五章循环结构程序设计
}
printf("r=%f,y=%d
",r,y);
}
3.程序设计题:一个数如果恰好等于它的因子之和,这个数就叫"完数",例如:6的因子有
1,2,3,而6=1+2+3,因此说6就是完数,编程输出1000以内的所有完数。
#include <stdio.h
int main()
{
氵米米米兴米*米米米兴米BEGIN米米*兴关关米关关关关/
疗兴关关*兴兴兴米米*关END米米关关关兴米*米关关
4.输入任意一个大于0的正整数,把它写成若干个2的正整数次幂的和的形式。
#include <stdio.h>
int main()
{
技能实践
⑤
1.程序填空题:编程从键盘上输入10个整数,求出其中各位数0一4共出现的次数及5
9共出现的次数。
#include "stdio.h"
int main()
int i,countl,count2,x:
countl=count2=0:
for(i=1:i=10:i++)
printf("请输入第%d个整数:",①):
scanf("%d",&.x):
while(x)
·107·
单招零距离·计算机专业综合·下册
if(
②)
countl++;
else
count2++;
③;
printf("0-4:%d,5-9:%d",countl,count2);
}
2.程序改错题:编程输出前100个素数。程序中有三处错误,请改正:
#include "stdio.h"
int main()
{
int m=2,i;
int n=1,flag;
printf("%d小t",m);
while (n<100)
*关*关米关关米关关米FOUND¥关米米*¥*关关关关/
{m十=2:
flag=1;
*¥¥¥¥米米¥¥*¥FOUND¥¥¥米¥*¥¥关关米
for(i=2;i<m;i+)
if(m%i=0)
flag=0;
break:
*关关关关关关关关关米FOUND关关米兴关关关兴关关*/
if (flag=0)
{printf("%d小t",m);
n十十;
3.程序设计题:给一个正整数,求出它的质因数,并按下面的形式输出。如:36=2*2*3
*3,15=3*5,49=7*7。
#include "stdio.h"
int main()
int n,i;
printf("
please input a number:
");
scanf("%d",&.n);
printf("%d=",n);
·108·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
单招零距离计算机专业综合下册
循环语句
二、多重循环
1.另一个完整的循环结构 嵌套 多层 外 内
不能相同
2.4行8列
01234 11234 21234 31234 41234
5 4
三、多重循环使用说明
1.互相嵌套 层数
2.两 相互交叉
3.外层 内层 同层
四、多重循环解决实际问题的一般步骤和方法
由外再里 由内再外
1.x-1 x%i break flag==1 x
2.for(x=10;x<=99;x++)
【巩固练习】
1.32
2.∗
∗∗
∗∗∗
∗∗∗∗
分析:文本作图是研究多重循环的一种常见题型.
外循环往往控制行数,内循环往往控制每行的字符
数.遇到这一类问题应学会用内外循环变量的关系
进行推理.
3.8,-2
4.#include"stdio.h"
intmain()
{ longi,j,newnum,ge,p,x,sum;
for(i=1;i<=11;i++)
{ printf("
请输入第%ld个整数:
",i);
scanf("%ld",&x);
ge=x%10;
if(ge%2! =0)
printf("%ld",ge);
else
{ newnum=ge+x%100/10;
p=1;
for(j=1;j<=newnum;j++)
p=p∗j;
sum=0;
while(p)
{ sum+=p%10;
p=p/10;
}
printf("%ld",sum%10);
}
}
}
【拓展练习】
1.s=1 t=6 p=0
2.(1)i<=5;i++ (2)p∗(1+r)
3.#include"stdio.h"
intmain()
{inti,j,m,s;
for(i=1;i<=1000;i++)
{m=i;s=0;j=1;
while(m>0)
{if(m%j==0)s+=j;
m=m/j;
j++;
}
if(s==i)printf("%diswangshu
",i);
}
}
4.#include"stdio.h"
intmain()
{ unsignedints,t,y,x;
scanf("%u",&x);
printf("%u=",x);
while(x>0)
{ y=x;
s=1;
t=0;
while(y>1)
{ s∗=2;
y/=2;
++t;
}
x-=s;
if(x>0)
printf("2̂%u+",t);
else
printf("2̂%u",t);
}
}
【技能实践】
1.(1)i (2)x%10>=0&&x%10<=4
(3)x/=10
2.(1)m+=2;改为 m++;
91
总复习方案参考答案
(2)for(i=2;i<=m;i++)改为for(i=2;i<=m
-1;i++)
(3)if(flag==0)改为if(flag==1)
3.for(i=2;i<=n;i++)
{while(n! =i)
if(n%i==0)
{printf("%d∗",i);
n=n/i;
}
elsebreak;
}
printf("%d",n);
4.#include"stdio.h"
intmain()
{ inti,j;
for(i=3;i>=1;i--)
{ for(j=1;j<=4-i;j++)
printf("");
for(j=1;j<=i∗2-1;j++)
printf("B");
printf("
");
}
for(i=2;i<=3;i++)
{ for(j=1;j<=4-i;j++)
printf("");
for(j=1;j<=i∗2-1;j++)
printf("B");
printf("
");
}
}
第5节 循环结构应用
【巩固练习】
1.#include"stdio.h"
intmain()
{ longp=1,t=0;
inti,x;
doubles=0;
scanf("%d",&x);
for(i=1;i<=x;i++)
{ p=p∗i;
t+=p;
s=s+t∗1.0/(i∗i);
}
printf("s=%lf",s);
}
2.#include"stdio.h"
#include"math.h"
intmain()
{ inti,j,k;
for(i=-2;i<=2;i++)
{ for(j=1;j<=24+abs(i);j++)
printf("");
for(k=1;k<=3;k++)
{ for(j=abs(i)-2;j<=2-abs(i);j++)
printf("$");
if(k<=2)
for(j=1;j<=abs(i)∗2;j++)
printf("");
}
printf("
");
}
}
3.#include"stdio.h"
intmain()
{ intag,as,bg,bs,add1,add2,add,n=0;
for(ag=0;ag<=9;ag++)
for(as=1;as<=9;as++)
for(bg=0;bg<=9;bg++)
for(bs=1;bs<=9;bs++)
if(ag==7||ag==9||as==7||as==7)
if(bg==7||bg==9||bs==7||bs==7)
{ add1=ag+as∗10;add2=bg+bs∗10;
add=add1+add2;
n++;
printf("%d+%d=%d\t",add1,add2,add);
02
单招零距离计算机专业综合下册