ImageVerifierCode 换一换
格式:PPTX , 页数:63 ,大小:155.30KB ,
资源ID:30794475      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30794475.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序的控制结构概述.pptx)为本站会员(j***)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序的控制结构概述.pptx

1、第4章 程序的控制结构,4.1 语句及程序框架,4.1.1 语句的基本分类 语句是程序的基本组成部分,一段程序或者一个函数就是由若干语句按照算法规定的逻辑关系组成的。各种表达式都要以语句的形式出现在程序中。C语言中的语句有如下类型:(1)变量定义语句;(2)表达式语句;(3)复合语句;(4)函数调用语句;(5)控制语句;,1.变量定义语句 语法格式如下:;其含义是:告诉系统,变量表中列出的一个或多个变量的存在,同时要求系统为每个变量分配存储空间,其大小和类型与所规定的一致。变量定义语句不需要与操作步骤对应。例如:char aChar;int total=0;/用于累计素数的总数 int sco

2、re;double x,y;,2.表达式语句 语法格式如下:;从上述语法格式可以看出,表达式语句是由前面章节提及的各种表达式及后缀的分号构成。其作用是:一旦表达式语句被执行时,就要按照表达式的求值顺序计算出表达式的值。例如:i+;,3.复合语句 语法格式如下:其作用是:告诉编译系统,将多个语句看成是一个整体,在语法要求上相当于一个语句。因此,在分支和循环结构中经常使用,函数的定义体也是一个复合语句。例如:int x,y=20;x=y+10;printf(“%d;%d”,x,y);,4.函数调用语句 语法格式如下:();函数调用语句的作用是:将执行控制流程转移到与此语句完全匹配的函数定义体的第一

3、条语句处,开始执行;函数体执行结束后,返回到此语句的下一条语句处继续执行。执行流程如教材图4-1.,5.控制语句 就是用于控制程序执行路径的相关语句,可以实现程序的各种控制结构。语言中包含有九种控制语句。分成三类介绍如下:(1)分支语句:if语句、switch语句;(2)循环语句:do-while语句、while语句、for语句;(3)跳转语句:break语句、continue语句、goto语句、return语句。分支和循环语句是程序中经常使用的,灵活熟练掌握其用法是本章的主要任务,后面会详细讲解。,4.1.2 C程序框架 一个C程序由若干源文件和头文件组成,称之为一个工程。头文件包括用户自定

4、义的和系统定义的,这两种都是由若干函数及全局量的声明和编译预处理组成,文件名一般是*.h。系统定义的如stdio.h,stdlib.h,string.h,math.h,limits.h等,其内容可以在本地安装有C编译器的机器中找到。一般在安装路径的包含文件夹内,如:Program FilesMicrosoft Visual StudioVC98Include。,4.2 分支结构,分支结构与顺序结构相对应,可以称之为判断结构或选择结构,也就是有选择地执行某些语句,改变了完全顺序执行的程序结构。在日常生活中的表达方式是:如果;那么。在计算机领域的基本表达方式是:如果条件成立,则执行操作1;否则条件

5、不成立,则执行操作2。其中,操作1,操作2可以是一条或多条语句。分支结构包含if和switch两个语句.,4.2.1 if语句的基本格式 语法格式如下:if()复合语句1 else 复合语句2 if 语句基本格式的语义是:如果条件表达式的值为真,则执行复合语句1,否则,即条件表达式的值不为真,则执行复合语句2。格式中“()”写法与“(!=0)”写法等价。,【例4.1】任意输入两个不同的整数,输出其中较大的一个。#includevoid main()c4:int x,y;c5:printf(n Input two numbers:n);c6:scanf(%d%d,使用if语句需要注意如下内容:(

6、1)从if 关键词开始到复合语句2结束,在语法上就是一条语句,虽然其中包含着两个复合语句,这并不矛盾。(2)if语句中的两个复合语句都可以由空语句,一个语句或者多个语句构成。仅包含空语句或一个语句时,一对大括号可以省略。此处增加大括号的好处是可以减少不必要的语法错误。(3)if语句中的条件表达式必需使用一对匹配的圆括号括起来。(4)条件表达式可以是逻辑表达式,关系表达式,算术表达式及赋值表达式等,单个变量构成的表达式也是正确的。只要表达式的值不是0值,条件即为成立。,【例4.2】判断某年份是否是闰年。满足以下两个条件之一的年份均是闰年:一是年份能够被4整除,但不能被100整除;二是能被400整

