浙江大学刘加海C语言课件2_第1页
浙江大学刘加海C语言课件2_第2页
浙江大学刘加海C语言课件2_第3页
浙江大学刘加海C语言课件2_第4页
浙江大学刘加海C语言课件2_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-第2章程序的控制构造本章要点1if语句和用if语句构成的选择构造。2if语句的嵌套。3switch语句。4while循环。5dowhile循环。6for循环。7循环的嵌套。本章难点1if语句中的条件表达式的理解。2if与else的配对问题。3switch语句的程序流向。4while、dowhile、for循环的特色。5for循环中的履行过程及for循环的变化形式。6循环嵌套中的履行过程。在程序的编写过程中常常会遇到程序的流向问题,C语言中控制程序流向的语句构造叫控制构造,而控制构造中的条件表达式含相关系运算和逻辑运算,C语言供给了能够进行逻辑判断的选择语句,依据逻辑判断的结果断定程序的不同流

2、程,任何复杂的程序都是由次序构造、分支构造及循环构造构成。程序的这三种构造是程序设计中最基本的问题,也是程-序设计的基础。程序设计中要决定程序的流向、能否重复地履行某项任务等都要波及到程序的流程控制。本章将要点介绍程序控制构造语句及其使用方法。-2.1程序的分支构造if语句和用if语句构成的选择构造if语句的作用是使程序在运转过程中,依据判断指定的条件能否知足来决定能否履行某操作。if语句的运用能使程序针对不同状况作不同的办理,增添了程序的灵巧性。if语句是一种选择构造,它的基本形式有以下三种。1if选择构造语句格式:if(表达式)语句块这里的语句块能够是简单语句、空语句或复合语句,复合语句用

3、用开始,符号结束,在逻辑上复合语句作为一条语句来使用。语句的功能:假如表达式的值为真(非0),则履行语句块,不然不履行该语句块。程序流程图如2.1所示。假(0)表达式真(非0)语句块图2.1程序流程图比如学生的成绩grade大于等于60,在屏幕上显示“恭-喜你,经过了!”,则可用以下语句描绘。if(grade=60)printf(恭贺你,经过了!n);假如学生的成绩grade大于等于60,除了在屏幕上显示“恭贺你,经过了!”,还要使已获得总学分score加2,则改正以上语句为以下:if(grade=60)/*把多个语句用括起来构成一个复合语句*/printf(恭贺你,经过了!n);score+

4、=2;假如以上语句写成:if(grade=60)printf(恭贺你,经过了!n);/*只好有一条语句属于if语句构造*/score+=2;/*这条语句不在if语句构造中*/其程序流程图变成如图2.2所示,这样使“score加2”操作在学生成绩小于60时也履行了,这与要求不符,程序结果是错的。假(0)grade=60真(非0)printf(恭贺你,经过了!n)score+=2-图2.2程序流程图所以if语句构造中,若需要用多条语句实现操作时,一定把多条语句用括起来构成一条复合语句。相同,在此后介绍的选择构造和循环构造语句中也都有近似的状况。if语句中的表达式(包含循环语句中的表达式)往常是逻辑

5、表达式或关系表达式,但也能够是其余表达式,如赋值表达式等,甚至能够不过一个简单变量。如:if(i)printf(i0);判断i的值能否不为0,来决定语句printf(i0);能否履行。if(ch=getchar()!=n)printf(%c,ch);从键盘输入一个字母赋给ch,假如ch的值不为换行符,履行语句printf(c,ch);输出该值。思虑:定义一字符变量ch并从键盘读入,如为小写字母转变成大写字母后输出,不然什么也不做,程序结束。提示:判断能否为小写字母可写为:(ch=a&ch=60)printf(恭贺你,经过了!n);elseprintf(很对不起,没经过!n);依据编程者的爱好或

