您好,欢迎访问三七文档
第五章循环结构程序的基本框架voidmain(){组织数据;输入数据;处理数据;输出结果;}使用变量使用函数scanf()顺序结构选择结构循环结构使用函数printf()求1~100自然数之和分析:将题目展开1+2+3+4+5+6+…..+100加法就是反复进行的操作。所以要用循环主要内容break与continue语句循环的嵌套for语句do-while语句while语句一般形式:while(表达式)循环体语句;执行流程:循环条件循环体真假while下一条语句表达式循环体语句while语句特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return无限循环:while(1)循环体;求1~100自然数之和1+2+3+4+5+6+7+8+9+10+11将题目展开:1+2+3+4+5+6+…..+100后面的数比前面的数大1假设循环变量为i,累加器为sum(初始时i=1,sum=0)第一次循环时i是1,sum为0+1;第二次循环时i是2,sum为1+2;第三次循环时i是3,sum为3+3;第四次循环时i是4,sum为6+4;sum=sum+i;i=i+1;循环体#includestdio.hmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(%d,sum);}循环初值循环终值循环变量增值循环条件循环体sum=0+1sum=1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050求1~100自然数之和(用while循环)例显示1-10的平方#includestdio.hmain(){inti=1;while(i=10){printf(%d*%d=%d\n,i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例5-1编写程序,求12+22+32+…+n2直到累加和大于或等于10000为止。每执行1次“sum+=i2”后,i增1;2将i的初值置为1;1只需要解决以下三个问题:当sum=10000时,停止计算3while语句程序如下:#includestdio.hmain(){intn,sum;i=1;sum=0;while(sum10000){sum+=i*i;i++;}printf(“n=%dsum=%d\n,i-1,sum);}while语句循环初值循环变量增值循环体循环条件i=1,sum=0sum10000sum=sum+i*ii=i+1输出例5-2用公式求的近似值,直到最后一项的绝对值小于10-6为止。pi=pi+t,i=i+2,s=-s,t=s/i2每一项值t=1,pi=0,分母i=1.0,符号s=11只需要解决以下三个问题:当|t|1e-6时,停止计算3...9171513114while语句t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+ti=i+2s=-st=s/npi=pi*4输出pi程序如下:#includestdio.h#includemath.hmain(){ints=1;floati,t,pi;i=1.0;pi=0;t=1.0;while(fabs(t)=1e-6){pi=pi+t;i=i+2.0;s=-s;t=s/i;}pi=pi*4;printf(%f\n,pi);}while语句循环变量增值循环体例从键盘输入一批学生的成绩,计算平均分。分析:求累加和确定循环条件•不知道输入数据的个数,无法事先确定循环次数•用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。#includestdio.hintmain(void){intnum;doublegrade,total;num=0;total=0;printf(Entergrades:\n);scanf(%lf,&grade);/*输入第1个数*/while(grade=0)/*输入负数,循环结束*/{total=total+grade;num++;scanf(%lf,&grade);}if(num!=0)printf(Gradeaverageis%.2f\n,total/num);elseprintf(Gradeaverageis0\n);return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaverageis0while语句真题分析(2006年9月)有以下程序,执行后的输出结果是——A、1B、2C、4D、死循环main(){intk=5;while(--k)printf(%d,k-=3);printf(\n);}A--1while语句真题分析(2006年9月)有下列程序,若运行时从键盘输入:18,11CR,则程序的输出结果是——main(){inta,b;printf(Entera,b:);scanf(%d,%d,&a,&b);while(a!=b){while(ab)a-=b;while(ba)b-=a;}printf(%3d%3d\n,a,b);}a=7abb=411while语句练习题1、有以下程序,程序执行后的输出结果是——main(){intx=0,y=5,z=3;while(z--0&&++x5)y=y-1;printf(“%d,%d,%d\n,x,y,z);}1z=2x=1y=42z=1x=23y=3y=2z=0x=3z=-132-1一般形式:do循环体语句;while(表达式);执行流程:真假表达式循环体语句do-while的下一条语句先循环后判断do-while语句特点:先执行循环体,后判断表达式说明:至少执行一次循环体do-while可转化成while结构表达式循环体假(0)真(非0)循环体while循环#includestdio.hvoidmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(%d,sum);}求1~100自然数之和(用do_while循环)真假i=100sum=sum+Ii++输出分析:(1)背景:斐波那契(中世纪意大利数学家)在《算盘书》中提出了1对兔子的繁殖问题:如果每对大兔子成长后每月能生1对小兔子,而每对小兔子在出生后的第3个月后开始,每月再生1对小兔子,假定在不发生死亡的情况下,最初的1对兔子在一年末能繁殖成多少对兔子?(假定兔子都是雌雄成对,小兔子一个月长成大兔子)例5-4计算fibonacci数列,直到某项大于1000为止,并输出该项的值。(2)斐波那契数列数学模型:斐波那契数列为:0,1,1,2,3,5,8,即从第三项起每一项是其前两项之和。即:F1=0......(n=1)F2=1......(n=2)Fn=Fn-1+Fn-2......(n≥3)算法分析:数列011235813……始:f1f21f1f22f1f23f1f24f1f2f=f1+f2f1=f2f2=f判断f2是否大于1000,若不大于重复上面的步骤;否则结束循环。程序如下:#includestdio.hmain(){intf1,f2,f;f1=0;f2=1;do{f=f1+f2;f1=f2;f2=f;}while(f2=1000);printf(F=%d\n,f2);}程序运行结果为:F=1597do-while语句比较适用于处理:不论条件是否成立,先执行1次循环体语句组的情况。除此之外,do-while语句能实现的,while语句和for语句也能实现,而且for语句更简洁。do-while语句do-while语句真题分析(2006年9月)下列程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。#includestdio.hmain(){intn,s;printf(Enteranumber:);scanf(%d,&n);printf(Output:);do{s=n%10;printf(%d,s);——————;}while(n!=0);printf(\n);}n=n/10do-while语句真题分析(2005年9月)有以下程序段,为使程序不陷入死循环,从键盘输入的数据应该是——。A、任意正奇数B、任意负偶数C、任意正偶数D、任意负奇数intn,t=1,s=0;scanf(%d,&n);do{s=s+t;t=t-2;}while(t!=n);Ddo-while语句练习题1、有以下程序,若要使程序的输出值为2,则应该从键盘给n输入的值是——A、-1B、-3C、-5D、0main(){ints=0,a=1,n;scanf(“%d”,&n);do{s+=1;a=a-2;}while(a!=n);printf(“%d\n”,s);}Bwhile是先判别条件,再决定是否循环;do-while是先至少循环一次,然后再根据循环的结果决定是否继续循环。while和do-while的比较真假表达式循环体语句do-while的下一条语句真假while的下一条语句表达式循环体语句例while和do-while比较#includestdio.hvoidmain(){inti,sum=0;scanf(%d,&i);do{sum+=i;i++;}while(i=10);printf(%d,sum);}#includestdio.hvoidmain(){inti,sum=0;scanf(%d,&i);while(i=10){sum+=i;i++;}printf(%d,sum);}一般形式:for([表达式1];[表达式2];[表达式3])循环体语句;执行流程:表达式2循环体假(0)真(非0)for表达式1表达式3for语句for语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值){循环体语句;}#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(%d,sum);}i=10执行流程:i=1sum=sum+ii++printf(%d,sum);不满足循环结构后面的语句for(i=1;i=10;i++)sum=sum+i;for语句表达式1;while(表达式2){循环体语句;表达式3;}说明:for语句中表达式1,表达式2,表达式3类型任意,都可省略但分号;不可省无限循环:for(;;)for语句可以转换成while结构【例】编程计算100至200自然数之和。要求用for循环语句方法一:#includestdio.hmain(){inti,sum=0;for(i=100;i=200;i++)sum+=i;printf(“sum=%d\n”,sum);}使用了for语句的标准格式,确定了循环三要素。方法二:#includestdio.hmain(){inti=100,sum=0;/*先给循环变量赋初值*/for(;i=200;i++)/*省去表达式1*/sum+=i;printf(“sum=%d\n”,sum);}先给循环变量赋初值,从而省去表达式一方法三:#includestdio.hmain(){inti=100,sum=0;/*先给循环变量赋初值*/for(;i=200;)/*省略表达式1和表达式3*/sum+=i++;/*求和的同时递增循环变量*/printf(“sum=%d\n”,sum);}在方法二的基础上省去表达式三,求和的同时递增循环变量方法四:#includestdio.hmain(){inti=100,sum=0;for(;;)/
本文标题:第5章循环结构.
链接地址:https://www.777doc.com/doc-2110459 .html