C语言程序基本控制结构及其应用.ppt_第1页
C语言程序基本控制结构及其应用.ppt_第2页
C语言程序基本控制结构及其应用.ppt_第3页
C语言程序基本控制结构及其应用.ppt_第4页
C语言程序基本控制结构及其应用.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 C语言程序 基本控制结构及其应用,3.1 算法及结构化程序设计,3.1.1 算法及其特征 算法,程序的灵魂。 一个完整的算法应具有如下特征: 有穷性 确定性 可执行性 0个或多个输入;1个或多个输出,什么是程序? 一个程序应包括两个方面的内容: 对数据的描述:数据结构(data structure) 对操作的描述:算法(algorithm) 著名计算机科学家沃思提出一个公式: 程序 = 数据结构 + 算法 完整的程序设计是: 数据结构算法程序设计方法语言工具,什么是算法? 为解决一个问题而采取的方法和步骤,称为算法。 1、计算机算法 对于计算机算法应该有一个正确的定位。既不能认为计算机

2、是万能的,如“替我理发”计算机目前是无法做到的,也不能认为计算机只能进行数值运算。 2、算法的特性 有穷性:有限的操作步骤,不能是无限的。 确定性:每一步所执行的操作是唯一确定的,不能有歧义。 有零个或多个输入:可以没有输入。 有一个或多个输出:算法目的是为了求解,解就是输出。至少有一个输出。没有输出的算法是没有意义的。 有效性:可操作,可执行。每一步操作都能有效执行,并得到确定结果。如:除数为0,则不能有效的执行。,算法的描述: 1、自然语言 2、传统流程图 3、N-S结构图 4、伪代码 5、计算机语言 计算机语言:严格遵循计算机语言的语法规则所表示的算法。从而完成实际工作到计算机语言的转化

3、。,1、用自然语言表示算法 自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。 自然语言表示的含义往往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。,2、用流程图表示算法 美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:,3.1.2 算法的类型与结构,计算机可处理的算法,一般归纳为“数值算法”和“非数值算法”两类。“数值算法”常用于科学计算,而“非数值算法”则

4、广泛用于各类数据的数据处理,它常常要涉及大数据量和复杂的数据结构。,三种基本结构: Bohra和Jacopini提出了以下三种基本结构: 顺序结构、选择结构、循环结构 用这三种基本结构作为表示一个良好算法的基本单元。,三种基本结构的图示: 顺序结构 选择结构,循环结构的图示: 当型循环结构 直到型循环,三种基本结构的共同特点: (1) 只有一个入口; (2) 只有一个出口;(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。) (3) 结构内的每一部分都有机会被执行到; (4) 结构内不存在“死循环”(无终止的循环)。,不正确的流程表示:,图

5、中没有一条从入口到出口的路径通过A框。,流程内的死循环,扩展: 只要具有上述四个特点的都可以作为基本结构。可以自己定义基本结构,并由这些基本结构组成结构化程序。,此图符合基本结构的特点,这是一个多分支选择结构,根据表达式的值决定执行路线。 虚线框内的结构是一个入口一个出口,并且有上述全部的四个特点。 由此构成的算法结构也是结构化的算法。可以认为这是由三种基本结构所派生出来的。,小 结 流程图是表示算法的较好的工具。一个流程图包括以下几部分 : (1) 表示相应操作的框; (2) 带箭头的流程线; (3) 框内外必要的文字说明。 由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结

6、构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。,用N-S流程图表示算法 1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。 在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。 这种流程图又称N-S结构化流程图。,N-S流程图用以下的流程图符号:,(1)顺序结构 (2)选择结构 (3)循环结构,N-S图表示算法的优点 比文字描述直观、形象、 易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构

7、是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。用N-S图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。,题目一 将变量a和b中的数交换。( a和b的初值为:a=3 b=4),题目二 计算z的值。z=|a-b| (输入a、b的值),题目三 求1到5的累加和。,算法举例,这三个例题分别是顺序、选择和循环结构的举例。 明确一点:计算机只能完成我们告诉它的工作,其他的不会主动去执行。很傻,它没有智能。,题目一 S1:a=3 S2:b=4 S3:t=a S4:a=b S5:b=t S6:输出a和b的值.,题目二 S1:输入a和b的值。