6、程序构造方面的考虑,能够改正表达式,调整语句为:if(grade=60)printf(恭贺你,经过了!n);score+=2;elseprintf(很对不起,没经过!n);或:if(grade=0)y=x*x;elsey=-x;-例2.1输入三个整数,并输出最大数。算法设计:(1)输入三个整数x、y、z;(2)先比较x和y的大小,把大的数赋值给max;(3)再比较max和z的大小,把大的数再赋值给max。此时max的值就是三个整数的最大值;4)输出max。程序流程图如图2.4所示。开始输入x,y,z真(非0)假(0)xymax=xmax=y真(非0)maxz假(0)max=z输出max结束图2

7、.4程序流程图#includevoidmain()intx,y,z,max;printf(pleaseinputx,y,z:);scanf(%d%d%d,&x,&y,&z);-if(xy)max=x;elsemax=y;if(max89)、良79grade90)、中(69grade80)、及格(59grade70)、不及格(grade89)printf(恭贺你,你的成绩是优!n);elseif(grade79)printf(恭贺你,你的成绩是良!n);elseif(grade69)-printf(恭贺你,你的成绩是中!n);elseif(grade59)printf(恭贺你,你的成绩是及格!n

8、);elseprintf(很对不起,你的成绩是不及格!n);if语句嵌套if语句同意嵌套,即在一个if语句中包含有另一个if语句。上一节介绍的ifelseif构造也是if语句的嵌套构造。比如要表示分段函数1x0y0 x01x0能够表示如图2.6所示的流程图。真x=0y=-1真假x=0y=0y=1图2.6程序流程图-用if语句的嵌套表示为:if(x=0)if(x=0)y=0;elsey=1;elsey=-1;自然用条件运算符表示为:y=x0?x=0?0:1:-1;但ifelseif构造很规范,很好理解,而一般if语句的嵌套构造相对照较复杂,常常因为不正确的if与else配对理解致使程序功能的错误

9、。C语言中规定,在有多个if.else语句的构造中,else老是与近来的还没有配对的if配对。例2.2剖析以下程序段输出的结果为()intx=-10,y=;if(x=0)if(x0)y=0;elsey=-1;printf(“y=%dn”,y);剖析:因if(x=0)非真,所以if(x0)y=0;elsey=-1;不履行,打印结果为。例2.3编写一个程序,由键盘输入三个整数作为三角形的三条边,判断能否能构成一个三角形,如能并判断是等边三角形、等腰三角形,仍是其余三角形。剖析:设三个整数分别为:a、b、c,构成三角形的条件为:a+bc&a+cb&b+ca构成等边三角形的条件为:-a=b&b=c构成

10、等腰三角形的条件为:a=b|b=c|a=c关于判断能否能构成三角形,什么样的三角形的语句构造为:if(a+bc&a+cb&b+ca)printf(“能构成一个三角形n”);进一步判断构成什么三角形elseprintf(“不可以构成一个三角形n”);完好的程序设计为:#includevoidmain()inta,b,c;scanf(%d%d%d,&a,&b,&c);if(a+bc&a+cb&b+ca)printf(能构成一个三角形n);if(a=b&b=c)printf(能构成一个等边三角形n);elseif(a=b|b=c|a=c)printf(能构成一个等腰三角形n);elseprintf(

11、能构成一个一般的三角形n);else-printf(不可以构成一个三角形n);switch语句if语句只好办理从二者间选择此中之一,用if-else-if或多重嵌套if语句能够实现多分支选择,但程序冗长,可读性差。C语言供给switch语句特意办理多分支选择,使程序构造简短、清楚。语句格式:switch(表达式)case常量表达式1:语句序列break;case常量表达式2:语句序列break;case常量表达式n;语句序列nbreak;default:语句序列n+1当履行switch语句时,第一计算紧跟后来一对括号中的表达式的值,而后在switch语句体内找寻与该值符合的case标号,假如有

12、与该值相等的标号,则履行该标号后开始-的各语句,包含在后来的全部case和default中的语句,直到break语句或switch语句体结束。假如没有与该值相等有break语句真(非0)表达式=常量表达式1语句序列1break假(0)无break语句有break语句真(非0)表达式=常量表达式2语句序列2break假(0)无break语句真(非0)有break语句表达式=常量表达式n语句序列nbreak假(0)无break语句语句序列n+1的标号,而且存在default标号,则从default标号后的语句开始履行,直到switch语句体结束。假如没有与该值相等的标号,且不存在default标号

