




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章循环控制6.1
循环结构程序经常会重复执行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判断i是否小于等于100
如果i小于等于100,重复②;
否则,结束。此类根据某个条件重复执行相同算法的结构,称为循环。初始化部分。循环体。含有时条件趋假的语句。循环的条件。循环应在有限次完成。
C语言提供了三类实现循环的语句:
while,dowhile,for
⒈while循环(当型循环)格式:
while(expression)
statement;表达式:值非0,表示满足条件;值为0代表不满足条件。语句(复合语句),重复执行部分(循环体)。流程:e?yesstatement;no含有使条件趋假的语句。举例:求s=1+2+3+4+…+100#include<stdio.h>voidmain(void){ints=0,i=1;
while(i<=100)
{s=s+i;/*s+=i;*/i++;}
printf(“s=%d\n”,s);}初始化部分循环体条件测试使条件趋假语句chp3ex5⒊for循环格式:
for
(e1;e2;e3)
statement;流程:e1e2?yesstatement;e3no举例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints,i;
for(s=0,i=1;i<=100;i++
)
{s=s+i;
}
printf(“s=%d”,s);}使e2趋假。在for循环中,e1、e2、e3都可以省略!e1省略
s=0,i=1;e3省略
i++;初值表达式。测试表达式。增值表达式。⒋循环应用的几个问题⑴循环的嵌套概念:在一个循环的循环体内又包含一个完整的循环称为循环的嵌套。打印99乘法表。#include<stdio.h>voidmain(void){inti,j;for(i=1;i<=9;i++){
for(j=1;j<=9;j++){printf(“%4d“,i*j);}
printf(“\n“);}}外层循环内层循环说明:⒈内外层循环采用缩进形式。⒉while和do-while和for可以相互嵌套。
⒊执行次数为内层次数和外存次数的乘积。chp3ex7如何打印乘法表的一半?⑵循环的中断(break)和继续(continue)①循环的中断:break语句概念:循环体中可以加分支,判断是否继续执行循环,break语句可以提前结束循环。举例:求:r=1—10的圆的面积,如圆面积大于100则中断。for(r=1;r<=10;r++){area=pi*r*r;
if(area>100)break;
printf(“\n%f“,area);}满足条件,则退出循环。②继续循环:continue语句continue语句的作用是跳过本次循环剩余的循环体内容,执行下次循环。举例:求1—100内的偶数和。
s=0;for(n=1;n<=100;n++){
if(n%2!=0)
continue;
s+=n;}满足条件,跳过循环体,继续循环。⑶无限循环和空循环①条件为恒真的循环——无限循环while(1){…}do{…}while(1);for(;;){…}靠条件控制的break语句退出循环。例:程序等待直到输入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循环体为空语句的循环——空循环for(i=1;i<=MAX;t++);作用:程序延时。空语句⑷goto语句格式:gotoLabel/*Label:同一函数内语句前的标号。*/作用:转移到标号对应的语句上继续执行。loop:
if(i<=100){
sum=sum+i;i++;
gotoloop;
}循环和分支相互嵌套输入10个自然数统计其中偶数的个数及偶数值和。算法框图:start定义变量初始化循环?yes输入偶数?yes统计累加nono输出结果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;
for(i=1;i<=10;i++){
scanf(“%d\n”,&ix);
if(ix%2==0){iSum+=ix;iCount++;}
}printf(“Num=%d\nSum=%d”,iCount,iSum);}循环结构分支结构输入负数?do{if(ix<=0)printf(“dateerror”);}while(ix<=0);
算法的健壮性注意:结构应完整的包含和被包含。举例:⒈求100到200之间的所有素数(只能被1和自身整除的数)。对于自然数n,判断其是否为素数有以下三种方法:①判断n是否能被从2到n-1范围内的数整除;②判断n是否能被从2到(int)(n/2)范围的数整除;③判断n是否能被从2到(int)sqrt(n)范围的数整除;程序设计中标志技术的使用在程序设计中,经常要记录一些状态,作为判断的条件。因此需要在程序中设置一些标志,通常标志是整型变量。如:设置变量iFlag用于记录是否是素数,
iFlag==1是素数;iFlag==0不是素数。判断某自然数n是否是素数的算法s=sqrt(n);iFlag=1;i从2循环到sn%i==0yesiFlag=0;break;no继续循环直到退出iFlag==0?程序如下:#include<stdio.h>#include<math.h>voidmain(void){intn,j,s,iFlag;
for(n=101;n<200;n+=2){
s=sqrt(n);iFlag=1;for(j=2;j<=s;j++){if(n%j==0){iFlag=0;break;}}if(iFlag)printf(“\n%d”,n);
}}0不是素数;1是素数。枚举所有数构造,测试条件假定n是素数。如果n能被2到s的任意数整除,设标志退出循环。如果n是素数,输出n。chp3ex8
⒉求水仙花数(条件:三位数的个、十、百位的方和等于该数。153==13+53+33)。n为枚举变量,枚举初值100,枚举终值999。构造条件:取出n的个、十、百位数。测试是否满足条件,满足条件输出n。#include<stdio.h>voidmain(void){intn,a,b,c;
for(n=100;n<=999;n++){
a=n/100;b=n%100/10;c=n%10;
if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);
}}枚举所有三位数构造条件测试条件取n的百位a、十位b、个位c。chp3ex9思考题:
⒈36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一次搬完。问:男、女、小孩要多少?
⒉“百鸡百钱”问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?
⒊找出1000以内的完数,所谓完数是指该数的各因子之和等于该数,如6=1+2+3。
⒋证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶数,可以分解成两个质数之和)。举例⒈求ex=1+x+x2/2!+…+xn/n!前n+1项之和。迭代次数i012…n迭代公式t=t*x/i迭代初值exp=1,t=1,(i=1~n)#include<stdio.h>voidmain(void){floatexp,x,t;inti,n;
scanf(“%f,%d”,&x,&n);t=1.0;
exp=1.0;
for(i=1;i<=n;i++){t*=x/i;exp+=t;}
printf(“\n%f15.6”,exp)}迭代初值。迭代公式。迭代过程附加条件:当|t|<10-5,结束运算。if(fabs(t)<1e-5)break;chp3exa⒉用梯形法求定积分(0,0)yxf(x)ab面积hx①将[a,b]分为n等份,h=(b-a)/n;②求n个梯形面积之和,第i小面积x=x+hf1=f(x)下底s=s+(f0+f1)*h/2f0=f1迭代x初值为as初值为0f0初值为f(a)
次数为n迭代求积分的方法程序如下:#include<stdio.h>voidmain(void){floata,b,f0,f1,h,x,s=0.0;intn,i;scanf(“%f,%f,%d”,&a,&b,&n);h=(b-a)/h;
x=a;f0=x*x+12.0*x+4.0;
for(i=0;i<n;i++){
x=x+h;f1=x*x+12.0*x+4.0;s=s+(f0+f1)*h/2.0;f0=f1;
}
printf(“%f”,s);}chp3exb迭代初值。迭代循环⒊求s=a+aa+aaa+…+aaa…a。0<a<10共n项,最后一项有n个a。
如求s=2+22+222+2222+…+222…222n、a从键盘输入。迭代次数:i=1~n迭代初值:s=0.0,t=a迭代公式:t=t*10+a#include<stdio.h>voidmain(void){floats,t;inti,a,n;
do{scanf(“%d,%d”,&a,&n);if(a<1||a>9)printf(“\nDataInputError!\nInputagain:”);
}while(a<1||a>9);
for(s=0.0,t=a,i=1;i<=n;i++)
{s+=t;t=t*10+a;}
printf(“\ns=%f”,s);}xyf(x)x1f1=f(x1)x2f2=f(x2)算法分析:①输入x1、x2,并求出f1、f2。如果f1*f2大于0,有可能在此区间内没有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泡腾饮料健康配方行业跨境出海战略研究报告
- 校园安保智能化升级企业制定与实施新质生产力战略研究报告
- 2025年初中教师招聘面试人教版初中化学九年级下册第十二单元课题2《化学元素与人体健康》说课稿
- 电子废物回收行业跨境出海战略研究报告
- 法律法规汇编与解读企业制定与实施新质生产力战略研究报告
- 工业级硫酸铌制造行业深度调研及发展战略咨询报告
- 短视频广告内容创作与分发平台行业跨境出海战略研究报告
- 纺织防水剂行业跨境出海战略研究报告
- 私人订制表演艺术体验企业制定与实施新质生产力战略研究报告
- 水务行业质量保障措施及实施方案
- 分泌性中耳炎-3
- 工厂车间生产工艺培训
- 《中国心力衰竭诊断和治疗指南2024》解读(下)
- DB4202T 39-2024 城市桥梁与隧道运行监测技术规范
- 器官捐献合作协议书范文模板
- GB/T 6556-2024机械密封的型式、主要尺寸、材料和识别标志
- 新人教版英语五年级下册教材解读
- 异常子宫出血护理
- 《马克思主义发展史》题集
- 政府、办公楼物业管理服务投标方案(技术标)
- 因式分解十字相乘法练习200题及答案
评论
0/150
提交评论