8、S2:判断ab? 是:S21: z=a-b, 到S3步。 否:S22: z=b-a, 到S3步。 S3:输出z的值。,题目三 S1:i=1, s=0 S2:当i=5时,执行 S21,否则执行S3 S21:s=s+1 S22:i=i+1,执行S2 S3:输出S的值。,算法举例自然语言,题目一,题目二,题目三,算法举例传统流程图,题目一,题目二,题目三,算法举例N-S结构,题目一,题目二,题目三,a=3 b=4 t=a a=b b=t print(a,b),input(a,b) if ab then z=a-b else z=b-a endif print(z),i=1 s=0 while i=5

9、 s=s+i i=i+1 end print(s),算法举例伪代码,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法的表示形式。,题目一,题目二,题目三,#include void main() int a,b; a=3; b=4; t=a; a=b; b=t; printf(“%d%d”,a,b); ,#include void main() int a,b; scanf(“%d%d”, ,#include void main() int i,s; i=1; s=0; while (i=5) s=s+i; i+; printf(“%d”,s); ,算法举例C语言源程序,C语句,控

10、制语句,函数调用语句,由一次函数调用加一个分号构成一个语句。,表达式语句,空语句,?,1、出现在函数体的执行 部分。 2、作用是向计算机系统 发出操作指令。,复合语句,if () else for () while () do while() continue break switch goto return,if (xy) z=x; else z=y;,printf(“Hello!”);,由表达式加一个分号构成一个语句。,a=3;,;,由 将一些语句括起来。, t=a; a=b; b=t; ,?,C语句分类,1、C语句都是用来完成一定操作的,声明部分的内容不应称为语句。如int a;不是一个

11、C语句。 2、控制语句中:()表示其中是一个条件,表示内嵌的语句 3、语句后的分号不可少 4、思考复合语句举例的含义?两数交换。,练习: 题目:输入三个数a,b,c,输出最大数。 要求:1、用自然语言描述其算法。 2、用传统流程图描述其算法。 3、用N-S图描述其算法。,答案 2传统流程图,答案 3N-S结构图,例1,从键盘输入一个大写字母,转换成相应的小写字母输出。,#include void main() char c1,c2; /增强人机交互性。 printf(“请输入一个大写字母:”); c1=getchar(); printf(“%c,%dn”,c1,c1); c2=c1+32; p

12、rintf(“%c,%dn”,c2,c2); ,请输入一个大写字母:A A,65 a,97,在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每条语句都会被执行到。,运行情况:,3.2 顺序结构程序设计,提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。 注意:在对一个具体问题进行程序设计时,要选择合理的数据类型。,例2,输入三角形的三边,求三角形的面积。,#include #include void main() float a,b,c,p,s; printf(“请输

