




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
循环语句概述问题:求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课件循环语句概述问题:求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课件§5.1for语句循环的意思就是让程序重复地执行某些功能:先计算<初始表达式>的值,然后判断<条件表达式>的值,若该值为“假”,则退出循环,执行循环体下面的语句;若该值为“真”,则执行<循环体语句>,然后计算<循环表达式>的值,再判断<条件表达式>的值,重复以上的操作。for语句的流程图如图:一般情况下,<循环体语句>是由一对花括括起来的复合语句。第4页ppt课件功能:先计算<初始表达式>的值,然后判断<条件表达式>的值,for循环语句注意:
①<初始表达式>可以省略,但须保留分号(;),同时在for之前必须给循环变量赋值,如:i=1;for(;i<=100;i++)sum=sum+i;②<条件表达式>一般不可省略,否则为无限循环。如:for(i=1;;i++)
sum=sum+i;相当于条件总为真,程序会一直不停的执行直到“数据溢出”。第5页ppt课件for循环语句注意:①<初始表达式>可以省略,但须保留分③<循环表达式>亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为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(a<b),求它们之间的几何级数的和,数学表达式为。第7页ppt课件⑥初始表达式、循环表达式可以是逗号表达式如:for(s这个问题与例5-1类似,只是所求级数和的初值和终值不一样,是由键盘任意输入的,为避免计算机错误,要求初值a要小于终值b。算法流程图如右图:第8页ppt课件这个问题与例5-1类似,只是所求级数和的初值和终值不一样,是/*exam5_2.c求几何级数的和*/#include<stdio.h>main(){ inti,j,a,b,sum=0; printf("Pleaseinputtwonumber:\n"); scanf("a=%d,b=%d",&a,&b); i=a;j=b; if(a>b) {i=b;j=a;} for(;i<=j;i++) sum=sum+i; printf("sum=%d\n",sum);}第9页ppt课件/*exam5_2.c求几何级数的和*/第9页ppt课件【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图案:
这是一个很有规律的图案,可采用二重循环嵌套的方式:第1层控制行数,第2层控制列数。算法流程图如下图:第10页ppt课件【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图/*exam5_3.c打印图案*/#include<stdio.h>main(){ inti,j; for(i=1;i<=8;i++) { for(j=1;j<=7;j++) printf("*"); printf("\n"); }}第11页ppt课件/*exam5_3.c打印图案*/第11页ppt课件§5.2while语句
While语句也是一种用于产生循环动作的语句,一般形式为:while(<表达式>)
<循环体语句>功能:先计算<表达式>的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行<循环体语句>,然后回过头来再检查<表达式>的值,重复以上的操作。while语句的流程图第12页ppt课件§5.2while语句While语句也是一种用于产生<循环语句体>:是用一对花括号括起来的复合语句。注意:在<循环语句体>中要有使<表达式>的值为假(或<表达式>的值为零)的语句,否则会使程序出现无限循环而发生错误。注意:由于while循环是先判断<表达式>的值,后决定是否执行<循环语句>,因此,有可能一次也不执行<循环语句>。第13页ppt课件<循环语句体>:是用一对花括号括起来的复合语句。注意:在<【例5-4】将例5-1用while语句重写,求简单几何级数的和。/*exam5_4.c用while求简单几何级数的和*/#include<stdio.h>main(){ inti=1,sum=0; while(i<=100) { sum=sum+i;
i++; } printf("sum=%d\n",sum);}程序运行结果:sum=5050第14页ppt课件【例5-4】将例5-1用while语句重写,求简单几何级【例5-5】输入一个正整数n,求n!。计算表达式:n!=n*(n-1)*(n-2)*…*2*1。用i代表循环变量,s代表n!的结果值。编程时既可以采用for循环,也可以采用while循环求任意正整数n的阶乘的算法流程图如图:第15页ppt课件【例5-5】输入一个正整数n,求n!。计算表达式:n!=n*/*exam5_5.cwhile应用:求n!*/#include<stdio.h>main(){ 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); } else printf("Invalidinput!");}试改为for循环?第16页ppt课件/*exam5_5.cwhile应用:求n!*/试改为fowhile和for的比较for(i=1;i<=10;i++)
sum=sum+i;i=1;
循环变量赋初值while(i<=10){循环条件
sum=sum+i;
i++;循环变量的改变}循环体第17页ppt课件while和for的比较for(i=1;i<例5-6从键盘输入一批学生的成绩,计算平均分。分析:求累加和确定循环条件不知道输入数据的个数,无法事先确定循环次数用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。第18页ppt课件例5-6从键盘输入一批学生的成绩,计算平均分。第18页pp#include<stdio.h>Intmain(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课件#include<stdio.h>Entergrades§5.3do~while语句
do_while语句是另一种用于产生循环动作的语句。一般形式为:do{<循环体语句>}while(<表达式>);功能:先执行一次<循环体语句>,然后计算<表达式>的值,若该值为“真”,则重复以上的操作,直到该值为“假”,则退出循环语句,执行下一条语句。do_while语句的流程图:第20页ppt课件§5.3do~while语句do_while语句是另<循环语句体>应该是用一对花括号括起来的复合语句。注意:要有可以使<表达式>的值为“假”(即<表达式>的值等于零)的语句,否则会使程序出现无限循环而发生错误。do_while循环与while循环的区别,不论情况怎样,do_while循环中的<循环语句体>至少会执行一次。第21页ppt课件<循环语句体>应该是用一对花括号括起来的复合语句。注意:要【例5-7】将例5-6用do_while语句重写。第22页ppt课件【例5-7】将例5-6用do_while语句重写。第22#include<stdio.h>Intmain(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课件#include<stdio.h>Entergrades【例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课件【例5-8】求sin(x)=x-x3/3!+x5/5!-x7第25页ppt课件第25页ppt课件/*exam5_8.c求sin(x)的值*/#include<stdio.h>#include<math.h>main(){ 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课件/*exam5_8.c求sin(x)的值*/程序运行结果:
while
是先判别条件,再决定是否循环;
do-while
是先至少循环一次,然后再根据循环的结果决定是否继续循环。while和do-while的比较真假表达式循环体语句do-while的下一条语句真假while的下一条语句表达式循环体语句第27页ppt课件while是先判别条件,再决定是否循环;while和
循环语句的选择if(循环次数已知) 使用for语句else /*循环次数未知*/ if(循环条件在进入循环时明确)
使用while语句
else /*循环条件需要在循环体中明确*/
使用do-while语句第28页ppt课件循环语句的选择if(循环次数已知)第28页ppt课件§5.4
用于循环中的break和continue语句
一、break语句break语句的作用是从一种控制结构中跳出来。break语句可用于循环结构,其作用是从本层循环结构中跳出,可以提前结束执行<循环语句体>,执行循环结构外的下一条语句。break语句的一般形式为:break;
break语句在循环语句体中的位置应根据程序的需要而定,一般是用在循环体内某一个if条件分支的语句中,用来表示在循环过程中当某一个条件成立时提前结束循环。第29页ppt课件§5.4用于循环中的break和continue语句
程序解析-判断素数算法:除了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,]for(i=2;i<=m/2;i++)if(m%i==0)break;if(i>m/2)printf("yes\n")elseprintf("no\n”);第30页ppt课件程序解析-判断素数算法:除了1和m,不能被其它数整除。fointmain(void){inti,m; printf(“Enteranumber:"); scanf("%d",&m); for(i=2;i<=m/2;i++) if(m%i==0)break; if(i>m/2)printf("%disaprimenumber!\n",m); elseprintf("No!\n"); }源程序-判断素数Enteranumber:9NoEnteranumber:1111isaprimenumber!循环条件?循环的结束条件?第31页ppt课件intmain(void)源程序-判断素数Enterabreak语句while(exp){
语句1if(expb)break;
语句2}真假
exp
语句1假
expb
语句2循环体真for(i=2;i<=m/2;i++) if(m%i==0)break;if(i>m/2)printf("Yes");elseprintf("No!\n");当循环有多个出口时:表示循环条件区分结束条件for(i=2;i<=m/2;i++)if(m%i==0){printf("No!\n");break;}printf("Yes");第32页ppt课件break语句while(exp){真假exp二、Continue语句Continue语句只适用于循环结构,其一般形式为:作用:提前结束本次循环,提前进行下一次循环。【例5-10】编写程序,打印100-200中不能被3整除的数。/*exam5_10.c求不能被3整除的数*/#include<stdio.h>main(){ intn; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d\t",n); }}第33页ppt课件二、Continue语句Continue语句只适用于循环结算法流程图如图:要准确地使用break语句和continue语句,除非有必要,否则若可以不用则尽量不采用break语句和continue语句。第34页ppt课件算法流程图如图:要准确地使用break语句和continu对于例5-10的问题,打印100-200中不能被3整除的数。不采用continue语句的算法流程图如图所示:第35页ppt课件对于例5-10的问题,打印100-200中不能被3整除的数。/*exam5q10.c例5-10问题不用continue*/#include<stdio.h>
main(){ intn; for(n=100;n<=200;n++) if(n%3
!=0)/*n不能被3整除*/
printf("%d",n); }第36页ppt课件/*exam5q10.c例5-10问题不用continue【例5-11】break语句和continue语句在程序中的区别/*exam5_11.cbreak的作用*/#include<stdio.h>main(){ intx; for(x=1;x<=10;++x) { if(x==5) break; printf("%d",x); }}运行结果:1,2,3,4,/*exam5q11.ccontinue的作用*/#include<stdio.h>main(){intx; for(x=1;x<=10;++x) { if(x==5) continue; printf("%d,",x); }}运行结果:1,2,3,4,6,7,8,9,10,第37页ppt课件【例5-11】break语句和continue语句在程序§5.5循环结构的嵌套
循环结构的嵌套,指的是某一种循环结构的语句中,包含有另一个循环结构。
使用嵌套的结构时,要注意嵌套的层次,不能交叉。例5.12
求1!+2!+….+100!第38页ppt课件§5.5循环结构的嵌套循环结构的嵌套,指的是某一种循嵌套循环for(i=1;i<=100;i++){item=i!sum=sum+item;}for(i=1;i<=100;i++){
item=1; for(j=1;j<=i;j++) item=item*j;sum=sum+item;}第39页ppt课件嵌套循环for(i=1;i<=100;i++)例4-6源程序#include<stdio.h>intmain(void){ inti,j; doubleitem,sum;/*item存放阶乘*/ sum=0;
for(i=1;i<=100;i++){
item=1;/*每次求阶乘都从1开始*/ for(j=1;j<=i;j++) /*内层循环算出item=i!*/ item=item*j; sum=sum+item; } printf("1!+2!+3!+…+100!=%e\n",sum);}第40页ppt课件例4-6源程序#include<stdio.h>第40页内层循环的初始化for(i=1;i<=100;i++){
item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}求1!+2!+….+100!item=1;for(i=1;i<=100;i++){for(j=1;j<=i;j++)item=item*j;sum=sum+item;}求1!+1!*2!+……+1!*2!*……*100!?第41页ppt课件内层循环的初始化for(i=1;i<=100;i分析嵌套循环的执行过程for(i=1;i<=100;i++){item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}
外层循环变量i的每个值内层循环变量j变化一个轮次;内外层循环变量不能相同分别用i
和j第42页ppt课件分析嵌套循环的执行过程for(i=1;i<=100for(i=1;i<=100;i++)for(j=1;j<=i;j++) printf("%d%d\n",i,j);第43页ppt课件for(i=1;i<=100;i++)第43页§5.6goto语句
goto语句是一种无条件转向语句,它可以用在程序的任何地方,其一般形式为:goto语句标号;“语句标号”为任何合法的标识符,放在某个语句前面并加上冒号“:”作为语句的标号,标号只对goto语句有意义,带有标号的语句被称作标号语句。如:error:、end:、exp:等均为合法的语句的标号。goto语句的作用:转到标号语句所在的地方继续执行。第44页ppt课件§5.6goto语句goto语句是一种无条件转向语句【例5-13】用if语句和goto语句组合构成的循环重写计算器的程序。/*exam5_13.cif+goto构成循环*/#include<stdio.h>main(){ inti,sum=0; i=1;
loop:if(i<=100) { sum=sum+i; i++;
gotoloop; } printf("sum=%d",sum);}程序运行结果:sum=5050goto语句是一种非结构化的语句,在程序设计中应尽量少用或不用goto语句。
第45页ppt课件【例5-13】用if语句和goto语句组合构成的循环重/*e§5.7程序范例
【例5-16】打印出ASCⅡ码序列中从33~127(十进制)的字符对照表。/*exam5_16.c打印部分ASCII码字符*/#include<stdio.h>main(){ inti; for(i=33;i<128;i++) { printf("%d---%c\t",i,i); }}第46页ppt课件§5.7程序范例【例5-16】打印出ASCⅡ码序列中【例5-17】设公鸡每只5元,母鸡每只3元,小鸡每元3只,现用100元钱买100只鸡,编写一个程序,算出可以各买多少只鸡?#include<stdio.h>main(){inti,j,k;for(i=0;i*5<=100;i++)for(j=0;j*3<=100;j++)for(k=0;k/3<=100;k+=3) if((i*5+j*3+k/3)==100&&(i+j+k)==100)printf("Cock-%d\tHen-%d\tChicken-%d\n",i,j,k);}第47页ppt课件【例5-17】设公鸡每只5元,母鸡每只3元,小鸡每元3只,现程序运行结果:Cock--0Hen--25Chicken--75Cock--4Hen--18Chicken--78Cock--8Hen--11Chicken--81Cock--12Hen--4Chicken--84第48页ppt课件程序运行结果:第48页ppt课件小结:三种循环结构:for、while和do_while循环。当循环次数是肯定的情况下,用for循环比较方便。while循环和for循环都要先判断条件再执行循环语句体,因此,有可能一次也不执行循环语句体。do_while循环不论怎样都会先执行一次循环语句体。注意避免以下几个方面的问题:1.循环语句体为复合语句,但没有使用花括号。2.使程序发生无限循环。3.混淆break语句与continue语句的功能。第49页ppt课件小结:三种循环结构:for、while和do_while循循环程序设计循环程序的实现要点:归纳出哪些操作需要反复执行?
循环体这些操作在什么情况下重复执行?
循环条件选用合适的循环语句forwhiledo-while循环具体实现时考虑(循环条件):事先给定循环次数,首选for通过其他条件控制循环,考虑while或do-while第50页ppt课件循环程序设计循环程序的实现要点:第50页ppt课件#include<stdio.h>intmain(void){inti,mark,max,n;
printf("Entern:");scanf("%d",&n);printf("Enter%dmarks:",n);scanf("%d",&mark); /*读入第一个成绩*/max=mark;/*假设第一个成绩是最高分*/
for(i=1;i<n;i++){scanf("%d",&mark);if(max<mark)max=mark;}printf("Max=%d\n",max);return0;}例5-18输入一批学生的成绩,求最高分(for)markmaxmaxmarkEntern:5Enter5maks:6788735482Max=88Entern:0第51页ppt课件#include<stdio.h>例5-18输入一批学生#include<stdio.h>intmain(void){intmark,max;printf(“Entermarks:");scanf("%d",&mark);/*读入第一个成绩*/max=mark;/*假设第一个成绩最高分*/
while(mark>=0){if(max<mark)max=mark;scanf("%d",&mark);};printf("Max=%d\n",max);return0;}例5-19输入一批学生的成绩,求最高分(while)Entermarks:6788735482-1Max=88Entermarks:-1第52页ppt课件#include<stdio.h>例5-19输入一批学生#include<stdio.h>intmain(void){intmark,max;
max=-1;/*给max赋一个小初值*/printf(“Entermarks:");
do{scanf("%d",&mark);if(max<mark)max=mark;}while(mark>=0);printf("Max=%d\n",max);}例5-20输入一批学生的成绩,求最高分(do-while)Entermarks:6788735482-1Max=88Entermarks:-1第53页ppt课件#include<stdio.h>例5-20输入一批学生的循环语句概述问题:求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的累计和。
第54页ppt课件循环语句概述问题:求1~100的累计和。第1页ppt课件根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了循环语句来实现,以简化、并规范循环结构程序设计。在C语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。第55页ppt课件根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用§5.1for语句
循环的意思就是让程序重复地执行某些语句。C语言提供的循环结构有三种:for语句、while语句和do_while语句。for语句既可以用于循环次数已知的情况,也可用于循环次数预先不知道的情况。for语句的一般形式为:
for(<初始表达式>);<条件表达式>;<循环表达式>)
<循环体语句>第56页ppt课件§5.1for语句循环的意思就是让程序重复地执行某些功能:先计算<初始表达式>的值,然后判断<条件表达式>的值,若该值为“假”,则退出循环,执行循环体下面的语句;若该值为“真”,则执行<循环体语句>,然后计算<循环表达式>的值,再判断<条件表达式>的值,重复以上的操作。for语句的流程图如图:一般情况下,<循环体语句>是由一对花括括起来的复合语句。第57页ppt课件功能:先计算<初始表达式>的值,然后判断<条件表达式>的值,for循环语句注意:
①<初始表达式>可以省略,但须保留分号(;),同时在for之前必须给循环变量赋值,如:i=1;for(;i<=100;i++)sum=sum+i;②<条件表达式>一般不可省略,否则为无限循环。如:for(i=1;;i++)
sum=sum+i;相当于条件总为真,程序会一直不停的执行直到“数据溢出”。第58页ppt课件for循环语句注意:①<初始表达式>可以省略,但须保留分③<循环表达式>亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为0,从而能正常结束循环。如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}④三个表达式均省略,即for(;;),为无限循环,程序中要避免这种情况的发生。⑤条件表达式可以是关系表达式、数值表达式。只要表达式的值0。就执行循环语句。如:for(i=0;(c=getchar())!=‘\n’;i+=c);第59页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(a<b),求它们之间的几何级数的和,数学表达式为。第60页ppt课件⑥初始表达式、循环表达式可以是逗号表达式如:for(s这个问题与例5-1类似,只是所求级数和的初值和终值不一样,是由键盘任意输入的,为避免计算机错误,要求初值a要小于终值b。算法流程图如右图:第61页ppt课件这个问题与例5-1类似,只是所求级数和的初值和终值不一样,是/*exam5_2.c求几何级数的和*/#include<stdio.h>main(){ inti,j,a,b,sum=0; printf("Pleaseinputtwonumber:\n"); scanf("a=%d,b=%d",&a,&b); i=a;j=b; if(a>b) {i=b;j=a;} for(;i<=j;i++) sum=sum+i; printf("sum=%d\n",sum);}第62页ppt课件/*exam5_2.c求几何级数的和*/第9页ppt课件【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图案:
这是一个很有规律的图案,可采用二重循环嵌套的方式:第1层控制行数,第2层控制列数。算法流程图如下图:第63页ppt课件【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图/*exam5_3.c打印图案*/#include<stdio.h>main(){ inti,j; for(i=1;i<=8;i++) { for(j=1;j<=7;j++) printf("*"); printf("\n"); }}第64页ppt课件/*exam5_3.c打印图案*/第11页ppt课件§5.2while语句
While语句也是一种用于产生循环动作的语句,一般形式为:while(<表达式>)
<循环体语句>功能:先计算<表达式>的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行<循环体语句>,然后回过头来再检查<表达式>的值,重复以上的操作。while语句的流程图第65页ppt课件§5.2while语句While语句也是一种用于产生<循环语句体>:是用一对花括号括起来的复合语句。注意:在<循环语句体>中要有使<表达式>的值为假(或<表达式>的值为零)的语句,否则会使程序出现无限循环而发生错误。注意:由于while循环是先判断<表达式>的值,后决定是否执行<循环语句>,因此,有可能一次也不执行<循环语句>。第66页ppt课件<循环语句体>:是用一对花括号括起来的复合语句。注意:在<【例5-4】将例5-1用while语句重写,求简单几何级数的和。/*exam5_4.c用while求简单几何级数的和*/#include<stdio.h>main(){ inti=1,sum=0; while(i<=100) { sum=sum+i;
i++; } printf("sum=%d\n",sum);}程序运行结果:sum=5050第67页ppt课件【例5-4】将例5-1用while语句重写,求简单几何级【例5-5】输入一个正整数n,求n!。计算表达式:n!=n*(n-1)*(n-2)*…*2*1。用i代表循环变量,s代表n!的结果值。编程时既可以采用for循环,也可以采用while循环求任意正整数n的阶乘的算法流程图如图:第68页ppt课件【例5-5】输入一个正整数n,求n!。计算表达式:n!=n*/*exam5_5.cwhile应用:求n!*/#include<stdio.h>main(){ 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); } else printf("Invalidinput!");}试改为for循环?第69页ppt课件/*exam5_5.cwhile应用:求n!*/试改为fowhile和for的比较for(i=1;i<=10;i++)
sum=sum+i;i=1;
循环变量赋初值while(i<=10){循环条件
sum=sum+i;
i++;循环变量的改变}循环体第70页ppt课件while和for的比较for(i=1;i<例5-6从键盘输入一批学生的成绩,计算平均分。分析:求累加和确定循环条件不知道输入数据的个数,无法事先确定循环次数用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。第71页ppt课件例5-6从键盘输入一批学生的成绩,计算平均分。第18页pp#include<stdio.h>Intmain(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第72页ppt课件#include<stdio.h>Entergrades§5.3do~while语句
do_while语句是另一种用于产生循环动作的语句。一般形式为:do{<循环体语句>}while(<表达式>);功能:先执行一次<循环体语句>,然后计算<表达式>的值,若该值为“真”,则重复以上的操作,直到该值为“假”,则退出循环语句,执行下一条语句。do_while语句的流程图:第73页ppt课件§5.3do~while语句do_while语句是另<循环语句体>应该是用一对花括号括起来的复合语句。注意:要有可以使<表达式>的值为“假”(即<表达式>的值等于零)的语句,否则会使程序出现无限循环而发生错误。do_while循环与while循环的区别,不论情况怎样,do_while循环中的<循环语句体>至少会执行一次。第74页ppt课件<循环语句体>应该是用一对花括号括起来的复合语句。注意:要【例5-7】将例5-6用do_while语句重写。第75页ppt课件【例5-7】将例5-6用do_while语句重写。第22#include<stdio.h>Intmain(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第76页ppt课件#include<stdio.h>Entergrades【例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算法流程图如后图:第77页ppt课件【例5-8】求sin(x)=x-x3/3!+x5/5!-x7第78页ppt课件第25页ppt课件/*exam5_8.c求sin(x)的值*/#include<stdio.h>#include<math.h>main(){ 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
第79页ppt课件/*exam5_8.c求sin(x)的值*/程序运行结果:
while
是先判别条件,再决定是否循环;
do-while
是先至少循环一次,然后再根据循环的结果决定是否继续循环。while和do-while的比较真假表达式循环体语句do-while的下一条语句真假while的下一条语句表达式循环体语句第80页ppt课件while是先判别条件,再决定是否循环;while和
循环语句的选择if(循环次数已知) 使用for语句else /*循环次数未知*/ if(循环条件在进入循环时明确)
使用while语句
else /*循环条件需要在循环体中明确*/
使用do-while语句第81页ppt课件循环语句的选择if(循环次数已知)第28页ppt课件§5.4
用于循环中的break和continue语句
一、break语句break语句的作用是从一种控制结构中跳出来。break语句可用于循环结构,其作用是从本层循环结构中跳出,可以提前结束执行<循环语句体>,执行循环结构外的下一条语句。break语句的一般形式为:break;
break语句在循环语句体中的位置应根据程序的需要而定,一般是用在循环体内某一个if条件分支的语句中,用来表示在循环过程中当某一个条件成立时提前结束循环。第82页ppt课件§5.4用于循环中的break和continue语句
程序解析-判断素数算法:除了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,]for(i=2;i<=m/2;i++)if(m%i==0)break;if(i>m/2)printf("yes\n")elseprintf("no\n”);第83页ppt课件程序解析-判断素数算法:除了1和m,不能被其它数整除。fointmain(void){inti,m; printf(“Enteranumber:"); scanf("%d",&m); for(i=2;i<=m/2;i++) if(m%i==0)break; if(i>m/2)printf("%disaprimenumber!\n",m); elseprintf("No!\n"); }源程序-判断素数Enteranumber:9NoEnteranumber:1111isaprimenumber!循环条件?循环的结束条件?第84页ppt课件intmain(void)源程序-判断素数Enterabreak语句while(exp){
语句1if(expb)break;
语句2}真假
exp
语句1假
expb
语句2循环体真for(i=2;i<=m/2;i++) if(m%i==0)break;if(i>m/2)printf("Yes");elseprintf("No!\n");当循环有多个出口时:表示循环条件区分结束条件for(i=2;i<=m/2;i++)if(m%i==0){printf("No!\n");break;}printf("Yes");第85页ppt课件break语句while(exp){真假exp二、Continue语句Continue语句只适用于循环结构,其一般形式为:作用:提前结束本次循环,提前进行下一次循环。【例5-10】编写程序,打印100-200中不能被3整除的数。/*exam5_10.c求不能被3整除的数*/#include<stdio.h>main(){ intn; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d\t",n); }}第86页ppt课件二、Continue语句Continue语句只适用于循环结算法流程图如图:要准确地使用break语句和continue语句,除非有必要,否则若可以不用则尽量不采用break语句和continue语句。第87页ppt课件算法流程图如图:要准确地使用break语句和continu对于例5-10的问题,打印100-200中不能被3整除的数。不采用continue语句的算法流程图如图所示:第88页ppt课件对于例5-10的问题,打印100-200中不能被3整除的数。/*exam5q10.c例5-10问题不用continue*/#include<stdio.h>
main(){ intn; for(n=100;n<=200;n++) if(n%3
!=0)/*n不能被3整除*/
printf("%d",n); }第89页ppt课件/*exam5q10.c例5-10问题不用continue【例5-11】break语句和continue语句在程序中的区别/*exam5_11.cbreak的作用*/#include<stdio.h>main(){ intx; for(x=1;x<=10;++x) { if(x==5) break; printf("%d",x); }}运行结果:1,2,3,4,/*exam5q11.ccontinue的作用*/#include<stdio.h>main(){intx; for(x=1;x<=10;++x) { if(x==5) continue; printf("%d,",x); }}运行结果:1,2,3,4,6,7,8,9,10,第90页ppt课件【例5-11】break语句和continue语句在程序§5.5循环结构的嵌套
循环结构的嵌套,指的是某一种循环结构的语句中,包含有另一个循环结构。
使用嵌套的结构时,要注意嵌套的层次,不能交叉。例5.12
求1!+2!+….+100!第91页ppt课件§5.5循环结构的嵌套循环结构的嵌套,指的是某一种循嵌套循环for(i=1;i<=100;i++){item=i!sum=sum+item;}for(i=1;i<=100;i++){
item=1; for(j=1;j<=i;j++) item=item*j;sum=sum+item;}第92页ppt课件嵌套循环for(i=1;i<=100;i++)例4-6源程序#include<stdio.h>intmain(void){ inti,j; doubleitem,sum;/*item存放阶乘*/ sum=0;
for(i=1;i<=100;i++){
item=1;/*每次求阶乘都从1开始*/ for(j=1;j<=i;j++) /*内层循环算出item=i!*/ item=item*j; sum=sum+item; } printf("1!+2!+3!+…+100!=%e\n",sum);}第93页ppt课件例4-6源程序#include<stdio.h>第40页内层循环的初始化for(i=1;i<=100;i++){
item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}求1!+2!+….+100!item=1;for(i=1;i<=100;i++){for(j=1;j<=i;j++)item=item*j;sum=sum+item;}求1!+1!*2!+……+1!*2!*……*100!?第94页ppt课件内层循环的初始化for(i=1;i<=100;i分析嵌套循环的执行过程for(i=1;i<=100;i++){item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}
外层循环变量i的每个值内层循环变量j变化一个轮次;内外层循环变量不能相同分别用i
和j第95页ppt课件分析嵌套循环的执行过程for(i=1;i<=100for(i=1;i<=100;i++)for(j=1;j<=i;j++) printf("%d%d\n",i,j);第96页ppt课件for(i=1;i<=100;i++)第43页§5.6goto语句
goto语句是一种无条件转向语句,它可以用在程序的任何地方,其一般形式为:goto语句标号;“语句标号”为任何合法的标识符,放在某个语句前面并加上冒号“:”作为语句的标号,标号只对goto语句有意义,带有标号的语句被称作标号语句。如:error:、end:、exp:等均为合法的语句的标号。goto语句的作用:转到标号语句所在的地方继续执行。第97页ppt课件§5.6goto语句goto语句是一种无条件转向语句【例5-13】用if语句和goto语句组合构成的循环重写计算器的程序。/*exam5_13.cif+goto构成循环*/#include<stdio.h>main(){ inti,sum=0; i=1;
loop:if(i<=100) { sum=sum+i; i++;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电工证考试试题及答案
- 手术患者围术期护理要点
- 2025年司机安全教育
- 2025年中国欧美式铝合金拉铆枪市场调查研究报告
- 2025年中国弯通护罩市场调查研究报告
- 2025年中国密胺口杯市场调查研究报告
- DB3308T 154-2024二十四节气优品评价规范
- 2025年中国及时贴市场调查研究报告
- 图书销售居间合同协议
- 地下室土方开挖合同协议
- 新管理理论与管理方法
- (高清版)JTGT 5214-2022 在用公路桥梁现场检测技术规程
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 妇科腹腔镜手术术前宣教
- 农贸市场消防应急预案演练总结
- 2023年湖北宜昌高新区社区专职工作人员(网格员)招聘考试真题及答案
- 《患者疼痛管理》课件
- 基于AI人工智能的智慧园区融合感知平台建设方案
- JB T 7689-2012悬挂式电磁除铁器
- 课件-错账更正
- 现代汉语语料库词频表CorpusWordlist
评论
0/150
提交评论