7、除的年份。,4.2.2 if语句的第二种格式 语法格式如下:if()复合语句 if 语句第二种格式的语义是:如果条件表达式的值不为真,则直接执行此if语句的下一条语句,否则,条件表达式的值为真,则执行其后的复合语句,复合语句执行完成后同样要执行if语句的下一条语句。,【例4.3】任意输入两个不同的整数,输出其中较大的一个。#include void main()c4:int x,y,max;c5:printf(n Input two numbers:n);c6:scanf(%d%d,4.2.3 if语句的嵌套形式可以写出如下几种嵌套形式的if语句:(1)在第二种格式的复合语句处嵌套第二种格式,

8、形如:if()其它语句1 if()复合语句2 其它语句2,(2)第二种格式嵌套第一种格式,形如:if()if()复合语句21 else 复合语句22,(3)第一种格式嵌套第二种格式,形如:if()if()复合语句2 else if()复合语句3,(4)第一种格式嵌套第一种格式,形如:if()if()复合语句21 else 复合语句22 else if()复合语句31 else 复合语句32,【例4.4】要求按任意顺序从键盘输入三个整数,编写程序完成输出最大值和最小值的算法。基本思路:首先任取其中两个数,判断最大和最小;使用例4.3的方法。其次,用第三个数分别与刚刚得到的最大和最小数再次比较,就

9、可以得到三个数中的最大和最小。,4.2.4 if语句的第三种格式其语法格式如下:if()复合语句1else if()复合语句2else if()复合语句3else if()复合语句melse 复合语句m+1,【例4.5】设计程序完成将百分制成绩转换成五分制表示。#include void main()char chscore;int nscore;printf(n please input Score(0 100):n);scanf(%d,else if(nscore 80)chscore=C;else if(nscore 90)chscore=B;else chscore=A;printf(

10、n Your Score is%c!n,chscore);return;,【例4.6】从键盘读取一个字符数据,判断其类型是:控制类字符,数字字符,大写字符,小写字符,其他字符等类别中的哪一类?设计程序完成。基本思路:读入字符数据,依据字符的ASCII值判断所属范围。,4.2.5 switch语句及break语句 switch语句的语法格式:switch()case:复合语句1 case:复合语句2 case:复合语句n default:复合语句n+1,下面使用switch语句改写例题【例4.5】。【例4.7】设计程序完成将百分制成绩转换成五分制表示。#include void main()c4

