C语言程序设计(5循环结构)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计第五章循环结构4种循环语句whilefordo-while循环是指使用一定条件对同一个程序段重复执行若干次。循环结构又称重复结构,可以完成重复性、规律性的操作。gotogoto语句一般格式:goto语句标号由if……goto构成循环例4-1:main(){intx=0,y=0;star:if(x=3){y=x+1;x=x+1;gotostar;}printf(“%d”,y);}分析输出结果。一般形式:while(表达式)语句执行流程:while语句循环体:被重复执行的部分表达式循环体假(0)真(非0)while特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,可退出while循环条件表达式不成立(为零)循环体内遇break,return,gotowhile语句特点和说明while(表达式)语句例4-2:main(){intcount=1;while(count5){printf(”goodmorning!\n”);count++;}}goodmorning!goodmorning!goodmorning!goodmorning!#includestdio.hmain(){intn=9;while(n6){n--;printf(“%d”,n);}}876main(){intn=9;while(n6)n--;printf(“%d\n”,n);}6例4-3:用while循环求sum=1+2+3+……+100#includestdio.hmain(){intsum=0;inti=1;while(i=100){sum+=i;i++;}printf(“sum=%d,sum);}循环初值循环终值循环变量增值循环条件循环体如何求sum=1*2*3*……*100?【例5-13】猴子吃桃问题。猴子第一天摘下若干桃子,当即吃掉一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃掉前一天剩下的一半零一个。到第10天早上再想吃时,就只剩一个桃子了。问第一天共摘了多少个桃子?迭代法设第n天为xn个,第n+1天为xn+1则:xn+1=xn/2-1可得递推公式:xn=(xn+1+1)*21≤n≤9x10=1n=10即:x10=1x9=(x10+1)*2=4x8=(x9+1)*2=10……x1=(x2+1)*2=1534算法分析:倒推#includestdio.hmain(){intp2=1,p1;intn=9;while(n0){p1=2*(p2+1);p2=p1;n--;}printf(“thetotalis%d\n”,p1);}#includestdio.hmain(){intn=0;longt=1;printf(“nn!\n”);while(n8){n++;t*=n;printf(%d%ld\n,n,t);}}运行结果:nn!1122364245120672075040840320求n!(n=1~8)do-while语句一般形式:do语句while(表达式);执行流程:do循环体expr假(0)真(非0)while“;”不能少expr循环体假(0)真(非0)循环体while循环特点:先执行循环体,后判断表达式说明:至少执行一次循环体do~while可转化成while结构do~while语句特点和说明do语句while(表达式);main(){intx=3;do{printf(“%d”,x-=2);}while(x=0);}1-1x=x-2;printf(“%d”,x);求1+2+3+……100#includestdio.hmain(){intsum=0,i;i=1;do{sum=sum+i;i++;}while(i=100);printf(”sum=%d\n”,sum);}#includestdio.hmain(){intsum=0;inti=1;while(i=100){sum=sum+i;i++;}printf(“sum=%d,sum);}main(){inti=1,s=0;while(i1){s=s+i;i=i+1;}printf(s=%d\n,s);}s=0main(){inti=1,s=0;do{s=s+i;i=i+1;}while(i1);printf(s=%d\n,s);}s=1do-while与while的区别一般形式:for([表达1];[表达式2];[表达式3])语句执行流程:expr2循环体假(0)真(非0)forexpr1expr3for语句一般应用形式:for(初始化表达式;条件表达式;修正表达式)语句说明:for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省for语句可以转换成while结构表达式1;while(表达式2){语句表达式3;}for语句for([表达1];[表达式2];[表达式3])语句形式1:#includestdio.hmain(){inti=0;for(i=0;i10;i++)putchar(‘a’+i);}运行结果:abcdefghij形式2:#includestdio.hmain(){inti=0;for(;i10;i++)putchar(‘a’+i);}形式3:#includestdio.hmain(){inti=0;for(;i10;)putchar(‘a’+(i++));}形式4:#includestdio.hmain(){inti=0;for(;i10;putchar(‘a’+i),i++);}例:for语句形式的多样性main(){inti;for(i=0;i10;i++){i++;printf(“%d”,i);}}main(){inti;for(i=1;i5;i++);printf(“%d”,i);}513579空语句求1+2+3+……100main(){intsum=0,i;for(i=1;i=100;i++)sum=sum+i;printf(”sum=%d\n”,sum);}几种循环的比较………while(表达式)语句;………do语句while(表达式);循环控制条件循环条件初始化循环修改条件也可在for前也可在循环体内for(表达式1;表达式2;表达式3)语句几种循环的比较123循环体的执行:先判断条件,循环体可能一次也不执行。while(表达式)语句;后判断条件,循环体至少执行一次.do语句while(表达式);for循环功能强,两者界限不清,使用较随意。for(表达式1;表达式2;表达式3)语句界限不清……界限不清小结循环控制有两种方法:计数法和标志法。能确定循环次数时,采用计数法,用for语句比较清晰;不能确定循环次数时,采用标志法,设法找出循环终止条件,用while或do-while语句来实现。用while与do-while语句能实现的程序,用for语句未必可以实现。while语句是先判断后执行,do-while语句是先执行后判断。在循环体至少执行一次的情况下两者等价。#includestdio.hmain(){inti,s;s=0;i=1;while(i=100){s=s+i;i++;}printf(s=%d\n,s);}计算s=1+2+3+…+100#includestdio.hmain(){inti,s;s=0;i=1;do{s=s+i;i++;}while(i=100);printf(s=%d\n,s);}#includestdio.hmain(){inti,s=0;for(i=1;i=100;i++)s=s+i;printf(s=%d\n,s);}main(){inti;for(i=1;i5;i++);printf(“i=%d\n”,i);}main(){intx=3;do{printf(“%d\n”,x-=2);}while(x=0);}去掉分号,结果是?例:求Fibonacci数列第40项。又叫兔子繁殖问题(Fibonacci提出的)main(){intn,m;longf1=1,f2=1,f3;printf(“%ld%ld”,f1,f2);for(m=3;m=40;m++){f3=f1+f2;f1=f2;f2=f3;printf(“%d”,f3);}printf(“\n”);}设有一对新生兔子,从第3个月开始,每个月都生一对兔子。按此规律,若所有兔子都不死,问一年后共有多少对兔子?迭代法算法分析:月:123456781--1—1—1—1—1—1--111--11—1--111—1—1--111--11—1—1—1—111--11—1—11兔:1123581321f1f211f3=f1+f22f1f2f3=f1+f23f1f2f3=f1+f25f1f2f3=…初始条件终止条件迭代公式思考:f1=f2和f2=f3能否对换位置?不例:打印出所有的水仙花数。一个3位数,其各位数字的立方和等于它本身。分析:百位数i=m/100;十位数:j=m/10%10;个位数k=m%10;判断m==i^3+j^3+k^3main(){inti,j,k,m;for(m=100;m1000;m++){i=m/100;j=m/10%10;k=m%10;if(m==i*i*i+j*j*j+k*k*k)printf(%5d,m);}}穷举法计数法统计从键盘输入一行字符的个数.main(){intcount=0;while(getchar()!='\n‘)count++;printf(%d,count);}标志法:循环终止条件main(){intx,max,i;scanf(“%d”,&x);max=x;for(i=2;i=10;i++){scanf(“%d”,&x);if(xmax)max=x;}printf(“max=%d\n”,max);}依次输入10个数,找出最大数。分析:输入x1x1max输入x2若x2max则x2max输入x3若x3mx则x3max输入x4……打擂方式有一个分数序列2/1,3/2,5/3,8/5,21/13……求该数例前20项之和main(){intn,t;floata=2,b=1,s=0;for(n=1;n=20;n++){s=s+a/b;t=a;a=a+b;b=t;}printf(sumis%9.6f\n,s);}分析:每项用a/b表示,从第2项开始:每项的分子a是前一项的分子与分母之和,分母是前一项的分子。例题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数#includestdio.hmain(){charc;intletters=0,space=0,digit=0,others=0;printf(pleaseinputsomecharacters:\n);while((c=getchar())!='\n'){if(c='a'&&c='z'||c='A'&&c='Z')letters++;elseif(c=='')space++;elseif(c='0'&&c='9')digit++;elseothers++;}printf(allinall:char=%dspace=%ddigit=%dothers=%d\n,letters,space,digit,others);}循环的嵌套:循环体本身包含循环语句三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;

1 / 45
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功