第三章三种基本控制结构.ppt_第1页
第三章三种基本控制结构.ppt_第2页
第三章三种基本控制结构.ppt_第3页
第三章三种基本控制结构.ppt_第4页
第三章三种基本控制结构.ppt_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

1、,C 程 序 设 计,C语言中的三种基本控制结构,3.5 顺序结构程序设计 3.6 选择结构程序设计 3.7 循环结构程序设计,顺序结构 按照书写次序依次执行的语句,顺序结构的流程图和N-S图,顺序结构的操作,1. 先定义变量,向各变量中输入需要加工处 理的数据。 2. 利用各种运算进行数据计算。 3. 输出数据结果。,C语言中三种基本控制结构,3.5 顺序结构程序设计 3.6 选择结构程序设计 3.7 循环结构程序设计,一、单分支选择结构,单分支:计算机对某个表达式做判断,若为“真”,则执行语句块i,否则执行语句块j。,单分支结构的流程图,if (表达式) 语句组i; else 语句组j;,

2、例如: 如果x大于y成立,则打印输出x 的值,否则打印输出y的值。 if (xy) printf(“d”,x); else printf(“d”,y);,也可以只处理表达式为“真”的情况 。,单分支结构的流程图,if (表达式) 语句组i; 执行过程是: 如果表达式为“真”,则执 行语句组i。,例如: 如果x大于y成立,则打印输出x的值。 if (xy) printf(“d”,x);,说 明:,1. if 语句中的“表达式”,可以是逻辑表达式、关系表达式、常量、变量等。 例如:if (a = b 否则跳过这个语句。然后执行 printf(“再买一个!”);编译器会因为找不到与else匹配的if

3、, 而报错。因此若if或else中含有多个语句时,要用一对大括号 “”括起来。,流程图中的元素及含义 流程图主要用两种:传统流程图和N-S流程图。 1传统流程图 2、N-S流程图,【例】 计算下面的分段函数。,例 输入任意两个整数num1、num2,求两个数中的最大值。 main()int num1,num2, max; printf(“请输入两个整数:”); scanf(“%d,%d”,【例】 输入两个实数,按代数值由小到大的次序输出这两个数。,【例】 输入三个实数a,b,c,按代数值由小到大的次序输出。,另 解:,例 输入任意三个整数num1、num2、num3,求三个数中的最大值。#in

4、clude main()int num1,num2,num3,max; printf(请输入三个整数:); scanf(%d,%d,%d,二、多分支选择结构,如果计算机面对的不是二选一,而是多选一的问题,程序中需要使用多分支结构。,用if语句实现多分支结构 if (表达式1) 语句组1 else if (表达式2) 语句组2 else if (表达式n) 语句组n else 语句组n+1,用if 语句实现选择结构举例,-1;x0 输入x 值,输出y值。,#include void main( ) int x,y; scanf(%d, ,【例】 计算下面的分段函数。,#include void

5、main( ) int x,y; scanf(%d, ,例从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score main( ) int score; scanf(%d, ,用开关语句swtich实现多分支结构,switch语句格式: switch( 表达式) case 常量表达式1: 语句组1; break; case 常量表达式2: 语句组2; break; . case 常量表达式n: 语句组n; break; default: 语句组n+1 ; break; ,执行过程:首先对switch后面括号内的表达式进行 计算,将计算的结果逐个与ca

6、se后面的常量表达式 比较,当表达式的值与某个常量表达式的值相等 时,则执行该case后面对应的语句组,而后由 break语句跳出整个switch结构,如果表达式的值 与所有的常量表达式都不相等,则执行default后的 语句组。,说 明:,(1)break语句用以跳出switch结构,当执行 break语句时,后面的代码被“短路”,不会 被执行。若不使用break,则从与表达式相匹 配的那个case语句开始后所有的语句组都会被 执行。,例如:int d; scanf(%d, 若d为1时,输出d等于1,然后遇到break退出switch,例如: int d; scanf(%d, 去掉了各bre

7、ak,若d为1时,输出d等于1,d等于2, d不等于1和2,然后执行完switch结构退出。,default后面的内容在switch表达式的值与各种case都不相等时,要执行的内容。可根据需要省略。 switch(d) case 1: printf(“d等于1n”); break; case 2: printf(“d等于2n”); break; 若d不等于1,也不等于2时,不做处理。,省略default后面的break对程序结果无影响。 switch(d) case 1: printf(“d等于1n”); break; case 2: printf(“d等于2n”); break; defau

8、lt: printf(“d不等于1和2n”); 效果一致 default: printf(“d不等于1和2n”); break; ,(2)switch后面括号内的“表达式”必须是整型或 字符型,可以为常量或变量。 例如:若有 double d; d写在switch中就出错。 switch(d) case 1.0: printf(“d等于1.0n”); break; case 2.0: printf(“d等于2.0n”); break; default: printf(“d不等于1.0和2.0n”); break; ,(3)case中的各常量表达式的值应各不相同,互斥。 例如:若有 int d;

9、 有两个case 1就出错。 switch(d) case 1: printf(“d等于1n”); break; case 1: printf(“d等于1n”); break; case 2: printf(“d等于2n”); break; default: printf(“d不等于1和2n”); break; ,(4)改变各个case的先后顺序,对程序没有影响。 例如:若有 int d; 则可以交换各case的位置。 switch(d) case 1: printf(“d等于1n”); break; case 2: printf(“d等于2n”); break; default: print

10、f(“d不等于1和2n”); break; ,与 switch(d) case 2: printf(“d等于2n”); break; case 1: printf(“d等于1n”); break; default: printf(“d不等于1和2n”); break; 等价,对程序结果没有任何影响。,【例3.9】编写一个程序,根据学生的得分判定其类别,判定规则:若小于60分判为E级,60到69分判为D级,70到79分判为C级,80到89分判为B级,90到100分判为A级。(1)用多个if单分支结构实现。(2)用if多分支结构实现。(3)用switch结构实现。,(1)用多个if单分支结构实现。

11、,(2)用if多分支结构实现。,(3)用switch结构实现。,【例】从键盘输入1-7之间的数字,输出此数字对应的是星期几。若输入的数字不在此范围,提示出错。(1)用if多分支结构实现。(2)用switch结构实现。,(1)用if多分支结构实现。,else可以根据需要省略,(2)用switch结构实现。,defalut后面的break可省略 defalut可以根据需要省略,各case后面的break 可以省略吗?,结论:当输入17范围外的值时,程序可以正 确执行,当输入是17之间的值时,程序会从 匹配的情况一直执行到遇到break或者switch 结构结束。因此除了default处的break

12、,其余 的break不要省略。,三、嵌套选择结构,在分支语句中又包含一个或多个分支语 句称为嵌套选择结构。嵌套选择结构的 样式繁多。以if结构中嵌套if else结构为 例来说明:,if (表达式1) if (表达式2) 语句组1 else 语句组2 ,执行过程:首先计算表达式1的值,如果其值为“假”,直接跳出该结构,语句组1和语句组2都不会被执行。如果其值为“真”,则执行内部的if else结构,计算表达式2的值,如果其值为“真”,则执行语句组1,否则执行语句组2。,if-else的配对原则,C标准规定:被同级别的一对大括号“” 括起来时, else语句总是和它上面最近的 未配对的 if配对

13、。,【例3.11】 if和else的配对问题。,匹配,相当于,检查输出结果,发现虽然a和b相等,但却输出了a!=b。,为了避免歧义性,应该给嵌套结构适当地添加大括号,此时else与第一个if配对。,【例3.12】 按照下面的公式,输入 x,输出相应的y。,同一个问题可能有不同的解决方式,可 以根据需要选择合适的结构。,方法一,方法二,方法三,方法四,方法五,第3章 三种基本控制结构,3.5 顺序结构程序设计 3.6 选择结构程序设计 3.7 循环结构程序设计 3.8 辅助控制语句,一、 while结构,while 结构常称为“当型”循环结构。,while语句实现“当型”循环: while (表

14、达式) 循环体 特点:先判断表达式的值, 再决定是否执行循环体。,说 明:,1. 当第一次判断表达式的值为“假”时,循 环体一次也不执行。例如: int i = 0; while (i0) i+; printf(“%3d”, i); ,2. 除去必要的情况,尽量避免无限循环,如: while(1)是死循环。从代码编写的角度看,在循环体中应有使循环趋向结束的语句。 例如: int i = 0; while (1) i+; printf(“%3d”, i); ,3. 不要在while(表达式)处添加分号。 例如: int i = 0; while (i10); i+; printf(“%3d”,

15、i); ,循环执行空语句,这部分代码执行不到。,4. 循环体可为任意类型语句,若循环体不止一 条语句,应使用一对花括号括起来。若无花括号,while语句的范围只到while后面第一个分号处 例如: int i = 0; while (i10) i+; printf(“%3d”,i);,循环体是while下面的第一个语句i+; printf在循环完后会执行一次。若要输出每个变化的i值,应添加花括号。,【例3.13】用while循环求sum=1+2+.+100。,思考1.循环变量i的增值i+可以换成+i吗?,思考2. sum = sum + i; 和 i+; 可以调换顺序吗?,可以将i=1改为i=

16、0; i=100改为i=99,思考3. while结构中的大括号是否可省略?,循环体为sum=sum+i;循环条件一直成立,循环执行sum=sum+i;程序陷入死循环。,思考4. while(i=100)后面可以加分号吗?,循环体为空语句,循环条件一直成立,循环执行空语句,程序也陷入死循环。,二、 do while结构,do while 结构常称为“直到型”循环结构。,do while语句实现“直到型” 循环的语句格式: do 循环体 while(表达式); 特点:先执行循环体一次, 再判断表达式决定是否继续执行 循环体。 执行循环体的次数:1到无数次,说 明:,1. 最少执行一次循环体,当第

17、一次判断表达式的值为“假”时,循环体已执行了一次。例如: int i = 0; do i+; printf(“%3d”, i); while (i0);,2. 除去必要的情况,尽量避免无限循环。 例如: int i = 0; do i+; printf(“%3d”, i); while (1);,3. 在while(表达式)处不要漏掉分号。 例如: int i = 0; do i+; printf(“%3d”, i); while (i10),语法出错,;,4. 循环体可为任意类型语句,若循环体不止一 条语句,应使用一对大括号括起来。 例如: int i = 0; do i+; printf(

18、“%3d”, i); while (i10);,语法出错。,【例3.14】用do while循环求sum=1+2+.+100。,思考1.循环变量i的增值i+可以换成+i吗?,思考2. sum = sum + i; 和 i+; 可以调换顺序吗?,可以将i=1改为i=0; i=100改为i=99,思考3. while结构中的大括号是否可省略?,语法出错。若循环体只有一句,可以不写大括号。,思考4. while(i=100)后面不写分号,可以吗?,语法出错。,【例3.15】while和do while 循环的比较。,(1)while循环的程序: #include int main( ) int i,

19、 sum = 0; scanf(%d,while(i=100) sum = sum + i; i+; printf(sum = %dn, sum); return 0; ,【例3.15】while和do while 循环的比较。,(2)do while循环的程序: #include int main( ) int i, sum = 0; scanf(%d,do sum = sum + i; i+; while(i=100); printf(sum = %dn, sum); return 0; ,(1)若输入的i为小于等于100的值时,两种结构的程序执行循环次数一致,输出结果也一致。 (2)若输

20、入的i为大于100的值时,while循环一次也不执行,do while循环执行一次,输出结果不一致。,从键盘输入一系列字符,以回车符结束。分别统计字母、数字、空格、其它字符的个数并输出。,请思考:用while结构和do while结构书写的 程序在统计其他字符数目的时候,为什么不 一致,若要两者一致可以如何修改程序? 分析:do while结构中将回车换行键也统计 成了其他字符,可以修改d的初值为-1,两者 的程序结果就可以一致。,三、 for 结构,for结构是三种循环结构中最常用的一种 。,特点:先计算初始化表达式,再计算判断表达式,若为“真”,执行循环体,计算修改表达式,再计算判断表达式

21、,.,直至其值为“假”退出循环。,for 循环结构的流程图和N-S图,for语句常见应用形式,for(循环变量赋初值;循环条件;循环变量增值) 例如 for(i=1;i=100;i+) sum=sum+i; 相当于 i=1; while(i=100) sum=sum+i; i+; ,for循环改成while循环的形式,表达式1 while(表达式2) 语句 表达式3 ,【例3.16】用for循环求sum=1+2+.+100。,说 明:,(1)for循环结构一般把给循环变量赋初值作为初始化表达式,例如:i=1; 把限制循环变量的表达式作为循环条件,例如: i=100; 把修改循环变量的表达式作为

22、修正表达式,例如: i+ ,注意i+后面不写分号了。 (2)当单个语句作为循环体时,大括号可以省略。,【例3.17】“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如:153 = 13+53+33,所以153就是水仙花数。编写程序,输出所有的水仙花数。,说 明:,(1)for语句中表达式1,表达式2 ,表达式3 类型任 意,都可省略,但之间的分号不可省略。 1. 初始化表达式省略,在循环结构前面给循环变 量赋初值。 int i = 1; for(;i = 100 ; i+ ) sum += i;,2. 判断表达式省略,无循环结束条件,死循环。 int i ; for( i=1; ;

23、 i+ ) sum += i; 3. 修正表达式省略,在循环体内部修改循环变量。 int i ; for( i=1; i = 100 ;) sum += i; i+; ,循环体不止一条语句时,务必用大括号括起来。,4. 初始化表达式和修正表达式省略 。 int i = 1; for( ; i = 100 ;) sum += i; i+; 5. 三个表达式都省略,死循环。 for(;) sum += i; i+; ,(2)初始化表达式和修正表达式可以是逗号表达式。 for(i = 0, j = 100; i = j; i+, j-) k += i*j; 循环次数为:51次 k的最终结果为: 0*

24、100 + 1*99 +2*98+.+50*50,四、 循环嵌套结构,一个循环体内又包含一个或多个完整的循环结构, 称为循环的嵌套。例如:以下是个二重循环。 for(初始化表达式1; 判断表达式1; 修正表达式1) for(初始化表达式2; 判断表达式2; 修正表达式2) 循环体 ,时钟行走:i代表时针,j代表分针,.,for(i=1; i=12; i+) /*把变化慢的i写在外循环*/ for(j=0; j=59; j+) /*把变化快的j写在内循环 */ printf(“当前时间是%d:%dn”,i,j); ,【例3.18】编写程序输出如下图形。,【例3.19】编写程序输出如下图形。,方法

25、1,方法2,【例3.20】编写程序输出如下图形。,第3章 三种基本控制结构,3.5 顺序结构程序设计 3.6 选择结构程序设计 3.7 循环结构程序设计 3.8 辅助控制语句,一、 break 语句,break的作用是“破壳而出”,当程序流程执行到循环结构 中的break语句时,循环被中断,程序流程跳出循环体,转 到循环结构之后的语句执行。 例如: while(表达式1) . if (表达式2) break; . ,【例3.21】编写程序,查找100到200之间的所有素数并输出。,说 明,(1)m的因子的查找范围,即i的取值范围也可以 是2m-1,但效率不如2m/2。还可以将其取值范 围设为2sqrt(m),效率会更高些。注意:使用开 方函数sqrt需要包含math.h文件。,(2)因为只要找到m能被1和m以外的任何数整除,就能认定它不是素数,不用再去判断该数后面的数是否也可以整除m。因此用break语句终止

温馨提示

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

评论

0/150

提交评论