资源描述
,*,第五章,循环结构程序设计,一、,break,语句,作用范围:,switch,语句,或,循环语句,功能:,跳出,switch,语句,或,跳出本层循环,,,转去执行后面的程序。,break,语句的一般形式为:,break;,注意:,break,语句用于循环体中,一般与,if,语句联合使用,用于循环中的,break,语句和,continue,语句,for(),for(),break;,#include,void,main(),int,k;,for(k=1;k=1000;k+),if(k%3=0&k%5=0),printf,(“%d ”,k);,例,打印为,1,到,1000,中能同时被,3,和,5,整除的,前,10,个,数,。,#include,void,main(),int,k,n=0,;,for(k=1;k=1000;k+),if(k%3=0&k%5=0),printf,(“%d ”,k);,n+,;,if(n=10),break;,二、,continue,语句,作用范围:,只能用在循环体中,功能:,结束本次循环,,转入下一次循环,条件的判断与执行。,其一般格式是:,continue;,注意:,本语句只结束,本层本次,的循环,并不跳出循环。,void,main(),int,r;,float area;,for(r=1;r=15;r+),area=3.141593*r*r;,printf,(square=%fn,area);,例计算半径为,1,到,15,的圆的面积,仅打印出超过,50,的圆面积。,if(area50.0)continue;,main(),int,n;,for(n=7;n=100;n+),if(n%7!=0),continue;,printf,(%d ,n);,main(),int,n;,for(n=7;n=100;n+),if(,n%7=,0),printf,(%d ,n);,使用,continue,不用,continue,思考以下程序功能?,练习:,把,100200,之间能被,3,整除的数输出。,for(n=100;n=200;n+),if(n%3=0),printf,(“,%d”,n,);,把,100200,之间能不被,3,整除的数输出。,for(n=100;n=200;n+),if(n%3,!,=0),printf,(“,%d”,n,);,for(n=100;n=200;n+),if(n%3=0),continue;,printf,(“,%d”,n,);,使用,continue,还是,break?,break,:,语句只能用在,switch,语句或循环语句中,其作用是跳出,switch,语句或跳出,本层,循环,转去执行后面的程序。,continue,:,结束本次循环,即不再执行循环体中,continue,语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束,本层本次,的循环,并不跳出循环。,break,与,continue,的区别,三、,goto,语句(无条件转移语句),一般格式:,goto,语句标号;,语句标号符合标识符书写规则,起标识语句的作用。,注意:,语言不限制程序中使用标号的次数,但不得重名。,label1:,i+;,goto,label1;,如:,main(),int,sum=0,i=1;,loop:,if,(i=100),sum=sum+i,;,i+;,goto,loop;,printf,(,sum=%d,sum);,例:编程序求:,s=1+2+3+100,#include,stdio.h,void main(),int,n=0;,printf,(input a stringn);,loop,:,if(,getchar,()!=n),n+;,goto,loop;,printf,(%d,n);,注意:,在结构化程序设计中一般不主张使用,goto,语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,例,:,统计从键盘输入一行字符的个数,例:打印出,ascii,序列中从,33127,(十进制)的字符对照表。,程序范例,#include,void main(),int i;,for(i=33;i128;i+),printf(%d=%ct,i,i);,printf(n);,输入,m,当i=k+1,Y,N,打印,Yes,break,打印,No,例,:,判断一个给定的整数是否为素数。,素数问题:,#include,math.h,void main(),int,m,i,k;,scanf,(%d,k=sqrt,(m);,for(i=2;i=k+1),printf,(Yesn);,else,printf,(Non);,#include,math.h,void main(),int,m,i,k,;,scanf,(,%d,&m,);,k=sqrt,(m);,/*SPACE*/,for(i=2;【?】;i+),/*SPACE*/,if(,【?】,)break;,/*SPACE*/,if(,【?】,),printf,(,Yesn,);,else,printf,(,Non,);,i=k,i=i,k+1i,m%i=0,i=k+1,ik,i,=k+1,ki,k+1=i,例,:,编一程序验证哥德巴赫猜想,:,一个大于等于,6,的偶数可以表示为两个素数之和。,#include math.h,#includestdio.h,void main(),int n,n1,n2,j,k;,printf(Enter a number n=?n);,scanf(%d,for(n1=3;n1=n/2;n1+),k=sqrt(n1);,for(j=2;j=k;j+),if(n1%j=0)break;,if(j=k)continue;,n2=n-n1;,k=sqrt(n2);,for(j=2;jk)printf(%d=%d+%dn,n,n1,n2);,P92【,例,5-14】,计算,100,以内的所有素数之和。,程序如下:,main(),int i,j,s=0;,for(i=2;i=100;i+),for(j=2;ji-1),s=s+i;,printf(100,以内所有素数和为:,%dn,s);,Fibonacci,数列问题,P88【,例,5-10】,求,Fibonacci,数列的前,40,个数。该数列的生成方法为:,F,1,=1,,,F,2,=1,,,F,n,=F,n-1,+F,n-2,(,n=3,),,即从第,3,个数开始,每个数等于前,2,个数之和。,main(),long f1,f2,f3;,int i;,f1=1;f2=1;,printf(%10ld%10ld,f1,f2);,for(i=3;i=40;i+),f3=f1+f2;,printf(%10ld,f3);,if(i%5=0)printf(n);,f1=f2;,f2=f3;,main(),int,i;,long f1,f2;,f1=1;,f2=1;,printf(%10ld%10ld,f1,f2);,for(i,=1;i=20;i+),f1=f1+f2;,f2=f1+f2;,printf(%10ld%10ld,f1,f2);,方法,2,:,例:设公鸡每只,5,元,母鸡每只,3,元,小鸡每元,3,只,现用,100,元钱买,100,只鸡,编写一程序,算出各买多少只鸡?,main(),int,i,j,k,;,for(i=0;5*i=100;i+),for(j=0;3*j=100;j+),for(k=0;k/3=100;k+=3),if(i*5+j*3+k/3)=100&(,i+j+k,)=100),printf,(“cock-%dthen-%dtchicken-%,dn”,i,j,k,);,穷举法,基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求。,P94【,例,5.17】,穷举法计算搬砖问题:,36,块砖,,36,人搬;男搬,4,,女搬,3,,两个小孩抬一砖。要求一次全搬完,问男、女、小孩各多少人?,根据题意知,男人为:,0,8,;,女人为:,0,11,;,小孩为:,36-,男,-,女,但要是,2,的倍数。,/*EX5-18.C */,main(),int men,women,children;,for(men=0;men=8;men+),for(women=0;women=11;women+),children=36-men-women;,if,(,(men*4+women*3+children/2=36)&(children%2=0),printf(,男人数,:%d,men);,printf(,女人数,:%d,women);,printf(,小孩数,:%dn,children);,小 结:,程序可分为三种最基本的结构:顺序结构,分支结构以及循环结构。,(,1,),C,语言的输入与输出,语言中输入输出都是由调用标准库函数中的输入输出函数来实现。,(,2,),C,语言提供了多种形式的条件语句以构成分支结构。,if,语句主要用于单向选择。,if-else,语句主要用于双向选择。,if-else-if,语和,switch,语句用于多向选择。,(,3,),C,语言提供了三种循环语句。,for,语句用于给定循环变量初值,步长增量以及循环次数的循环结构。循环次数及控制条件要在循环过程中确定的可用,while,或,do-while,语句。,三种循环语句可以相互嵌套组成多重循环。循环之间可以并列但不能交叉。可用转移语句把流程转出循环体外,但不能从外面转向循环体内。,上机练习:,P100,页三编程题:,3,、,5,、,6,、,8,、,9,
展开阅读全文