C语言循环解析.pptx
《C语言循环解析.pptx》由会员分享,可在线阅读,更多相关《C语言循环解析.pptx(104页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、程序及程序设计的初步知识当条件判断表达式为真循环体语句判断表达式循环体语句真假循环体语句直到判断表达式为假循环体语句判断表达式假真循环结构比较当型循环直到型循环第1页/共104页【例5.1】计算ex,lnx。其中x=1,2,3,4,5。#include#include main()int x;float y,z;x=1;y=exp(x);z=log(x);printf(”y=%f,z=%f”,y,z);x=2;y=exp(x);z=log(x);printf(”y=%f,z=%f”,y,z);x=3;y=exp(x);z=log(x);printf(”y=%f,z=%f”,y,z);x=4;y
2、=exp(x);z=log(x);printf(”y=%f,z=%f”,y,z);x=5;y=exp(x);z=log(x);printf(”y=%f,z=%f”,y,z);return(1);第2页/共104页采用循环控制语句实现#include#include main()int x;float y,z;x=1;while (x=5)y=exp(x);z=log(x);x+;printf(“y=%f,z=%f”,y,z)循环执行的条件:(x=5)每一次循环执行:计算y和z 改变x的值 输出y和z第3页/共104页4while while 语句语句“当型当型”循环结构循环结构一般形式:一般形
3、式:while(表达式)语句;/*循环体*/说明:说明:“表达式表达式”为循环条件;为循环条件;“语句语句”为循环体。为循环体。特点:特点:先判断表达式,后执行语句先判断表达式,后执行语句图6_1难点:如何设置表达式和循环体中的语句.第4页/共104页【例5.2】求 。数学方法SUM=1+2+3+4+5+99+100SUM=1+2+3+4+5+N-1+N第5页/共104页改进方法:设两个变量:一个变量sum代表和,一个变量I代表序列中的某一个数。每一次相加的结果再放入sum中,再和下一项进行运算,表示如下:sum=1+2+3+4+5+N-1+NsumIsumIsumIsumI第6页/共104页
4、7算法如下:用循环来表示算法,可以将算法表示如下:S1:读入NS2:sum=0S3:I=1S4:将sum+I 的和赋给sum,即:sum=sum+IS5:使I 的值加1,即:I=I+1S6:如果I=N,再做S4,否则,算法结束。第7页/共104页9main()main()int i=1,sum=0;int i=1,sum=0;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printf(%d n,sum);printf(%d n,sum);编程求解:1+2+3+100?图6_2“i1”可否换成:“i0”第9页/共104页10注意:注意:JJw
5、hilewhile语句中的语句中的“表达式表达式”(即判断条件)可以是任意的表达式,但一般为关(即判断条件)可以是任意的表达式,但一般为关系表达式或逻辑表达式。系表达式或逻辑表达式。JJ循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。JJ在循环体中应有使循环趋向于结束的语句,以免形成死循环。在循环体中应有使循环趋向于结束的语句,以免形成死循环。第10页/共104页11典型例题1.累加求和、求积(迭代算法)分析:这一类题型是求一数列的和(积)。在处理此类问题时,通常采用的方法是:用一个变量存放累加和(积)
6、,从0(1)开始.第二个变量代表加数(或乘数),每次按一定的规律进行变换.第三个变量控制循环.从一个初始值(一般从1开始),每做一次循环,其值改变,然后判断表达式的值,最终跳出循环.【例5.3】输入10个数,求和第11页/共104页【例5.3】输入10个数,求和算法分析:sum:存放累加和.(初值为0)x:加数 i:控制循环.(初值为1)sum=0 i=1i=10得到加数 计算sum改变i01sum=0 i=1i=10scanf(“%f”,x)sum=sum+xi+01sum x1 x2 x3 x4 x10 1:sum2:sum3:sum10:sum设置表达式:i=10设置循环体:得到第 i个
7、数(加数)计算sum 改变循环变量i第12页/共104页#include“stdio.h”main()floatx,sum;inti;sum=0;i=1;/*对sum和i赋初值*/While(i=10)/*循环取决于i的值*/scanf(“%f”,&x);sum=sum+x;i+;printf(”sum=%f”,sum);算法描述如下:/*此时加数为一个输入量循环体每执行一次则执行一次输入语句,即读入一个数*/第13页/共104页加数的变化规律:后一项=前一项+1(即增量为1)循环变量的规律:每做一次循环,则增1.因此可用一个变量i来代表加数和循环变量.设置表达式:isum 改变加数 改变循环
8、变量 (i+);sum=0 i=1i=100sum=sum+ii+01【例5.4】求 1+2+3+4+100 的和第14页/共104页源程序如下:#include “stdio.h”main()int i,sum=0;/*累加求和从0开始*/i=1;/*i 既是加数,又是循环变量*/while(i=100)/*循环执行的条件是i=100*/sum=sum+i;i+;/*改变i*/printf(“%d”,sum);第15页/共104页可能是有规律可寻的,比方说存在通项公式:a(I)=f(I);或递推公式:a(I)=f(a(i-1),I)算法可描述为:s=0;n=1;While (n=100)s=
9、s+通项(某一项);/*这时通项需要通过计算*/n+;每次从变量的一个旧值推出新值(即迭代算法)。第16页/共104页main()int i,sum=0;i=1;/*i 既是通项,又是循环变量*/while(i=99)/*循环执行的条件是i=99*/sum=sum+i;i=i+2;printf(“%d”,sum);【例5.5】求1+3+5+7+9+99难点:1)找出通项公式,即找出加数的变化规律为:后一项=前一项+2;2)循环如何控制:每一次增加2.思考:如果数列是:1+1.1+1.2+1.3+1.4+1.5+2.0第17页/共104页18典型例题1.累加求和、求积(迭代算法)【例5.6】计算
10、n!,其中n由键盘输入。输入fac=1 i=1i=nfac=fac*ii+01分析如下:fac:存放累加乘积.i:乘数,又控制循环.设置循环表达式:ifac 改变乘数 改变循环变量 (i+);第18页/共104页源程序如下:注意:这里,尽管n和n!是整数,但当n较大时,n!可能超过整型数范围。所以将变量fac定义为实型。算法为:main()float fac;int i,n;scanf(“%f”,&n);fac=1=1;i=2;i=2;While (i=n)fac=fac*i;i+;i+;printf(“fac=%8.0f”,fac);思考:如何求S=1!+2!+3!+n!(这是一个累加问题,
11、通项a(n)=n!=n*a(n-1)第19页/共104页20【例【例5.75.7】求】求2 2n n。main()int i=1,n;long int p=1;scanf(%d,&n);while(i=n)p*=2;i+;printf(%dn,p);图5_3分析;输入:n输出:P(表示n!)第20页/共104页典型例题2.菲波拉契数列问题【例5.8】:求菲波拉契数列a0,a1a20分析:该数列的规律是:a0=0,a1=1,a2=1,a3=2,a4=3 an=an2+an1 即:a2=a0+a1;a3=a1+a2;a4=a2+a3;a20=a18+a19 难点:如何设置循环体:an=an2+an
12、1考虑an、an2、an1如何变换:a3a2a3a4a2a1a0:代表前一个数a1:代表后一个数a2:代表需要计算的数每计算一次a2则a1 a0a2 a1第21页/共104页a2=a0+a1;a0=a1;a1=a2;a2=a0+a1;(a3=a1+a2;)(a4=a2+a3;)a0=a1;a1=a2;a2=a0+a1;用a2代表所求的某一项,a0、a1代表该项的前两项,每求一次a2,将a1、a2作为下一次的a0和a1。第22页/共104页算法描述:分析:1)序列中的前两项已知,可直接输出,需要计算的是a2,a3a20共19项.且通项公式为:每一项=前两项之和 2)设置循环表达式:i=19 3)
13、设置循环体:计算a2;求a0,a1;输出a2;改变循环变量 (i+);输出a0、a1i=19计算a2,a0,a1输出a2,i+01第23页/共104页 源程序如下:#include “stdio.h”void main()float a0,a1,a2;int i=1;a0=0;a1=1;printf(“%10.0f,%10.0fd”,a0,a1);/*循环外给a0,a1赋初值,并输出这两个值*/while (i=19)/*从a2开始进入循环,到a20结束*/a2=a0+a1;/*计算公式*/a0=a1;a1=a2;i+;printf(“%10.0f”,a2)/*输出a2*/*这两个语句顺序不能
14、颠倒,下标不能错*/第24页/共104页典型例题2.菲波拉契数列问题【例5.9】:输出菲波拉契数列前21项,并求和。分析:在求和之前,应先求出通项的值,并输出.#include“stdio.h”main()float s,a0,a1,a2;int i=0;a0=0;a1=1;printf(“%10.f,%10.0f”,a0,a1);s=a0+a1;/*累加单元先求前两项的和*/While (i=0时.因此,循环表达式为 while (x=0)2)设置循环体:每得到一个新的数x,就将它和max比较,如果(xmax),就执行max=x,否则比较x和min,如果(xmax)max=x;else if
15、 (x=0)/*当x非负,执行循环体*/scanf(%f,&x);if (xmax)max=x;else if(x0 xmax10max=xX=a&c=A&c=0&ch=a&c=A&c=0&c=a&c=A&c=0&ch=9)s2+=1;ch=getchar();/*scanf(“%c”,&C);*/第30页/共104页【例5.12】:输入某班学生的成绩,以负数 结束,输出各分数段的人数。score:成绩 S1:存放90分以上人数 S2:存放8089分人数 S3:存放7079分人数 S4:存放6069分人数 S5:存放60分以下的人数 循环终止条件为score=0.设置循环体:每次得到一个新的成
16、绩score,然后判断它在哪个分数段,将它所在的分数段对应的计数变量增1.如score=89,则s2=s2+1;第31页/共104页#include “stdio.h”main()float score;int s1=s2=s3=s4=s5=0;scanf(“%f”,&score);while (score=0)if(score=90)s1=s1+1;else if(score=80)s2+=1;else if (score=70)s3+;else if(score=60)s4+;else s5+;printf(“%8.1f,%8.1f,%8.1f,%8.1f,%8.1f”,s1,s2,s3,
17、s4,s5);scanf(“%f”,&score);67 78 91 55 60 -77scorescore=67 s4=1score=78 s3=1score=91 s1=1score=55 s5=1score=60 s4=2score=-77 跳出循环第32页/共104页33while while 语句语句在while循环体内也允许空语句。例如:while(c=getchar()!=X0D);/*这个循环直到键入回车为止 */可以有多层循环嵌套。语句可以是复合语句,此时必须用“”和“”括起来第33页/共104页例:有如下程序,该程序段的输出结果是main()int n=8;while(n6
18、)n-;printf(“%d”,n);WHILE语句中的条件表达式:(n6)1)n-;即n=7,输出72)n-;即n=6,输出6(n6)条件不满足,结束循环76第35页/共104页例:若输入字符串:ENGLISH,则以下while循环体将执行 _ 次。While(ch=getchar()=S)printf(“*”);循环体执行的条件:(ch=getchar())=S输入为:ENGLISH则ch=E因此条件不满足,结束循环0第37页/共104页do-while do-while 语句语句_“直到型直到型”循环结构循环结构一.格式(直到型)do 语句while(表达式);二.执行过程 系统首先执行
19、循环体,再判断表达式的值,若值为“真”,则继续执行循环体;否则跳出循环体,执行后续语句。它的特点是“先执行,后判断”。至少要执行一次循环语句循环体表达式01第38页/共104页39三.典型例题【例5.13】:求 1+2+3+4+100 的和main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100)printf(“%d”,sum);sum=0 i=1i=100sum=sum+ii+10第39页/共104页例:假定a和b为int型变量,则执行以下语句后b的值为a=1;b=20;do b-=a;a+;while(b-0);Do-while循环的特点:先执行后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 解析
限制150内