13、,则跳过switch语句体,什么也不做。图2.7语句履行的流程图注意(1)switch、case、default是要点字。(2)switch语句后边用花括号括起来的部分称为switch语句体。(3)switch的表达式能够是整型表达式、字符表达式、列举型表达式等。(4)case中常量表达式的种类一定与switch的表达式种类相同,各case语句标号的值应当互不相同。(5)default代表全部case标号以外的那些标号,default标-号能够出此刻语句体中任何标号地点上,在switch语句体中也能够没有default标号。每个选择支路都以case开头,case的标号后要有:,每个支路后能够有

14、多个语句。(6)必需时,case语句标号后的语句能够省略不写。(7)在要点字case和常量表达式之间必定要有空格。比如case10:不可以写成case10:。例2.4求履行以下程序段后k的值。charc=2;intk;switch(c+1-0)case2:k+=1;case2+1:k+=2;case4:k+=3;剖析:switch中表达式的值为,从case2+1进口,履行语句k+=2;得k=3,因为此语句后无break;语句,持续履行case4后语句:k+=3;最后k。例2.5求履行以下程序段后k的值。charc;intk2;scanf(“%d”,&c);switch(c-A)case0:k+

15、;case1:k+=2;break;default:k*=k;case4:k*=3;-问:当程序履行时输入分别为:A、B、C、E时k的值。剖析:当输入A时,从case0进口,k为3,因为k+;后无break;又从case1:进口k为5,然退后出switch语句;同应当输入B时,k为4;当输入C时,转入default:k为4;k*=k;后无break;语句,持续履行case4后语句:k*=3;最后k12。当输入E时,从case4进口,k为6。例2.6输入一个字符,假如是Y、N或y、n,则分别履行一输出语句;假如是其余字母则履行另一输出语句。程序以下所示:#includevoidmain()cha

16、rch;printf(pleaseinputY/N(y/n):);scanf(%c,&ch);switch(ch)casey:caseY:printf(nthisisYory.n);break;casen:caseN:printf(nthisisNorn.n);break;default:printf(nthisisotherchar.n);例2.7编写一个菜单显示程序,输入1表示:增添记录、-2表示:显示记录、3表示:读取记录、4表示:保留记录、0表示:结束运转,输入04能够进行相应的选择。#includevoidmain()inta;printf(1.增添记录n2.显示记录n3.读取记录n

17、4.保留记录n0.结束运转n);printf(n请选择04:);scanf(%d,&a);switch(a)case1:printf(你的选择是:1n);break;case2:printf(你的选择是:2n);break;case3:printf(你的选择是:3n);break;case4:printf(你的选择是:4n);break;default:printf(输入错误!n);这个例子不过一个简单的框架,它表现了编写控制菜单的基本思想。思虑:键盘输入学生的百分制成绩,输出相应的等级,等级的区分为:90100:优、8089:良、7079:中、6069:及格、059:不及格,用switch语

18、句实现。-提示:假设分数用x表示,可用:switch(x/10)case10:case9:printf(“优n”);break;case8:printf(“良n”);break;此外请读者思虑如何防止非法数据的输入?2.2程序的循环构造在实质应用中,需要程序依据给定条件时,重复履行某程序段,直到条件不知足为止;或重复履行某程序段的指定次数,这就是程序的循环构造。C语言供给了以下三种基本的循环语句:while语句、dowhile语句和for语句。关于C语言的三种循环语句有以下几点需加以注意:while循环语句和for循环语句在初始时,第一测试循环条件,假如知足则履行循环体,如不知足则退出循环语句

