您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言循环结构--ppt课件
循环语句概述问题:求1~100的累计和。根据已有的知识,可以用“1+2+……+100”来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum=sum+i来计算(i依次取1、2、……、100),只要解决以下3个问题即可:(1)将i的初值置为1;(2)每执行1次“sum=sum+i”后,i增1;(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。第1页ppt课件根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了循环语句来实现,以简化、并规范循环结构程序设计。在C语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。第2页ppt课件§5.1for语句循环的意思就是让程序重复地执行某些语句。C语言提供的循环结构有三种:for语句、while语句和do_while语句。for语句既可以用于循环次数已知的情况,也可用于循环次数预先不知道的情况。for语句的一般形式为:for(初始表达式);条件表达式;循环表达式)循环体语句第3页ppt课件功能:先计算初始表达式的值,然后判断条件表达式的值,若该值为“假”,则退出循环,执行循环体下面的语句;若该值为“真”,则执行循环体语句,然后计算循环表达式的值,再判断条件表达式的值,重复以上的操作。for语句的流程图如图:一般情况下,循环体语句是由一对花括括起来的复合语句。第4页ppt课件for循环语句注意:①初始表达式可以省略,但须保留分号(;),同时在for之前必须给循环变量赋值,如:i=1;for(;i=100;i++)sum=sum+i;②条件表达式一般不可省略,否则为无限循环。如:for(i=1;;i++)sum=sum+i;相当于条件总为真,程序会一直不停的执行直到“数据溢出”。第5页ppt课件③循环表达式亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为0,从而能正常结束循环。如:for(sum=0,i=1;i=100;){sum=sum+i;i++;}④三个表达式均省略,即for(;;),为无限循环,程序中要避免这种情况的发生。⑤条件表达式可以是关系表达式、数值表达式。只要表达式的值0。就执行循环语句。如:for(i=0;(c=getchar())!=‘\n’;i+=c);第6页ppt课件⑥初始表达式、循环表达式可以是逗号表达式如:for(sum=0,i=1;i=100;i++,i++)相当于:sum=0;for(i=1;i=100;i=i+2)⑦for循环也可以嵌套,执行时是由外向里,逐层进行,先执行外层循环,再进入内层循环;退出时相反,由里向外逐层退出,先退出内层循环,然后退到上一层循环。【例5-2】任意从键盘输入两个整数a、b(ab),求它们之间的几何级数的和,数学表达式为。biaii第7页ppt课件这个问题与例5-1类似,只是所求级数和的初值和终值不一样,是由键盘任意输入的,为避免计算机错误,要求初值a要小于终值b。算法流程图如右图:第8页ppt课件/*exam5_2.c求几何级数的和*/#includestdio.hmain(){inti,j,a,b,sum=0;printf(Pleaseinputtwonumber:\n);scanf(a=%d,b=%d,&a,&b);i=a;j=b;if(ab){i=b;j=a;}for(;i=j;i++)sum=sum+i;printf(sum=%d\n,sum);}第9页ppt课件【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图案:这是一个很有规律的图案,可采用二重循环嵌套的方式:第1层控制行数,第2层控制列数。算法流程图如下图:第10页ppt课件/*exam5_3.c打印图案*/#includestdio.hmain(){inti,j;for(i=1;i=8;i++){for(j=1;j=7;j++)printf(*);printf(\n);}}第11页ppt课件§5.2while语句While语句也是一种用于产生循环动作的语句,一般形式为:while(表达式)循环体语句功能:先计算表达式的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行循环体语句,然后回过头来再检查表达式的值,重复以上的操作。while语句的流程图第12页ppt课件循环语句体:是用一对花括号括起来的复合语句。注意:在循环语句体中要有使表达式的值为假(或表达式的值为零)的语句,否则会使程序出现无限循环而发生错误。注意:由于while循环是先判断表达式的值,后决定是否执行循环语句,因此,有可能一次也不执行循环语句。第13页ppt课件【例5-4】将例5-1用while语句重写,求简单几何级数的和。/*exam5_4.c用while求简单几何级数的和*/#includestdio.hmain(){inti=1,sum=0;while(i=100){sum=sum+i;i++;}printf(sum=%d\n,sum);}程序运行结果:sum=5050第14页ppt课件【例5-5】输入一个正整数n,求n!。计算表达式:n!=n*(n-1)*(n-2)*…*2*1。用i代表循环变量,s代表n!的结果值。编程时既可以采用for循环,也可以采用while循环求任意正整数n的阶乘的算法流程图如图:第15页ppt课件/*exam5_5.cwhile应用:求n!*/#includestdio.hmain(){inti,n;longs;printf(pleaseenterainteger:\n);scanf(%d,&n);if(n=0){s=1;i=1;while(i=n){s=s*i;i++;}printf(%d!=%ld,n,s);}elseprintf(Invalidinput!);}试改为for循环?第16页ppt课件while和for的比较for(i=1;i=10;i++)sum=sum+i;i=1;循环变量赋初值while(i=10){循环条件sum=sum+i;i++;循环变量的改变}循环体第17页ppt课件例5-6从键盘输入一批学生的成绩,计算平均分。分析:求累加和确定循环条件•不知道输入数据的个数,无法事先确定循环次数•用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。第18页ppt课件#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:-16788735482Gradeaverageis0第19页ppt课件§5.3do~while语句do_while语句是另一种用于产生循环动作的语句。一般形式为:do{循环体语句}while(表达式);功能:先执行一次循环体语句,然后计算表达式的值,若该值为“真”,则重复以上的操作,直到该值为“假”,则退出循环语句,执行下一条语句。do_while语句的流程图:第20页ppt课件循环语句体应该是用一对花括号括起来的复合语句。注意:要有可以使表达式的值为“假”(即表达式的值等于零)的语句,否则会使程序出现无限循环而发生错误。do_while循环与while循环的区别,不论情况怎样,do_while循环中的循环语句体至少会执行一次。第21页ppt课件【例5-7】将例5-6用do_while语句重写。第22页ppt课件#includestdio.hIntmain(void){intnum;doublegrade,total;num=0;total=0;do{printf(“Entergrades:);scanf(“%lf”,&grade);total=total+grade;num++;}while(grade=0);/*输入负数,循环结束*/printf(“Gradeaverageis%.2f\n,(total+1)/(num-1));return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaverageis0第23页ppt课件【例5-8】求sin(x)=x-x3/3!+x5/5!-x7/7!+…直到最后一项绝对值小于le-7(即10-7)为止。分析:多项式从第二项起,每一项都是前一项乘以一个因子,(-x2)/(n*(n-1))(n=3,5,7,9……)用s代表sin(x)的值,t代表每一项的值,则:t=t*(-x2)/(n*(n-1));s=s+t;x的值是用弧度值表示的(10=/180弧度),如:3000.523598775算法流程图如后图:第24页ppt课件第25页ppt课件/*exam5_8.c求sin(x)的值*/#includestdio.h#includemath.hmain(){doubles,t,x;intn=1;scanf(%lf,&x);t=x;s=x;do{n=n+2;t=t*(-x*x)/(n*(n-1));s=s+t;}while(fabs(t)=1e-7);printf(sin(%lf)=%lf\n,x,s);}程序运行结果:1.57sin(1.570000)=1.000000第26页ppt课件•while是先判别条件,再决定是否循环;•do-while是先至少循环一次,然后再根据循环的结果决定是否继续循环。while和do-while的比较真假表达式循环体语句do-while的下一条语句真假while的下一条语句表达式循环体语句第27页ppt课件循环语句的选择if(循环次数已知)使用for语句else/*循环次数未知*/if(循环条件在进入循环时明确)使用while语句else/*循环条件需要在循环体中明确*/使用do-while语句第28页ppt课件§5.4用于循环中的break和continue语句一、break语句break语句的作用是从一种控制结构中跳出来。break语句可用于循环结构,其作用是从本层循环结构中跳出,可以提前结束执行循环语句体,执行循环结构外的下一条语句。break语句的一般形式为:break;break语句在循环语句体中的位置应根据程序的需要而定,一般是用在循环体内某一个if条件分支的语句中,用来表示在循环过程中当某一个条件成立时提前结束循环。第29页ppt课件程序解析-判断素数算法:除了1和m,不能被其它数整除。设i取值[2,m-1]•如果m不能被该区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数•只要找到一个i,使m%i为0,则m肯定不是素数m%2%3%4%5%(m-1)不是素数||==0==0是素数&&!=0!=0m不可能被大于m/2的数整除i取值[2,m-1]、[2,m/2]、[2,]mfor(i=2;i=m/2;i++)if(m%i==0)break;if(im/2)printf(yes\n)elseprintf(no\n”);第30页ppt课件intma
本文标题:C语言循环结构--ppt课件
链接地址:https://www.777doc.com/doc-7070798 .html