版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 程序的控制结构,主要内容 程序语句及三种基本结构 选择结构 循环结构,3.1.1 程序语句,3.1 程序语句及三种基本结构,语句(statement)是程序中最小的可执行单位。一条语句可以完成一种基本操作,若干条语句组合在一起就能实现某种特定的功能。在C程序中,语句可以是以下三种形式之一。,单一语句,2.空语句,3.复合语句,3.1.2 三种基本结构,(c) 循环结构,假,真,(a) 顺序结构,语句n,语句n+1,语句n+2,(b) 分支结构,假,真,(a) 顺序结构,(b) 分支结构,条件成立?,真,假,问题提出:,根据学生的考试成绩判断是否通过 ?,解题的步骤:,C语言提供的选择结
2、构有三种: if语句、if-else语句、switch语句。,3.2 选择结构,3.2.1 if 语句,语句形式:,if (表达式) 语句;,语句执行流程:,if语句:对所给条件进行判定,根据判定结果决定是否执行程序段。,例3-1:从键盘任意输入一个字符,判断该字符是否是大写英文字母。若是大写字母,则自动转换为小写字母;否则,原样输出。,#include void main() char ch ; scanf(%c, ,程序运行结果: 输入:A 输出:a 输入:* 输出:*,例3-2:输入两个整数a和b,并按从大到小的顺序存放。即若a小于b则交换两个数的位置,否则直接输出a和b。,#inclu
3、de void main() int a, b, temp ; printf( Enter a,b:) ; scanf(%d%d, ,说明, 在交换两个变量的值时,不能用以下语句直接赋值 a=b; b=a; 在if语句中,内嵌语句既可以是单一语句,也可以是复合语句。 在程序书写中使用了缩进格式,即if的内嵌语句要比if向右缩进几格。,#include void main() char ch ; scanf(%c, ,思考:将例3-1做如下修改,程序的结果是?,;,补充:读程序,理解”=”与”=”的作用及区别,#include void main() int m=10; if(m=100) pr
4、intf(“m=%d”,m); if(m=100) printf(“m is assigned %dn”,m); ,程序运行结果: m is assigned 100,if (表达式) 语句1; else 语句2;,表达式,语句1,真(非0),假(0),语句2,3.2.2 if-else 语句,if-else 语句适合于解决双分支选择问题,语句形式:,语句执行流程:,例3-3:输入一个学生的成绩,如高于60分则输出“pass”,否则,输出“failed”。,#include void main() float score; printf(Enter score(0100):); scanf(%
5、f, ,补充:输入一个整数,判断该整数的奇偶性,#include void main() int m; printf(“input m:”); scanf(“%d”, ,输入m,m%2=0,偶数,结束,真,假,奇数,input m:25 25 is an odd number,input m:30 25 is an even number,注意:有的if-else语句可以用条件运算符(? :)来实现。,if(ab) max=a; else max=b;,max=(ab)?a:b;,重写例3-1:输出输入一个英文字符,若为大写字母则改为小写 字母,然后得到的字符。,#include void m
6、ain() char zm; scanf(“%c”, ,if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if (表达式n) 语句n else 语句n+1,3.2.3 嵌套的if-else 语句,语句形式:,表达式1,语句1,真(非0),假(0),语句执行流程:,例3-4:输入学生成绩,并按分数段确定等级。其中,90分以上为优,80分以上为良,70分以上为中,60分以上为及格,60分以下为不及格。,说明: 此题目是一个多分支结构,在处理分支时,既不能有重复,也不能有遗漏。,#include void main() float sc
7、ore ; printf(Enter score (0100): ); scanf(%f, ,例3-4 :可改写为如下程序: #include void main() float score ; printf(Enter score (0100): ); scanf(%f, ,注意:在嵌套的if语言中,含有多个if和else,else与if之间的配对关系就很容易混淆。例如在以下程序中, if ( x y ) if ( y z ) printf( x is the largest !) ; else printf( y is the smallest ); 其中的else是与第一个if还是第二个
8、if配对呢?,将以上程序改为: if ( x y ) if ( y z ) printf( x is . ); else printf(y is . ); 这样就从语法上将花括号中的内容说明为第一个if语句的内嵌语句,从而使else与较远的第一个if配对。,例3-5 计算分段函数,x+1.2 (x0),#include void main() int x,y; scanf( %f , ,语句形式:,switch (表达式) case 常量1: 语句 1; case 常量2: 语句2; case 常量3: 语句3; . case 常量n: 语句n; default : 语句n+1; ,根据表达式
9、的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,3.2.4 switch 语句,语句执行流程:,指语句的最后一条是否为break,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,例3-6: 输入学生成绩,通过switch语句按分数段确定等级。其中,90分以上为优,80分以上为良,70分以上为中,60分以上为及格,60分以下为不及格 。,#include void main() int score; printf(Enter score (0100): ); scanf(
10、%d, ,说明:, switch后的表达式可以是整型、字符型或枚举型,但不能是关系表达式或逻辑表达式。case后的常量表达式类型必须与之匹配,并且每个case常量表达式的值必须互不相同,否则会出现编译错误。 每个case后的语句可以是单一语句或空语句,也可以是多条语句,当然也可以是复合语句。由于case后是顺序执行的多条语句,因此可以不必写成带花括号的复合语句形式。 switch语句中的break是一个可选项,它的作用是中止与某个常量有关的语句段,并使程序跳到switch结构后的下一语句。如果没有break语句,则程序将继续执行直到switch的结尾或遇到一个break为止。灵活运用switc
11、h语句的这一特性,可大大简化编程设计。 default在switch语句中也是一个可选项。,例3-7: 在程序设计中常用switch语句来处理各种键盘命令,例如,菜单选择等。在屏幕上显示菜单“ 1.Open 2.Edit 3.Save ”,并根据用户输入,执行相应的操作。,#include void main() char ch ; printf( 1.Open 2.Edit 3.Save n); scanf(%c, ,switch 的嵌套:switch语句允许嵌套,即switch本身可以作为另一个层switch语句的一部分,switch( i ) case 0: switch ( j ) c
12、ase 0:printf( “i= =j”);break; case 1:printf(“ij”); break; case 1: . ,switch几个注意点,1. if语句能测试关系表达式和逻辑表达式,而switch只能测试相等。 2. switch语句的每个case后面的常数必须是整型或字符型,在使用字符常量时。自动转换成整数。 3. switch语句中每个case常数必须不同。在嵌套的switch语句中,内外不同层的case语句可以有相同的case常数。,C语言中有三种循环结构:while,do-while和for循环,利用有关的运算符构造表达式,以控制循环的执行。,3.3 循环结构,
13、循环: 就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。,3.2.1 while语句,真(非零),循环语句,假(零),1.while 语句的形式: while (表达式) 循环体;,2 . while 语句常称为“当型”循环语句。,3.说明:,先判断表达式,后执行语句。,表达式同if语句后的表达式一样,可以是任何类型的表达式。,循环体多于一句时,用一对 括起。,while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。,例3-9:求 1+2+3+100 。,#include void main() int i , sum ; sum = 0 ; i
14、 = 1 ; while ( i = 100 ) sum = sum + i ; i+ ; printf(sum=%dn, sum ) ; ,【例】分析下列程序段的循环次数,i=1; while (i=100) putchar(*); i+;,i=1; while (i=100) putchar(*); i+; ,补充:用while语句 计算n!。,#include void main() int n,m,temp; scanf(“%d”, ,程序运行结果 5 5!=120,注意:,表达式在判断前,必须要有明确的值。,循环体中一般有改变条件表达式的语句。,while (表达式)后面没有分号。,
15、在循环体中应有控制结束的语句,否则会形成死循环,即循环不结束。,3.2.2 do-while语句,1.do-while的形式: do 循环体; while (表达式);,2.do-while语句常称为“直到型”循环语句。,真(非零),循环体,假(零),例3-10:用do-while编程实现1100的和。,#include void main() int i, sum=0 ; i=1; do sum=sum+i; i+; while (i=100); printf(%dn,sum); ,程序运行结果: 5050,补充:用while语句 计算5!。,#include void main() int
16、 t=1,i=2; do t=t*i; i+; while (i=5); printf(“5!=%dn”,t); ,程序运行结果: 5 5!=120,3.说明:,do-while语句先执行语句,后判断表达式。,第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。,void main() int i,sum=0; scanf(%d, ,void main() int i,sum=0; scanf(%d, ,在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。,do-while和while语句相互替换时,要注意修改循环控制条
17、件。,3.2.3 for语句,1.for的形式: for (初始表达式1;条件表达式2;循环表达式3) 循环体 ;,表达式1:用于循环开始前为循环变量设置初始值。,表达式2:控制循环执行的条件,决定循环次数,表达式3:循环控制变量修改表达式。,循环体语句: 被重复执行的语句。,表达式3,计算表达式1,循环体,假(零),真(非零),for的下一条语句,2.执行过程,例3- 11:用for语句编程实现1100的和。,#include void main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i ;printf(“%dn”,sum); ,程序运行结果: 5
18、050,补充:用for语句编程计算19的平方。,#include void main() int i,j; for(i=1,j=1;i10;i+,j+) printf(“%d*%d=%4d ”,i,j,i*j); ,注意:(for中各个表达式),“表达式1”可以省,此时应在for语句之前给循环变量赋初值。但其后的分号不能省略。,省略表达式2,不判断循环条件,这时在循环体中必须要有出口,使循环能够结束。,表达式3也可以省略,循环体中要有改变循环变量值的语句,保证循环正常结束。,典型例题分析,【例】 求累加和1+2+3+1000,基本方法:,属于“累加器”类型问题。,(1)在进入累加前先给累加器赋
19、初值(一般为0); (2)用循环语句实现累加; for(循环变量赋初值;循环条件;循环变量改变规律) (3)循环体语句的设计。 累加器当前值=累加器原值+循环变量当前值 ;,累加器赋初值,思考:求偶数和 2+4+6+100,参考程序:,void main() long int k,s; s=0; for(k=2;k=100;k+=2) s=s+k; printf( s=%ld ,s); ,累加,(1)给累乘器赋初值,一般为1; (2)用循环语句实现累乘; for(循环变量赋初值;循环条件;循环变量改变规律) (3)循环体设计。 累乘器当前值=累乘器原值*循环变量当前值;,例: 求累乘积。 如:
20、123.100,基本方法:,属于“累乘器”类型问题。,累乘器赋初值,思考:求n!=1 2 3 n,参考程序:,void main() double s=1; int k; for(k=1;k100;k+) s=s*k; printf( s=%lf ,s); ,累乘,整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。,在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多层循环。,3.3.4 循环的嵌套,嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。,while
21、、do-while、for三种循环都可以互相嵌套。,下面几种都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( );,(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ); while( );,循环语句之间的关系,真,真,外循环初始条件,内循环初始条件,内循环体,外循环条件,假,内循环条件,假,内循环循环条件,外循环循环条件,循环结束,二重循环嵌套结构执行流程,例3-12: 编程输出如下形式的九九乘法表,#include void
22、main() int i,j; for (i=1; i10; i+) printf(“%4d”,i); /*打印表头,第一行*/ printf (n); for (i=1; i=36;i+) printf (%c,-); printf (n); for (i=1;i=9; i+) /*被乘数i从1变到9*/ for (j=1; j=9;j+) /*乘数j从1变到9*/ printf (“%4d”,i*j); /*输出第i行j列的值i*j*/ printf (“n”); /*换行,打印下一行*/ ,1.break语句,3.3.5 break语句和continue语句,(1) 语句形式: brea
23、k;,(2)作用: 结束break所在的 switch语句。 结束当前循环,跳出break所在的循环结构。,break语句用法示例,#include void main() int i; for(i=0;i=6;i+) printf(“%dn”,i); if(i=5) break; ,程序运行结果 0 1 2 3 4 5,思考:为什么不输出6,例3-13:从键盘任意输入若干个整数,直到输入了负数或输入整数的个数大于50为止。编程计算已输入整数之和。,#include void main() int i , n, sum=0 ; for ( i=0 ; i=50 ; i+ ) printf( n Input number : ) ; scanf(%d, ,补充:计算半径为1,28的圆面积,但当面积大于100时结束计算。,#i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业监控室值班工作制度
- 环卫车临时停靠工作制度
- 理疗养生馆工作制度范本
- 生态宜居星创建工作制度
- 2025徽商职业学院教师招聘考试题目及答案
- 2025江汉艺术职业学院教师招聘考试题目及答案
- 2026年遴选综合测试提高及答案
- 美术骨干教师试题及答案
- 炉霍县2026年度公开考聘县属国有企业管理人员建设笔试参考题库及答案解析
- 2026福建三明市第十一中学招聘编外教师1人建设考试备考试题及答案解析
- 银行资产配置方案
- 免费模式6种核心方式
- 安捷伦GC仪器操作步骤
- GFM阀控密封铅酸蓄电池安装维护手册
- 牙体代型制备与修整(口腔固定修复工艺课件)
- GB/T 6109.20-2008漆包圆绕组线第20部分:200级聚酰胺酰亚胺复合聚酯或聚酯亚胺漆包铜圆线
- GB/T 26523-2022精制硫酸钴
- 美学第六讲日常生活美
- 职业健康检查机构卫生管理自查表(2018年版)
- 通用设备经济寿命参考年限表
- DBJ51-T 194-2022 四川省城镇房屋白蚁预防工程药物土壤屏障检测和评价技术标准
评论
0/150
提交评论