19、;dowhile循环语句则是先履行循环体,后测试循环条件,所以循环体不论如何都必定会被履行起码一次。此三种循环语句都是依据循环条件来决定能否持续执行,所以在循环体内部或循环条件中一定存在改变循环条件的动作,不然,可能会出现死循环等异样状况;C语言的for语句其实不同于一般的狭义计数循环语句,其循环条件包含的内容能够不是单调的计数,而能够有其余的形式和动作,如getch()一类的取值动作。-while循环语句格式:while(条件表达式)循环体其流程控制如图2.8所示。循环履行的步骤以下:(1)计算条件表达式的值;(2)当值为真(非0)时,履行循环体,而后转到(2),值为假(0)时退出循环。假(

20、0)条件表达式真(非0)循环体图2.8流程图例2.8从键盘输入若干个数乞降,当和大于200时停止执行。剖析:此程序的流程以下图,循环的条件为sum=200,循环块中的语句有:scanf(“%d”,&x);sum+=sum;-假(0)sum=200真(非0)读入xsum+=x;整个程序的代码为:#includevoidmain()intx,sum=0;while(sum=200)scanf(“%d”,&x);sum+=x;printf(“sum=%dn”,sum);思虑:在main函数中输入一个大于0的自然数n,调用函数add,计算1+2+3+n,在main函数中输出结果,请达成填空。#incl

21、udeintadd(intn)/*求1+2+3+n和*/-voidmain()intx,sum;scanf(“%d”,&x);sum=add(x);printf(“sum=%dn”,sum);例2.9有20个同学次序编号为019,同时把他们的英语成绩寄存在数组A中,编写一个查分的函数。算法设计:1)输入学生号;2)判断学生号能否在0和19之间,若是,持续下一步,不是则查问结束;3)显示该学生成绩;4)输入学生号,转第(2)步持续履行。输入学生号num假(0)num=0且num20真(非0)显示该学生成绩输入学生号num-程序的流程图如图2.9所示。图2.9程序的流程图#includevoidq

22、uery(inta,intn)/*数组名a作为形参,数组a代表数组st*/intnum;printf(PleaseinputstudentNO.:);scanf(%d,&num);while(num=0&numn)printf(ttheenglishscoreis%d:n,anum);printf(PleaseinputstudentNO.:);scanf(%d,&num);printf(thequeryover!n);voidmain()intst20=78,92,56,82,74,76,51,73,62,88,54,69,77,64,79,78,65,74,71,83;query(st,2

23、0);/*数组名st作为实参,传达给数组a*/程序运转状况:PleaseinputstudentNO.:5-theenglishscoreis76:PleaseinputstudentNO.:0theenglishscoreis78:PleaseinputstudentNO.:19theenglishscoreis83:PleaseinputstudentNO.:25thequeryover!while循环语句先鉴别循环条件,只有条件知足才履行循环体,即存在循环体一次也不履行的可能。如在上例运转时,第一次输入20,则循环体一次都不履行。PleaseinputstudentNO.:20thequ

24、eryover!例2.10从键盘输入10个数,正数赋给数组b,负数显示在屏幕上,最后再输出数组b的元素值。#includevoidmain()intx,k,b10,i=0,j=0;while(i0)bj+=x;elseprintf(%dn,x);i+;k=0;while(kj)-printf(b%d=%dn,k,bk+);例2.11编一程序使某数相反次序输出。如输入3456,输出6543。程序剖析:某数对10取余数,先输出最低位,而后使这个整数除10,再取余数输出,再除10,直到这个数为0。#includevoidmain()intnum;intdigit;printf(inputanumbe

25、rb);scanf(%d,&num);while(num!=0)digit=num%10;printf(%d,digit);num=num/10;printf(n);思虑:有一个数组a,拥有以下规律:a0=1;a1=2;a2=a0+a1;ai=ai-2+ai-1;求a50。提示:考虑程序段:a0=1;a1=2;i=2;-while(i=50)ai=ai-2+ai-1;i+;dowhile循环语句格式:do循环体while(表达式);语句的功能:先履行循环体一次,再鉴别表达式的值,若为真(非0)则持续循环,不然停止循环。此中语句是循环体,表达式是循环条件。语句履行流程图如图2.11所示。循环体假

