版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章循环控制
6.1概述
所谓循环控制,就是如何实现循环结构的控制问题。有4种方法:①
用goto语句和if构成循环。
②
用while语句。
③
用do-while语句。
④
用for语句。6.2用goto语句和if语句构成循环例:对于计算
s=1+2+3+4+5+6+7+8+9+100s1is+i→s
i+1→ii≤10
输出syn
s=0;
i=1;
lable:s+=i;i++;if(i<=10)
gotolable;
printf(“%d”,s);语句标号
无条件转向语句
goto
语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。
goto语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。6.3while语句
while语句是专门用于实现循环控制的语句之一。其一般形式为:
while(表达式)语句
含义:当表达式的值为非0时,执行循环体,否则执行后续语句。语句关键
表达循环条件的表达式循环体
语句关键字
执行过程:
while(表达式)语句
表达式循环体0非0i≤10?
s=0i=1s=s+ii=i+1例:用while语句实现前面算法:main(){inti=1,s=0;
while(i<=10){s=s+i;i++;
}
printf(“\n%d”,s);}
注意与if语句的区别。循环体中要有使循环条件趋于成立的条件yn
while(i<=10){s=s+i;i++;
}
可简写为:
while(i<=10)s+=i++;非0(真)0(假)表达式循环体
6.4do-while语句
do-while语句主要用于实现直到型循环。
其一般形式为:
do
循环体
while(表达式);执行过程:真s=0i=1i≤10?s=s+ii=i+1假例:用do-while语句实现前面算法:
main(){inti=1,s=0;
dos+=i++;
while(i<=10);
printf(“\n%d”,s);}注意与while语句的区别。
假表达式2求解表达式1循环体求解表达式3真6.5for语句
for语句是一种使用最为灵活,并且是用得最多的循环控制语句,其一般形式为:
for(表达式1;表达式2;表达式3)循环体大体含义:
对于()的情况执行循环体内容。例:用for语句实现前面的算法:s=0;for(i=1;i<=10;i++)s+=i;
标准形式表达式1
表达式2表达式3循环体可以理解:循环变量i从初值1开始到终值10,步长为1,重复执行循环体。for语句的常见变化:
s=0;i=1;for(;i<=10;i++)s+=i;
s=0;
for(i=1;i<=10;)s+=i++;
s=0;i=1;
for(;i<=10;)s+=i++;
省略表达式1省略表达式3省略表达式1和3
s=0;i=1;for(;;){s+=i++;if(i>10)break;}s=10;i=10;for(;--i;)s+=i;省略表达式2表达式2是任意表达式
s=0;for(i=1,j=10;i<j;i++,j--)s+=i+j;
12345678910在程序设计中不要过分追求它的多变性ij用逗号表达式例:求n!n!=1*2*3…(n-1)*n
参照累加求和main(){
inti,n=5,s=1;for(i=1;i<=n;i++)s*=i;
printf(“\ns=%d”,s);}注意s的初值。注意当n较大时的情况。求和与连乘都是最常用的算法,要熟练掌握。
例:求自然数1-100中能被3整除的数之和。
main(){
inti,s=0;
printf(“\n%d”,s);}
求能被3整除但不被7整除的数之和?for(i=1;i<=100;i++)s+=i;for(i=1;i<=100;i++)if(i%3==0)s+=i;for(i=3;i<=100;i+=3)s+=i;
for(i=3;i<=100;i+=3)if(i%7)s+=i;
例:求任意100个数中的最大值。
main(){inti,a,max;
max=?for(i=1;i<=100;i++){
scanf(“%d”,&a);
if(a>max)max=a;}
printf(“\nmax=%d”,max);}
循环体中没有引用循环变量。i的作用?求任意个数中的最大值?for(i=1;;i++)
if(a==-9999)break;max=-32768;外重循环内重循环执行200次要掌握多重循环执行的全过程6.6循环的嵌套循环体内又包含另一个完整的循环结构(多重循环)。
for(i=1;i<=10;i++){for(j=1;j<=20;j++){s+=i+j;}
}以上多重循环结构可以简写为:
for(i=1;i<=10;i++)for(j=1;j<=20;j++)s+=i+j;例:一场晚会要现场随机抽取幸运观众,抽取办法是由主持人随机给定一个数字,如座位的行号和列号之和正好等于该数字的观众就是幸运观众,已知晚会现场共有30排座位,每排20个座位,请编写程序,从键盘输入主词人随机给定数字,输出所有幸运观众的坐号。
main(){
inti,j,num;
scanf(“%d”,&num);for(i=1;i<=30;i++)for(j=1;j<=20;j++)if(i+j==num)
printf(“\n%d,%d”,i,j);}注意循环的关系例:百钱买百鸡问题。给定100块钱,要求正好买100只鸡,已知公鸡5元/只,母鸡3元/只,小鸡1元/3只,问公鸡、母鸡和小鸡应各买多少只?若考虑用方程组:
x+y+z=1005x+3y+z/3=100
是一多解问题。用测试法求解的程序:
main(){intx,y,z;for(x=1;x<=100;x++)for(y=1;y<=100;y++)for(z=1;z<=100;z++)if(x+y+z==100&&5*x+3*y+z/3.0==100)printf(“\n%d,%d,%d”,x,y,z);}程序可进一步简化为:
main(){
intx,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3.0==100)
printf(“\n%d,%d,%d”,x,y,z);}}用测试法求解问题的典型例子测试法求解的程序设计有两个要点:
⑴通过循环列出所有可能的解。
⑵对所有列出的可能的解进行条件测试。例:判断一个数m是否为素数。main(){
inti,m;
scanf(“%d”,&m);
for(i=2;i<m;i++)if(m%i==0)break;if(i==m)
printf(“\n%disaprime”,m);else
printf(“\n%disnotaprime”,m);}用测试法求解例:(习题6.6)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。如:153是一水仙花数,因为
153=13+53+33。main(){inti,j,k,n;for(n=100;n<=999;n++){i=?j=?k=?if(i*i*i+j*j*j+k*k*k==n)
printf(“\n%d”,n);}}
通过循环列出n的所有可能的范围
i=n/100;k=n%10;j=n/10%10;main(){inti,j,k,n;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){
n=i*100+j*10+k;if(i*i*i+j*j*j+k*k*k==n)
printf(“\n%d”,n);}}通过循环列出i,j,k的所有可能的范围例:(习题6.4)
求S=∑i!=1!+2!+3!+4!+…+19!+20!20i=1main(){inti,j;floatt,s=0;for(i=1;i<=20;i++){
s+=?;}
printf(“\ns=%f”,s);}用两重循环实现s+=t;t=1;for(j=1;j<=i;j++)t*=j;用递推法:
递推公式:ti=ti-1.i求S=∑i!=1!+2!+3!+4!+…+19!+20!20i=1=1+∑(i-1)!.i=1+∑ti-1.i
20i=220i=2main(){
inti,j;floatt=1,s=t;for(i=2;i<=20;i++){
t=t*i;s+=t;}
printf(“\ns=%f”,s);}例:
递推公式:
s=∑—i!1120=—+—+—+—+…+—
1!2!3!4!20!11111ti=ti-1/
imain(){
inti,j;floatt=1,s=t;for(i=2;i<=20;i++){
t=t*i;s+=t;}
printf(“\ns=%f”,s);}t=t/i;习题6.3:
s=a+aa+aaa+aaaa+aaaaa
2+22+222+2222+22222
递推公式:ti=ti-1·?ti=ti-1*
10+amain(){
inti,j,a=2;floatt=a,s=t;for(i=2;i<=5;i++){
t=t*10+a;s+=t;}
printf(“\ns=%f”,s);}例:求方程2x3+3x2-4x+1=0的根。
简单迭代法基本思想:将原方程f(x)化为:x=g(x)迭代公式:x2=g(x1)x2=(2x13+3x12+1)/4迭代过程:假定一个x1x2=g(x1)不成立|x2-x1∣<εx1=x2输出x2成立main(){
floatx1,x2;
scanf(“%f”,&x1);while(1){
x2=(2*x1*x1*x1+3*x1*x1+1)/4;if(fabs(x2-x1)<1e-6)break;
?}
printf(“\n%f”,x2);}x1=x2;牛顿迭代法基本思想:
牛顿迭代公式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宝石、玉石矿项目建议书
- 护理课件设计与教学实践交流
- 心电图护理中的远程医疗应用
- 中专护理实践操作教学视频
- 肌肤护理与季节变化
- 护理质量与医疗纠纷预防
- DSA护理质量评估与改进
- 员工个人所得税知识培训课件
- 斜视患者的社交能力培养
- 吸氧需不需要湿化
- 国开《广告调查与预测》形考作业1-4答案
- 钣金折弯工艺培训课件
- 肛门指检课件
- 输液空气栓塞课件
- 城市更新交通系统优化实施技术方案
- 高一年级分科主题班会+课件-2025-2026学年上学期
- 水果店代加工合同协议书
- 2025年南京市事业单位招聘考试卫生类预防医学专业知识试卷
- 固定污染源采样课件
- 2025年综合类-卫生系统招聘考试-护士招聘考试历年真题摘选带答案(5卷套题【单选100题】)
- 如何制作低压电缆头
评论
0/150
提交评论