13、入三角形的三边:”); scanf(“%f%f%f”, ,请输入三角形的三边:3 4 5 s=6.00,分析,a,b,c:表示三角形的三边。 p:中间变量。 p=(a+b+c)/2 s:三角形面积。 以上变量均为实型。,?,若输入 3 4 8 -2 -3 9,运行情况:,此例要求在输入三角形三边时,满足构成三角形的条件:任意两边之和大于第三边。否则结果无意义。,include void main() int num1,num2,num3,sum; float aver; printf(“请输入三个整数:”); scanf(“%d,%d,%d”,例3,输入任意三个整数,求它们的和及平均值。,nu

14、m1,num2,num3:表示三个整数。 sum:求和结果 aver:平均值,分析,?数据类型,请输入三个整数:3,6,10 num1=3,num2=6,num3=10 sum=19,aver= 6.33,3.0改为3可以么?,首先选择合适的数据类型:三个整数以及求和结果为int型,平均值为实型。,例3-2:从键盘上输入一个小写字母,要求用其对应的大写字母输出。 #include stdio.h void main() char c1,c2; printf(input a Lower-case:); c1=getchar(); c2=c1-32; printf(Upper-case is %

15、c,c2); ,3.3 分支结构程序设计,选择结构,单分支,双分支,if (表达式) 语句,多分支,if (表达式) 语句else 语句,if (表达式1) 语句 else if (表达式) 语句 else 语句n,if 语句的嵌套,switch语句,选择结构的三种分支,if (表达式) 语句 例如: if (ab) printf(a);,3.3.1 if 分支,格式,举例,if (xy) printf(“%d”,x);,if (表达式) 语句,单分支,#include void main() float a,b,t=0; scanf(“%f,%f”, ,3,4 3.00, 4.00, if

16、(ab) t=a; a=b; b=t; , if (ab) t=a; a=b; b=t; ,3,4 4.00, 0.00,当某些语句作为一个整体出现的时候,必须是复合语句的形式。,if (条件表达式) 程序块1; else 程序块2; ,3.3.2 if-else分支,例3-4 输入一个字符,判断它是否是09之间的字符。 #include void main() char c; printf(input a character:); c=getchar(); if ( c = 48 ,格式,if (xy) printf(“%d”,x); else printf(“%d”,y);,双分支,#in

17、clude void main() float a,b,c,p,s; scanf(“%f,%f,%f”, ,if (表达式) 语句else 语句,例:输入三角形的三边,求三角形的面积。,3,4,5 s= 6.00,3,4,8 Not a triangle!,条件表达式,举例,if (ab) max=a; else max=b;,双分支,表达式?表达式:表达式,max= (ab)? a : b;,条件运算符的使用条件,若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。,取值,表达式1为真,则取值为表达式2的值; 表达式1为假,则取值为

18、表达式3的值。,if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if (表达式m) 语句m else 语句n,3.3.3 多分支if else ifelse形式,例3-5:有一个函数,定义如下: 0 (x50) #include void main() float x; scanf(%f, ,格式,举例,多分支,if (cost3000) cash=500; else if (cost2000) cash=300; else if (cost1500) cash=200; else if (cost1000) cash=100;

19、 else cash=0;,if (表达式1) 语句 else if (表达式) 语句 else 语句n,语句本身含分号,if语句的嵌套,多分支,在if语句中又包含一个或多个if语句。,被嵌套的条件语句和嵌套进去的条件语句既可是单分支,也可是双分支。,if (表达式) if (表达式) 语句 else 语句 else if (表达式3) 语句3 else 语句4,注意,If 与else的配对原则: Else 总是与它上面的最近的未配对的if配对。,举例,多分支,已知 a=3 b=4 c=5 d=0, d=?,if (ab)d=a; else if (cb) d=c; else d=b;,if

20、(ab) if (cb) d=c; else d=b ;,if (ab) if (cb) d=c; else d=b ;,if (ab) if (cb) d=c; else d=b; else d=a;,d=5,d=3,d=0,d=4,选择结构程序举例,例1,输入一年号,判断这一年是否为闰年.,选择结构程序举例,例1,输入一年号,判断这一年是否为闰年.,#include void main() int year,leap; scanf(%d, ,运行情况如下: 输入:1800 输出:1800 is not a leap year 输入:2000 输出:2000 is a leap year 输

21、入:1996 输出:1996 is a leap year,选择结构程序举例,例2,求方程 ax2+bx+c=0 的解.(各种形式),#include #include void main() float a,b,c,disc,x1,x2,realpart,imagpart; scanf(%f,%f,%f, ,选择结构程序举例,if (条件表达式a) 程序段a1; if (条件表达式b) 程序段b1; else 程序段b2; 程序段a2; else 程序段a3;,3.3.4 条件分支的嵌套,例3-6 求解ax2+bx+c=0的完全解。 #include #include void main()

22、 float a,b,c,x1,x2,p,q,m; scanf(%f%f%f, else ,m=b*b-4.0*a*c; if (m=0) x1=(-b+sqrt(m)/(2.0*a); x2=(-b-sqrt(m)/(2.0*a); printf(x1=%fn,x1); printf(x2=%fn,x2); else p=-b/(2.0*a); q=sqrt(-m)/(2.0*a); printf(x1=%f+%fin,p,q); printf(x2=%f-%fin,p,q); ,switch (表达式 e) case 常量表达式c1: 程序段1; break; case 常量表达式c2:

23、程序段2 ; break; case 常量表达式cn: 程序段n; break; default: 程序段n+1; break; ,3.3.5 开关语句,例3-7 根据学生成绩的等级打印出分数段。 #include void main() char grade; printf(input the grade(A,B,C,D,E):); scanf(%c, ,switch语句也可以嵌套使用,下面是典型的switch嵌套的情形: #include void main() int x,y; scanf(%i%i, ,开关语句,switch (表达式) case 常量表达式1:语句1 case 常量表

24、达式2:语句2 case 常量表达式3:语句3 case 常量表达式n:语句n default: 语句n+1 ,多分支,当分支较多时,使用嵌套的if语句层数多,程序冗长而且可读性降低。此时可以考虑使用switch语句(开关语句)来处理多分支。,举例,#include void main() char grade; printf(“请输入考试等级AD:”); scanf(“%c”, ,B 7079 6069 60 Error,根据输入的考试成绩等级打印出百分制分数段。 A: 80100 B: 7079 C: 6069 D: 60,break;,单步执行,演示程序执行过程,举例,#include

25、void main() char grade; printf(“请输入考试等级AD:”); scanf(“%c”, ,B 7079,根据输入的考试成绩等级打印出百分制分数段。 A: 80100 B: 7079 C: 6069 D: 60,最后一行的break可以省略。,思考,#include void main() int score; printf(“请输入考试成绩0100:”); scanf(“%d”, ,根据输入的考试成绩(百分制整数)打印出等级水平。(使用ifelse语句实现) A: 80100 B: 7079 C: 6069 D: 60,思考:使用switch语句如何实现?,程序,思

26、考,#include void main() int score; printf(“请输入考试成绩0100:”); scanf(“%d”, ,根据输入的考试成绩(百分制整数)打印出等级水平。(使用switch语句实现) A: 80100 B: 7079 C: 6069 D: 60,思考:本程序有问题么?,程序,思考,#include void main() int score; printf(“请输入考试成绩0100:”); scanf(“%d”, ,根据输入的考试成绩(百分制整数)打印出等级水平。 A: 80100 B: 7079 C: 6069 D: 60,太麻烦了。 有没有简单的办法呢?

27、,改进程序1,101种情况,#include void main() int score, p; printf(“请输入考试成绩0100:”); scanf(“%d”, ,改进程序2,11种情况,思考:不同case值时执行相同的操作,是否可以合并?,#include void main() int score, p; printf(“请输入考试成绩0100:”); scanf(“%d”, ,改进程序3,注意:多个case共用一组执行语句时,共用的执行语句写在最后一个case的后面。,选择结构程序举例,#include void main() int c,s; float p,w,d,f; sc

28、anf(%f,%f,%d, ,例3,运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下: 没有折扣 2%折扣 5%折扣 8%折扣 10%折扣 15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为 F=p*w*s*(1-d),3.4 循环结构程序设计,思考,求1100的累加和。重复执行加法操作。叫循环语句。,分析,换一种思路:,sum=1+2+100;,首先设置一个累加器sum,其初值为0,利用sum += n来计算(n依次取1、2、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n;”后,

29、n增1; (3)当n增到101时,停止计算。此时,sum的值就是1100的累加和。,sum=sum+n;,根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。 在语言中,可用以下语句实现循环: (1)用for语句。 (2)用do-while语句。 (3)用while语句。 实现循环结构的控制语句: while语句, do-while语句 for语句, goto语句 break、 continue语句 几种循环的比较。,while (条件表达式) 程序段 ; ,3.4.1 while语句,例

30、3-8:使用while循环求两个正整数的最小公倍数 #include void main() int m,n,result; printf(input two integers:); scanf(%d%d, ,格式,while (表达式) 循环体语句,while语句,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。 2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。 3、先判断表达式,后执行语句。 如果没有使循环条件趋向于不满足(假)的语句,则循环永远退不出来,称为死循环。,?,含义,当表达式为真(非0值)时,执行while语句中的内嵌语句。,执行过程,while语句,s

31、um= 55,举例,求110的累加和。,include void main() int i,sum; i=1; sum=0; while (i=10) sum=sum+i; i+; printf(“sum=%5dn”,sum); ,思考,1、如果去掉循环体中的大括号,执行过程将会怎样变化? 2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?,?,1 求15的累加和. 2 求110的奇数和. 3 求110的偶数和.,do 程序段; while (条件表达式);,3.4.2 dowhile语句,例3-9:使用dowhile循环求两个正整数的最小公倍数。 #include stdio.h v

32、oid main() int m,n,result; printf(input two integers:); scanf(%d%d, ,格式,do 循环体语句 while (表达式);,do-while语句,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。 2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。 3、先执行循环体语句,后判断表达式的值。,?,含义,执行do-while语句中的内嵌语句,直到表达式为假(0)才跳出循环。,执行过程,至少执行一次,do-while语句,sum= 55,举例,求110的累加和。,include void main() int i,s

33、um; i=1; sum=0; do sum=sum+i; i+; while (i=10); printf(“sum=%5dn”,sum); ,思考,1、如果去掉循环体中的大括号,执行过程将会怎样变化? 2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?,举例,while和do-while循环的比较。,include void main() int i,sum; scanf(“%d”, ,include void main() int i,sum; scanf(“%d”, ,sum=55,输出:,sum=55,sum=0,输出:,sum=11,此程序的功能?,什么情况下两者结果相同?

34、,i10,结果不同。,for (语句S1;条件表达式C;语句S2) 程序段S; ,3.4.3 for语句,例3-10:用for循环计算12+22+32+42+1002。 其程序如下: #include stdio.h void main( ) int k; long result=0; for(k=1;k=100;k+) result+=k*k; printf(result=%ldn,result); ,格式,for (表达式1;表达式2;表达式3) 循环体语句,for语句,for (循环变量赋初值;循环条件;循环变量增值) 循环体语句,执行过程,(1)先求解表达式1; (2)求解表达式2,若

35、其值为真,则 执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步; (3)求解表达式3; (4)转向步骤(2); (5)循环结束,执行for语句下面的一个语句。,sum= 55,举例,求110的累加和。,include void main() int i,sum; sum=0; for (i=1;i=10;i+) sum=sum+i; printf(“sum=%5dn”,sum); ,?,1 求15的累加和. 2 求110的奇数和. 3 求110的偶数和.,for (表达式1;表达式2;表达式3) 语句,for语句,说明,三个表达式都可以省略。,for语句,说明,1,i=1

36、; for(; i=10;i+) sum=sum+i;,2,for (i=1; ;i+) sum=sum+i;,?,3,for (i=1;i=10 ;) sum=sum+i; i+; ,for(i=1; i=10;i+) sum=sum+i;,表达式1可以省略,但其后的分号不可以省略。,没有循环结束条件,构成了死循环,for(i=1; i=10;i+) sum=sum+i;,for语句,说明,4,5,for( ; ; ) sum=sum+i;,6,表达式1和表达式3可以是与循环变量无关的表达式。,for( ;i=10 ; ) sum=sum+i; i+; ,7,表达式2一般是关系表达式,也可以

37、是数值或字符表达式。,while(i=10) sum=sum+i; i+ ; ,while (1) sum=sum+i;,表达式1和表达式3可以同时省略,此时等同于while语句。,for(sum=0,i=1;i=100;i+) sum=sum+i;,建议:for语句中只放与 循环控制有关的语句。,3.4.4 三种循环的比较,说明,1、 三种循环语句在处理循环问题时,一般可以相互替代。,2、 对于循环次数固定的问题,用for语句实现比较简单。,3、 对于循环次数不确定的问题,可用while语句或do-while语句实现。,4、 while语句:先判断,后执行。 do-while语句:先执行,后

38、判断。,3.4.5 多重循环,非法的嵌套,合法的嵌套,概念,一个循环体内又包含另一个完整的循环结构,称为循环嵌套。,循环嵌套,举例,打印乘法口诀表。,#include void main() int i,j; for (j=1;j10;j+) for (i=1;ij;i+) printf(“%2d%2d = % 3d”,i,j,i*j); printf(“n”); ,思考1,输入三角形三边,求三角形的面积。,#include #include void main() float a,b,c,s,p; printf(“请输入三角形的三边:); scanf(%f%f%f, ,考虑输入的三边不构成三

39、角形,应该怎么改?,思考2,输入三角形三边,求三角形的面积。,#include #include void main() float a,b,c,s,p; printf(请输入三角形得三边:); scanf(%f%f%f, else printf(“不构成三角形!”); ,希望求多个三角形的面积,而不是每求一次退出,怎么办?,思考3,输入三角形三边,求三角形的面积。,#include #include void main() float a,b,c,s,p; do printf(请输入三角形得三边:); scanf(%f%f%f, ,我想退出,怎么办?,#include #include vo

40、id main() float a,b,c,s,p; char yes_no; do printf(请输入三角形得三边:); scanf(%f%f%f, ,思考4,怎么没有起作用? 调试看看吧!,#include #include void main() float a,b,c,s,p; char yes_no; do printf(请输入三角形得三边:); scanf(%f%f%f, ,思考5,yes_no=getchar(); yes_no=getchar();,do scanf(“%c”,1 2 4 3 6 9 4 8 12 16,#include void main() int i,j

41、; for (i=1;i=4;i+) for (j=1;j=i;j+) printf(“%4d”,i*j); printf(“n”); ,读程序写结果1,#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=4-i;j+) printf(“%4c”, ); for (j=5-i;j=4;j+) printf(“%4d”,i*j); printf(“n”); ,读程序写结果2,4 6 8 6 9 12 4 8 12 16,#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j

42、=5-i;j+) printf(“%4d”,i*j); printf(“n”); ,请同学们写出以下程序的输出结果,1 2 3 4 2 4 6 3 6 4,#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=i-1;j+) printf(“%4c”, ); for (j=i;j=4;j+) printf(“%4d”,i*j); printf(“n”); ,1 2 3 4 4 6 8 9 12 16,1、break: 退出当前循环或当前switch结构 2、continue: 用于结束本次循环,3.4.6 循环和开关(switch)

43、分支的中途退出,格式,while (表达式1) if (表达式2) break; ,break/continue语句,举例, . sum=0; for (i=1;i5) break; sum=sum+i; printf(“sum=%5dn”,sum); .,while (表达式1) if (表达式2) conitue; ,结束整个循环,结束本次循环, . sum=0; for (i=1;i=10;i+) if (i=5) continue; sum=sum+i; printf(“sum=%5dn”,sum); .,goto 标号; goto语句的使用范围: 只局限于一个函数内部; goto语句

44、在程序中最常见的用法有两种: 一是实现控制从多重循环内部退出; 二是构成循环。,3.4.7 goto 语句,goto语句,格式,goto 语句标号,说明,(1) 与if 语句一起构成循环结构。 (2) 不符合结构化程序设计原则,一般不用。,#include void main() int n=1, sum=0; loop: sum += n; n+; if (n=100) goto loop; printf(“sum=%dn”, sum); ,举例,使用goto语句与标号配合构成循环结构,实现求1100的累加和。,作用:使系统转向标号所在的语句行执行。,标号的定名规则与变量名相同。,例3-14:用户输入一串字符,以 n作为结束标志。 #include stdio.

温馨提示

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

评论

0/150

提交评论