26、(0)表达式真(非0)图2.10语句履行流程图dowhile语句是先履行后判断,所以它起码要履行一次循环体。不同于while语句先判断后履行,假如条件不知足,循环体能够一次都不履行。例2.12使得从终端输入的正数次序颠倒。#include-voidmain()intnum,digit;printf(Enteranumber;n);scanf(%d,&num);dodigit=num%10;printf(%d,digit);num=num/10;while(num!=0);printf(n);例2.13阅读以下程序,写出程序的履行结果。#includevoidmain()charc;intv0=

27、0,v1=0,v2=0;doswitch(c=getchar()casea:caseA:v0+=1;casee:caseE:casei:caseI:caseo:caseO:caseu:caseU:v1+=1;default:v2+=1;while(c!=n);printf(nv0=%d,v1=%d,v2=%dn,v0,v1,v2);-如输入:ADescriptor答:v0=1,v1=4,v2=12剖析:因为没有break语句,default语句中都加一次,最后default语句中也增添1次,共达12次。例2.14数组a中寄存学生成绩,数组的下标表示学生序号,键盘输入分数,要查找指定成绩的学生序

28、号,用dowhile语句编程,我们按程序流程图2.11所示,来改正函数。voidquery(inta,intn)intscore,i=0;printf(Pleaseinputscore:);scanf(%d,&score);doif(ai=score)printf(studentNO.:%dn,i);i+;while(in);printf(thequeryover!n);输入成绩scorei=0真(非0)ai=score输出学生号i假(0)i+in真(非0)假(0)-图2.11程序流程图把这个函数替代例2.6程序中的query函数,再运转程序,运转状况为:Pleaseinputscore:78

29、studentNO.:0studentNO.:5studentNO.:15thequeryover!for循环for循环语句的功能更强,使用更宽泛。语句格式:for(初始化表达式;条件表达式;增量表达式)循环体此中:初始化表达式:往常用来给循环变量赋初值,一般是赋值表达式,用来给循环控制变量赋初值。也同意在for语句外给循环变量赋初值,此时能够省略该表达式。条件表达式:往常是循环条件,一般为关系表达式或逻辑表达式。增量表达式:往常可用来改正循环变量的值,一般是赋值语句。控制变量每循环一次后按什么方式变化。for语句的履行过程是:1)计算初始化表达式的值。2)计算条件表达式的值,若值为真(非0)

30、则履行循-环体中的语句,转第(3)步;若值为假(0)则转第(4)步。(3)计算增量表达式的值,转第(2)步重复履行。(4)结束循环。初始化表达式假(0)条件表达式真(非0)循环体增量表达式程序流程图如图2.12所示。图2.12程序流程图例2.15求123+100的和,用for语句实现。定义i,sum赋初值假(0)i=100真(非0)sum+=i;i+-图2.13程序流程图剖析:此问题的流程图以下:程序代码写为:#includevoidmain()inti,sum=0;for(i=1;i=100;i+)sum+=0;printf(“sum=%dn”,sum);思虑:求2+4+6+200的和提示:

31、把增量表达式改为:i+=2例2.16输入一个110间的自然数,用for语句求这个数的阶乘。剖析:程序的流程图以下:inti=1,n,s=1;scanf(“%d”,&n);假(0)i=n真(非0)s*=i;i+;图2.14程序流程图-完好的程序代码为:#includevoidmain()inti,n,s=1;scanf(“%d”,&n);for(i=1;i=n;i+)s*=i;printf(“%d!=%dn”,n,s);思虑:在main函数中输入一个大于110的自然数n,调用函数fun,计算:1+2+3+n,在main函数中输出结果,请达成填空。#includedoublefun(intn)/*

