版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、循环构造(IterationStructure)的概述1.目的为理解决含有重复解决内容的问题,必须采用循环语句(LoopStatement)来编程实现。2.类型(1)当型循环构造(2)直到型循环构造二、循环语句1.while语句①功效:实现当型循环构造。②形式while(体现式){循环体}③特点:先判断后执行。④举例:(累加和问题)编程计算整数1~100的和。inti;//循环变量intsum=0;//累加和清0i=1;//循环变量i赋初值while(i<=100){sum=sum+i;//循环变量累加到sum中i=i+1;//变化循环变量i的值}2.do-while语句①功效:实现直到型循环构造。②形式do{循环体}while(体现式);//注意最后的分号③特点:先执行后判断。④举例:修改上例。/*运用do-while语句编程实现整数1~100的和。*/inti;//循环变量intsum=0;//累加和清0i=1;//循环变量i赋初值do{sum=sum+i;//循环变量累加到sum中i=i+1;//变化循环变量i的值}while(i<=100);//注意最后的分号3.for语句①功效:实现当型循环构造。②形式for(体现式1;体现式2;体现式3){循环体}③特点:先判断后执行;使用频率最高。④举例:修改上例。/*使用for语句编程计算整数1~100的和。*/inti;//循环变量intsum=0;//累加和清0for(i=1;i<=100;i++){//第一种体现式完毕循环变量i赋初值;第三个体现式实现变化循环变量i的值sum=sum+i;//循环变量累加到sum中}4.几个循环语句的比较①由于while语句和for语句均实现当型循环构造,两者是完全等价的。for(体现式1;体现式2;体现式3){循环体;}体现式1;while(体现式2){循环体;体现式3;}②for语句适合循环次数事先已知的状况;而while语句和do-while语句适合循环次数事先未知的状况。③当第一次进入循环时条件就不满足,while语句和do-while语句就不等价。除此状况外,while语句和do-while语句均等价。三、程序举例1.循环次数已知的累加和问题①编程实现计算100以内偶数的和。/*办法一:使用for语句*/sum=0;for(i=2;i<=100;i=i+2){sum=sum+i;}/*办法二:使用while语句*/sum=0;i=2;while(i<=100){sum=sum+i;i=i+2;}/*办法三:使用do-while语句*/sum=0;i=2;do{sum=sum+i;i=i+2;}while(i<=100);第159页课后习题4.10、4.11、4.12、4.13属于循环次数已知,计算累加和的问题。参考代码注意:计算累加和时,需要累加和变量清0。2.循环次数已知的累乘积问题①编程计算n!=1*2*3*4*……*n的值。(课本第107页例题4.10)要想解决这个问题,需要用到“递推”的程序设计办法。也就是说,求n!时,先求1!,用1!*2得到2!,用2!*3得到3!,以这类推,直到运用(n-1)!*n得到n!为止,问题即可解决。/*办法一:运用for语句实现。*/inti,n;longintp=1;scanf("%d",&n);for(i=1;i<=n;i++){p=p*i;}printf("%d!=%ld\n",n,p);/*办法二:运用while语句实现。*/inti,n;longintp=1;scanf("%d",&n);i=1;while(i<=n){p=p*i;i=i+1;}printf("%d!=%ld\n",n,p);/*办法三:运用do-while语句实现。*/inti,n;longintp=1;scanf("%d",&n);do{p=p*i;i=i+1;}while(i<=n);printf("%d!=%ld\n",n,p);第159页课后习题4.14属于循环次数已知,计算累乘积的问题。参考代码注意:计算累乘积时,需要累乘积变量置1。3.循环次数未知的累加和(累乘积)问题①这也是累加求和的问题,但不同的是,这里的循环次数是预先未知的,并且累加项以正负交替的规律出现。实现办法,累加项通式term=sign/n表达。其中,sign按+1,-1,+1,-1,……交替变化,可用sign=-sign实现,sign的初值为1;n按1,3,5,7,……变化,可用n=n+2实现,n的初值为1;统计累加项数只有设立一种计数器变量count即可,初值为0。具体算法描述和代码实现参见课本第112页例题4.12。注意:①能够对的得到累加项或累乘项通式。②计算累加和问题时注意清0,计算累乘积问题时注意置1。③注意累加项或累乘项与否满足循环终止条件的判断。第159页课后习题4.15,4.16,4.17属于循环次数未知,计算累加和的问题。参考代码4.循环构造和选择构造的综合应用(1)猜数字游戏升级版:编程实现猜数字游戏,规定所猜数字为1~10之间的整数,游戏者只有三次机会,猜数字游戏过程中会根据游戏者所猜数字的大小给出一定的信息提示,增强游戏的趣味性。#include<stdio.h>#include<stdlib.h>#include<math.h>main(){intmagic;//计算机“想”的数intguess;//人猜的数intcount;srand(time(NULL));//原则库函数srand()为函数rand()设立随机数种子magic=rand()%10+1;//生成1-10之间的整数//=====运用do-while循环完毕猜数字游戏======count=0;//计算器清零do{printf("请您输入您要猜的整数:(1-10之间)\n");scanf("%d",&guess);//读入人猜的数count++;//判断计算机“想”的数与人猜的数的大小if(guess>magic){printf("猜错了!Toobig!\n");}elseif(guess<magic){printf("猜错了!Toosmall!\n");}else{printf("猜对了!\n");printf("您猜的数字为:%d\n",guess);}}while(guess!=magic&&count<=3);//判断循环终止条件,最多三次机会}(2)从键盘任意输入一种正整数,编程判断它与否是素数,若是素数,输出“Yes!”,否则输出“No!”。(参见课本第127页例4.19)判断素数的办法:由于素数是指除了能被1和它本身整除外,不能被其它任何整数整除的数。(1不是素数。2是最小的素数。)把m作为被除数,把i=2~(m-1)依次作为除数,判断被除数m与除数i相除的成果,若都除不尽,即余数都不为0,则阐明m是素数。反之,只要有一次能除尽(余数为0),则阐明m存在一种1和它本身以外的另外一种因子,它不是素数。/*办法一*/#include<stdio.h>main(){intnumber;inti;//===========定义循环变量i=====intflag=1;//======定义素数标记,初始为1=====printf("pleaseinputanumber:\n");scanf("%d",&number);//=====从键盘输入一种整数===for(i=2;i<=number-1&&flag;i++){//查看从2至number-1之间全部整数与否整除numberif(number%i==0){flag=0;//如果能整除number,则阐明number不是素数,存在因子,故素数标记改为0}}printf("\n");if(flag)//========素数标记为1,输出是素数,否则输出不是素数==========printf("YES====>%disaprimenumber!\n",number);elseprintf("NO====>%disnotaprimenumber!\n",number);}改善:为了减少循环次数,用数学的办法能够证明:只需用2~sqrt(m)之间的数去除m,即可得到对的的鉴定成果。/*办法二:目的使用sqrt()*/#include<stdio.h>#include<math.h>main(){intnumber;inti;//===========定义循环变量i=====intflag=1;//======定义素数标记,初始为1=====intk;printf("pleaseinputanumber:\n");scanf("%d",&number);//=====从键盘输入一种整数===k=(int)sqrt(number);for(i=2;i<=k&&flag;i++){//查看从2至sqrt(number)之间全部整数与否整除number,与办法一相比,减少了循环次数if(number%i==0){flag=0;//如果能整除number,则阐明number不是素数,存在因子,故素数标记改为0}}printf("\n");if(flag)//========素数标记为1,输出是素数,否则输出不是素数==========printf("YES====>%disaprimenumber!\n",number);elseprintf("NO====>%disnotaprimenumber!\n",number);}(3)从键盘任意输入一种正整数,编程实现:若该整数不是素数,则打印它全部因子;否则,打印“没有因子,是素数”的提示信息。(参见课本第131页例4.20)#include<stdio.h>main(){intnumber;inti;intflag=1;printf("pleaseinputanumber:\n");scanf("%d",&number);//=====从键盘输入一种整数===for(i=2;i<=number-1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保节能二手房定金协议模板
- 生态修复温室大棚施工合同
- 桥梁建设压路机施工合同
- 商业区道路沥青铺设工程合同
- 古建筑修复施工围墙合同
- 汽车租赁财务战略协议
- 电商领域兼职业务员招聘协议
- 电力建设塔机租赁协议
- 八年级道德与法治开学摸底考试卷(山东济南卷)(考试版)
- 八年级道德与法治开学摸底考试卷(湖北专用)(答案及评分标准)
- 全国河流水文站坐标
- 新生儿胎粪吸入综合征临床路径标准住院流程及路径表单
- 氯化钠特性表
- 钻井井架起升钢丝绳管理台账
- 单片机原理与应用说课
- 修辞手法课件(共46张PPT)
- 船舶租赁尽职调查
- GB/T 20307-2006纳米级长度的扫描电镜测量方法通则
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- GB/T 11270.2-2021超硬磨料制品金刚石圆锯片第2部分:烧结锯片
- 植物生理学-植物的逆境生理
评论
0/150
提交评论