11、:int nscore;c5:char chscore;c6:printf(n input Score(0 100):n);c7:scanf(%d,/变换后,nscore 的值是010之间的整数,c9:switch(nscore)c10:c11:case 0:c12:case 1:c13:case 2:c14:case 3:c15:case 4:c16:case 5:chscore=E;c17:case 6:chscore=D;c18:case 7:chscore=C;c19:case 8:chscore=B;c20:case 9:c21:case 10:chscore=A;,c23:prin

12、tf(n Your Score is%c!n,chscore);c24:return;c23句输出chscore变量的当前值。编译运行此段程序应该是正确的。但是程序运行后,不管百分制成绩是多少,输出结果总是如下:Your Score is A!程序一定是存在问题。,这里说的流程控制语句,就是指跳转语句break。break语句的作用之一就是从某个case子句处跳出switch语句,继续执行switch的下一条语句。break语句还用于循环语句当中,后面介绍。例4.7的正确写法需要break与switch语句配合使用,程序如下:,#include void main()c4:int nscore

13、;c5:char chscore;c6:printf(n input Score(0 100):n);c7:scanf(%d,/变换后,nscore 的值是010之间的整数c9:switch(nscore)c10:c11:case 0:c12:case 1:c13:case 2:c14:case 3:,c15:case 4:c16:case 5:chscore=E;c16_1:break;c17:case 6:chscore=D;c17_1:break;c18:case 7:chscore=C;c18_1:break;c19:case 8:chscore=B;c19_1:break;c20:c

14、ase 9:c21:case 10:chscore=A;c21_1:break;c23:printf(n Your Score is%c!n,chscore);return;,【例4.8】设计能够完成单步四则运算的简易运算器,输出运算结果。,4.3 循环结构,C语言中的循环结构主要包括三个语句,分别是:while语句,do-while语句,for语句。每个语句各有自身的特点,学习时注意它们在构成循环结构时的异同。,4.3.1 while语句 while语句也可以称之为“当语句”。表达的含义是:当条件表达式的值为真(非0值)时,就执行循环体,之后重新判断条件表达式的值;如此重复多次执行循环体,直

15、到条件表达式的值为假(0值)时,while语句结束,顺序执行其后的下一条语句。使用流程框图表示如教材图4-8。,while语句的语法格式如下:while()复合语句其语义是:1.计算条件表达式的值;2.如果值为真(或者称为成立,或者非0),则按顺序执行复合语句;返回步骤1;3.如果值为假(或者称为不成立,或者0值),则执行while语句的下一条语句。,【例4.9】输出ASCII表的可见字符,字符之间用逗号分隔。可见字符的ASCII值在32126之间。#include void main()c4:int ch=32;c5:while(ch 127)c6:c7:printf(%c,ch);/输出字

16、符的同时,用逗号分隔不同字符c8:ch+;c10:return;,【例4.10】复制输入的一行字符串,并统计字符个数。可以使用getchar()函数获得键盘输入的一个字符。一行字符串的结尾是回车符(n)。由于系统提供了键盘缓冲区,所以能够实现复制字符串的效果。#include void main()int nCh=0;char ch;printf(input a string:n);while(ch=getchar()!=n)putchar(ch);nCh+;printf(n The number of char is:%d!n,nCh);,【例4.11】对例4.9改进,每行输出十个字符。#i

17、nclude void main()c4:int ch=32,i=1;c5:while(ch 127)c6:c7:printf(%c,ch);c8:if(i%10=0)c9:printf(n);c10:i+;c11:ch+;return;,4.3.2 do-while语句 do-while语句与while语句的区别之一是,条件表达式的计算与判断时机不同。首先看语法格式:do 复合语句 while();其执行过程是:首先执行复合语句,然后判断条件表达式是否成立,如若成立则再次执行复合语句,否则不成立时,do-while语句结束,执行下一条语句。其流程描述如教材图4-9.,【例4.12】求两个正整

18、数的最大公因子。此问题最著名的解法是欧几里德Euclid算法,也称之为辗转相除法。用自然语言描述如下:1.任意输入两个正整数m和n;2.求 r=m%n;3.如果r 等于0,则说明n是m的最大公因子,算法结束;4.否则 r不等于0,则将n赋值给m,r赋值给n;转2处继续。,#include void main()int m,n,r,m1,n1;printf(n input m,n:n);scanf(%d%d,【例4.13】任意输入一个整数,将其倒序后输出。如输入5678,则输出8765#include void main()int m,r;printf(n input an integer m:

19、n);scanf(%d,4.3.3 for语句 for语句是结构比较完备,使用比较灵活的,用于构造循环结构的语句之一。甚至可以取代do-while和 while 语句.语法格式为:for(;)复合语句 与do-while和while语句相比较,除了关键字不同之外,还多了两个表达式;而且表达式之间必须使用分号相分隔;即使某个表达式缺省,分号也不能少。表达式前面添加初值,条件和增量字样仅是为了表达各自的作用和功能。,for语句的执行步骤描述如下:1.计算初值表达式;2.计算条件表达式,若值为真(非0),则按顺序执行复合语句,之后执行步骤4;3.若值为假(0值),则转到步骤5;4.计算增量表达式;跳

20、转到步骤2;5.循环语句结束,执行其后的第一个语句。,【例4.14】求0到200累加和。#include void main()int sum=0,i;for(i=0;i=200;i+)sum+=i;printf(n The sum is%d!n,sum);,总结循环结构设计的一般步骤如下:1.选择恰当的循环变量;2.明确循环的结束条件;3.循环变量的增量(步长)如何变化;4.循环体包含哪些语句。【例4.15】分别打印输出Fabonacci数列的前20项。,【例4.16】任意输入一个整数m,判断其是否素数。#include int main()int i,m,isTrue=1;/m保存输入的整

21、数,isTrue=1首先认定输入的数是素数printf(n input a number n);scanf(%d,4.3.4 跳转语句1.break语句 从前面的叙述可知,break语句有两种用法:一是用在switch语句,结束分支语句,执行下一条语句;二是用在循环结构中,同样是结束循环,执行下一条语句。其语法格式如下:break;也就是关键字后面直接加一个分号构成。【例4.17】如下数列,求累加和sum大于5时,是第几项。,1/1,1/2,1/3,1/4,.,1/n下面给出使用break语句完成的算法。#include void main()int i;double sum=0.0;for(

22、i=1;i+)/*设置无限循环*/sum+=1.0/i;/求1/n的累加和 if(sum 5)/条件成立时,跳出循环 break;printf(n The No.is%d,The sum is%lf.n,i,sum);,2.continue语句 continue语句的作用是跳过循环中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。其语法格式如下:continue;,3.return语句语法格式如下:return;return语句一旦被执行,其作用有三:一是计算表达式的值;二是将表达式的值带回到函数

23、调用语句所在位置;三是结束当前函数的执行,即使return后面还有其它语句。如果表达式为空,则return语句的作用是结束当前函数的执行,并返回到函数调用语句处。注意表达式的值必须与函数返回值类型一致。举例说明如下:,int func1()c3:.c4:return 1*2;c5:.c6:c7:int main()c8:c9:int x;c10:x=func1();c11:.,4.4 循环的嵌套,从判断语句可以包含判断语句的事实,推而广之,循环语句的循环体既然是复合语句,当然有循环语句的嵌套形式。也就是每一种循环语句的循环体内,均可以包含有三种循环语句的任何一种。为了叙述方便,定义单层循环是循

24、环体内不包含循环语句的结构;双层循环是循环体内仅包含单层循环的结构形式;三层循环就是双层循环内又包含单层循环的结构形式。四层以上的循环很少有应用。,【例4.18】请设计程序完成,统计100以内的全部素数的个数;并输出最大的素数。,总结一下:双层循环的嵌套形式共可分9种,这里仅以for作为外层循环为例,以while和do-while为外层循环的嵌套与此相似。1.for-for嵌套for(;)/各个表达式均被省略了,以下相同/其它必要的语句 for(;)/内层循环体/必要语句,2.for-while嵌套for(;)/其它必要的语句 while()/内层循环体/必要语句,3.for-do-while

25、嵌套for(;)/必要的语句 do/内层循环体 while();/必要语句,【例4.19】请设计程序输出如下图形。*,【例4.20】设计程序完成,输出等腰三角形的图形如下:*,【例4.21】设计程序输出y=cos(x)的图像。由于有字符窗口的限制,只能将cos(x)的图像顺时针旋转90o输出,也就是屏幕向右的方向设为y轴正向,屏幕向下的方向设为x轴的正向。另外,屏幕宽度一般是80个字符,所以将x轴设定在屏幕的40列位置处。x值从0o开始,间隔15o取值,到360o结束。cos(x)的值在-1到+1之间变化,为了比较好地反映值的变化情况,特别将y值放大35倍,并向屏幕的右侧移动40个字符,使之介

26、于5到75之间。,【例4.22】百马百担问题。共有100匹马,要驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担,求大、中、小马各有多少匹?解决此问题,不妨设大、中、小马各有x,y,z匹。可以列 出方程组如下:x+y+z=100(1)3*x+2*y+0.5*z=100(2),4.5 常见的错误,1.在条件表达式中,将=误写为=。例如:if(year%4=0&year%100!=0)|(year%400=0)此处产生的错误是:error C2106:=:left operand must be l-value。是由于将=误写为=造成的。2.将数学中的不等式写法,直接应用于程序设计之中。例如:(x y z)/正确的写法是(x y&y z)3.else子句之前的语句缺少分号。,4.case子句缺少匹配的break语句。5.case子句的常值重复出现。6.括号不匹配。建议书写程序时不管大括号,方括号,圆 括号均要成对输入。7.误写空语句。例如:while(ch=getchar()!=n);putchar(ch);while语句同一行的分号是误写的,但是编译系统却错误理解为循环体是空语句。所以得不到希望的运行结果,因为putchar(ch)仅被执行一次。而这样的错误有时是很隐蔽的。,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1