32、乞降*/voidmain()intx;doubles;-scanf(“%d”,&x);s=fun(x);printf(“s=%lfn”,s);例2.17改正例2.14的查分程序,用for语句实现成绩的输入。#includevoidquery(inta,intn)intscore,i;printf(Pleaseinputscore:);scanf(%d,&score);for(i=0;in;i+)if(ai=score)printf(studentNO.:%dn,i);printf(thequeryover!n);voidmain()inti,a20,;for(i=0;i20;i+)printf

33、(nstudent%i,score:,i);scanf(%d,&ai);query(a,20);-主函数的程序流程图如图2.15所示,查分函数的程序流程图如图2.16所示。输入成绩scorei=0i=0假(0)假(0)i20i20真(非0)真(非0)不相等输入成绩ai比较ai、score查成绩相等i+输出学号i+图2.15主函数的程序流程图图2.16查分函数的程序流程图在使用for语句中要注意以下几点:1)for语句中的各表达式都能够是逗号表达式,也可都省略,但分号作为间隔符不可以少。比如:求整型数组a的元素和,设数组大小10,能够用以下几种方式表述:for(初始化表达式;条件表达式;增量表达

34、式)inti,s=0;for(i=0;i10;i+)-s+=ai;for(;条件表达式;增量表达式)在循环变量已赋初值时,可省去初始化表达式。inti=0,s=0;for(;i=10)break;for(初始化表达式;条件表达式;)如省去增量表达式,则不对循环控制变量进行操作,有可能造成死循环,这时应在循环体内想法实现循环变量的改变,即语句体中加入改正循环控制变量的语句。inti,s=0;for(i=0;i=10)break;循环体能够是空语句for(初始化表达式;条件表达式;增量表达式);for(i=0,s=0;i10;s+=ai,i+);例2.18输入一行字符并计算出字符个数。#inclu

35、devoidmain()intn=0;printf(Pleaseinputastring:n);for(;getchar()!=n;n+);printf(%d,n);程序中的循环条件为getchar()!=n,判断从键盘输入的字符能否是回车。增量表达式用于字符计数,而不是用来改正循环变量,全部的工作都在表达式中已达成,循环体是空语句了,注意此时空语句的分号不行少。思虑:求1+2+3+4+99+100的和,用以上的6种形式来达成。for语句一般用于拥有明确循环次数的状况。假如预先不知道正确的循环次数,只知道循环控制条件,循环次数及控制条件要在循环过程中才能确立的状况,一般用while或dowhi

36、le语句来描绘。循环嵌套循环能够嵌套,且三种循环语句能够互相嵌套。如for-语句可与while、dowhile语句互相嵌套,构成多重循环。循环和循环一般是并列或嵌套的,绝不可以交错。在循环中可用转移语句把流程转到循环体外,但绝不可以从外面转入循环体内。在循环程序中应防止出现死循环,即应保证循环变量的值在运转过程中能够获得改正,最后使循环条件变成假,进而结束循环。比如从键盘读入数组a45值的程序段可写为:inta45,j,k;for(j=0;j4;j+)/*循环嵌套*/for(k=0;k5;k+)scanf(“%d”,&ajk);或写为:inta45,j,k;for(j=0;j4;j+)for(

37、k=0;k5;k+)scanf(“%d”,aj+k);相同道理,把数组中的值输出到显示器上的程序段可写为:for(j=0;j4;j+)for(k=0;k5;k+)printf(“%4d”,ajk);printf(“n”);在以上的程序段中,先履行外循环j=0,而后进入内循环,当内循环履行次退后出内循环,进行第二次j=2外循环,因此内、外循环变量的变化状况以下表所示。外循环内循环变量变量-j=0k=0、1、2、3、4j=1k=0、1、2、3、4j=2k=0、1、2、3、4j=3k=0、1、2、3、4例2.19从键盘读入一个4行5列的数组,输出数组中的最大值。#includevoidmain()i

38、nta45,j,k,max;for(j=0;j4;j+)for(k=0;k5;k+)scanf(“%d”,&ajk);for(j=0;j4;j+)for(k=0;k5;k+)printf(“%4d”,ajk);printf(“n”);max=a00;for(j=0;j4;j+)for(k=0;kmax)max=ajk;printf(“max=%dn”,max);-例2.20输出一张乘法九九表。算法设计:用两个嵌套for循环,外for循环履行9次,每一次包含一个内for循环用来打印1行。这样两个for循环打印9行。#includevoidmain()inti,j;for(i=1;i10;i+)p

39、rintf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j=i;j+)printf(%2d*%d=%-3d,i,j,i*j);printf(n);例2.21编一程序,打印图示的输出。*剖析:外循环5次,循环语句为for(i=0;i5;i+);而后循环空格,循环语句为for(j=0;ji;j+);内层循环5次,循环语-句为for(k=0;k5-i;k+),因此程序代码为:#includevoidmain()inti,j,k;for(i=0;i5;i+)for(j=0;ji;j+)printf(“);for(k=0;k5-i;k+)printf(“*“);p

40、rintf(“n”);例2.22在屏幕上显示如图2.17所示的图形。一行为*,一行为+,每一行的字符数逐减。*+*+*+*+*图2.17+屏幕显示图形#includevoidmain()introw=10,column;while(row0)column=0;while(columnrow)-printf(%c,row%2?+:*);+column;-row;printf(n);例2.23把数组中的重复数据去掉。算法设计:对数组中的每一元素与后来面的元素比较,把后来的相i=0in真(非0)假(0)j=i+1k=jai=ajak=ak+1j+k+真(非0)假(0)jnkn假(0)i+真(非0)同

41、元素删除。程序流程图如图2.18所示。图2.18程序流程图#include#defineMAXSIZE10voidmain()inti=0,j,k,n=MAXSIZE,aMAXSIZE=43,56,78,33,56,78,66,-33,74,78;while(in)for(j=i+1;jn;j+)if(ai=aj)for(k=j;kn;k+)ak=ak+1;n-;i+;for(i=0;in;i+)printf(%6d,ai);break语句与continue语句在前面的switch语句中,已经用到了break语句,用来跳出switch语句,转去履行switch此后的程序。相同,在用for、wh

42、ile、do-while语句构成的循环中,也可用break语句跳出所在层的循环,停止该层循环而履行该循环后边的语句。一般break语句老是与if语句联系在一同,即知足条件时便跳出循环。使用break语句能够使循环语句有多个出口,使编程更为灵巧、方便。此外,continue语句用来结束本次循环,即不再履行循环体中continue语句以后的语句,转入下一次循环条件的判断与履行。其作用是:跳过循环体中节余的语句,而强行-履行下一次循环。break语句break为中断语句,程序无条件地从while,dowhile,for,switch中跳出。格式:while(表达式)语句块1;if(条件)break;

43、语句块2;其流程控制图为:0表达式1语句块11条件break0语句块2图2.19程序流程图例2.24break举例#includevoidmain()staticinta45=1,2,3,4,0,-2,2,0,3,0,3,0,5,6,7,5,0,0,0,0;intj,k;for(j=0;j4;j+)for(k=0;k5;k+)if(ajk=0)break;printf(%d,ajk);printf(n);剖析:当只需判断到aik=0为真时,就中断内层循环,因此即便某行的元素为3,0,5,6,7判断到0后就中断内层循环,所以5,6,7也不输出。程序履行结果:12342continue语句cont

44、inue的功能是从循环的途中返回到循环开头处的控制构造。格式:while(表达式)/*(for或do)*/语句块1if(若为某一条件的话)continue;-语句块2;0表达式1语句块11continue条件0语句块2图2.20程序流程图例225从键盘上输入不多于10个实数,求这些数的总和及此中正数的总和。若不足10个数,则以0作为结束标志。#include#includevoidmain()floatsum,psum,x;inti;for(sum=psum=0.0,i=0;i10;i+)scanf(%f,&x);if(fabs(x)1e-4)break;sum+=x;if(x0)continue;psum+=x;-printf(sum=%fn,sum);printf(psum=%fn,psum);自然除了break、continue语句,还有无条件转移语句goto语句、返回主调函数的return语句和exit(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论