第3章 程序的控制结构及结构化程序设计方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3 选择结构程序设计
算法(用自然语言描述)
例3.6 2 编程计算一元二次方程ax+bx+c=0的根,a,b,c由键 盘输入,其中,a!=0。
Step1:输入系数 a,b,c; 2 Step2:计算判别式:disc=b-4ac; b b 2 4ac q Step3:计算p和q,其中: p 2a 2a Step4:若a==0,则输出“不是二次方程”; Step5:若disc>0,则计算并输出两个不相等的实根: x1=p+q,x2=p-q; Step6:若disc=0,则计算并输出两个相等的实根: x1=x2=p; Step7:若disc<0,则计算并输出两个共轭复根: x1=p+qi,x2=p-qi; 程序见eg3_6
四、伪代码表示: 伪码是指介于自然语言和计算机语言之间的一种代码, 是帮助程序员制定算法的智能化语言,它不能在计算机上 运行,但是使用起来比较灵活,无固定格式和规范,只要 写出来自己或别人能看懂即可,而且比较容易转换为计算 机程序。
3.1.3 算法的表示方法
例:用伪码表示的计算n!的算法 input n if n<0 print “input error!” goto end else fac=1 i=1 loop: fac=fac*i i=i+1 if i<=n goto loop print fac end
3、有效性:每一步都应当能有效地进行并得到确定的结果。
4、有0个或多个输入。 5、有1个或多个输出。
3.1.2 简单算法举例
例1:求12345。
算法一: S1:求12 ,得2; 算法二: S1:p=1
S2:将S1得的2再乘3,得6;
S3:将S2得的6再乘4,得24; S4:将24再乘5,得120,结果。
S3:s=s+n
S4:n=n+2 S4:n=n+1
<100,返回到S3, S5:若n 100,返回到S3, 否则结束。
3.1.2 简单算法举例
例3: 求1-2+3-4……-100 算法: S1:sign=1 S2:n=2 S3:s=1 S4:sign=(-1) sign S5:s=s+sign n
Y
S4:i+1 i
S5:若i 5,返回S3,否则 结束,得出结果 p为5!。
P=P*i
i=i+1 打印P
结束
3.1.3 算法的表示方法
三、N-S结构化流程图 取消改进流程图中的流程线,这种算法被迫只能从上到下顺 序执行,从而避免了算法流程的任意转向,保证了程序的质量。 优点:既形象直观,又节省篇幅,基本结构及算法的表示均在 一个矩形框内,尤其适于表示结构化程序的设计。 所谓结构化程序设计就是由基本结构顺序组成的,基本结 构之间无跳转。
3.1.1 算法的概念
算法的组成要素: 1、操作:各种运算。
如:算术运算、逻辑运算、关系运算等。
2、控制结构:操作序列的顺序控制。
三种基本控制结构,即:
顺序结构、选择结构、循环结构。
3.1.1 算法的概念
算法的特性:
1、有穷性:在有限的时间内,操作步骤能够终止。
2、确定性:每一步操作的含义必须明确。
3.3 选择结构程序设计
算法1:用不带else子句的if语句编程。 程序见eg3_5_1 算法2:用在if子句中嵌入if语句的形式编程。
N-S流程图:
输入身高h和体重w 计算体指数t
Y Y Y
程序见eg3_5_2 t<18 t<25
t<27
N
N
肥胖体重 超体重
N
低体重
正常体重
3.3 选择结构程序设计
Y
程序见eg3_4_1 输出his
N
3.3 选择结构程序设计
算法2: 用带有else子句的if语句编程。 N-S流程图: 读入 yours,his Y yours>=his 输出his N
输出yours
程序见eg3_4_2
3.3 选择结构程序设计
算法3: 用条件表达式实现。 条件表达式: 表达式1 ? 表达式2 : 表达式3 N-S流程图: 读入 yours,his Y yours>=his max=his N
例3.2:任意从键盘输入一个三位整数,要求正确分离出它的 个位、十位、百位数,分别在屏幕上输出。 算法: Step 1:输入一个三位整数x; Step 2:计算最高位b2=x÷100;
Step 3:计算中间位b1=(x-b2×100) ÷10 或 b1=(x÷10)%10; Step 4:计算最低位b0=x%10 或 b0=x-b2×100-b1×10; Step 5:输出分离结果;
if 形式 if(表达式) 语句A 适合于解决单分支选择问题
表达式 真
假
语句
if ~ else 形式 if(表达式)语句1 else 语句2 适合于解决双分支选择问题
真
表达式
假
语句1
语句2
3.3 选择结构程序设计
else~if 形式
表达式1
假
if(表达式1) 语句1 else if(表达式2) 语句2 …
返回
3.3 选择结构程序设计
选择结构的应用场合 当需要根据不同的判断条件执行不同的操作时。
计算一元二次方程 ax +bx+c=0的根
b - 4ac>0 有两个不相等的实根 2 b - 4ac=0 有两个相等的实根 2 b - 4ac<0 有一对共轭复根
2
2
若输入的三角形三边能构成一个三角形,则计算三角形面积 计算分段函数的值 y= e 1 x -e
真
表达式2
真
假
表达式3
真
假
else if(表达式m) 语句m else 语句m+1
适合于解决多分支选择问题
语句1
语句2
语句3
语句4
3.3 选择结构程序设计
例3.4 从键盘输入你和你朋友的年龄,编程判断谁的年龄 最大,并打印他的年龄。
算法1: 用不带else子句的if语句编程。 N-S流程图: Y 输出yours his>yours 读入 yours,his yours>=his N
A B
N-S流程图:
A B
3.2 顺序结构程序设计
三、应用举例:
例3.1:假设银行定期存款的年利率r为2.25%,存款期为n年, 存款本金为m元,求n年后可得到的本利之和。 用N-S图表示的算法: 输入n和m的值 利用公式total=m*(1+r) 计算本利之和total 输出计算结果total
n
算法3:用在else子句中嵌入if语句的形式编程。 N-S流程图: 输入身高h和体重w 计算体指数t
Y
t<18
N
t<25
Y
低体重
N
t<27
正常体重
Y
N
超体重
肥胖体重
程序见eg3_5_3
3.3 选择结构程序设计
使用if-else语句应注意的事项
当需要多条语句时必须用复合语句,即把要执行的多 条语句用一对大括号括起来。 if子句中内嵌if语句时,else子句总是与它前面最近的 且没有配对的if相结合,而与书写的缩进格式无关。 为避免错误,有两个办法: 1、if子句中内嵌的 if 语句用一对大括号括起来; 2、尽量采用在 else 子句中内嵌 if 语句的形式编程。
(2)只有一个出口 (3)结构内的每一部分都有机会被执行
(4)结构内不存在“死循环”
3.2 顺序结构程序设计
一、顺序结构概念: 顺序结构是最简单的C语言程序结构,也是C语言程序中 最常用的程序结构,主要由表达式语句组成。 特点: 完全按照语句出现的先后顺序执行程序。
3.2 顺序结构程序设计
二、顺序结构流程图表示: 传统流程图:
返回
3.2 顺序结构程序设计
三种基本结构: 为了使流程图便于理解和阅读,限制无规律的任意转 向,结构化程序设计规定了三种基本结构,即:顺序结构、 选择结构、循环结构。然后由这些基本结构按一定规律组 成一个算法结构,整个算法的结构由上而下地将各个基本 结构顺序排列起来的。 三种基本结构的特点:
(1)只有一个入口
3.1.3 算法的表示方法
例1中求5!用N-S图表示:
p=1 i=2 p=p*i i=i+1 直到 i>5为假 打印p
用C实现
main( ) { int i,p; p=1; i=2; do { p=p*i; i=i+1; }while(i<5) printf(“%d”,p); }
3.1.3 算法的表示方法
S2:i=2
S3:p =pi S4:i=i+1 S5:若i5,返回S3, 否则结束,得出结果 p为5!。
比较两个算法: 算法一:繁琐,数目大时步骤太多。
算法二:利用循环算法,借助两个变量,可求任意数的阶乘,提高通用性。
3.1.2 简单算法举例
例2: 求1+2+3+4……+100
算法:
S1:n=2 S1:n=1 S2:s=0 思考: 1+3+5+7+……+99 2+4+6+8+…..+100
max=yours
输出max 程序见eg3_4_3
3.3 选择结构程序设计
例3.5 体型判断。判断某人是否属于肥胖,可根据身高 与体重等因素来判断,按照“体指数”对肥胖程度进 行划分: 2 体指数t = 体重w /(身高h ) (其中,w单位为kg,h单位为m) 当 t<18 时,为低体重; 当 t介于18和25 之间时,为正常体重; 当 t介于25和27 之间时,为超重体重; 当 t>27 时,为肥胖。
b 2 4ac q 2a
x2 p q
3.2 顺序结构程序设计
算法: Step 1:输入a,b,c;
Step 2:计算判别式disc = b - 4ac;
Step 3:由于以假设判别式>0,所以可直接按求根公式 计算两个实根x1和x2; Step 4:输出x1和x2;
2
程序见eg3_3
3.2 顺序结构程序设计
程序清单: #include <math.h> main( ) { int m,n; float r=0.0225,total; printf(“Please enter n,m:”); scanf(“%d,%d”,&n,&m); total=m*pow(1+r,n); printf(“Total=%f\n”,total); } 运行结果: Please enter n,m:1,500 Total=511.250000
3.2 顺序结构程序设计
C程序结构框架:
以#开始的编译预处理命令行 main( ) { 局部变量说明语句;
执行语句序列;
}
注: 编译预处理命令不是C语 句,每条指令单独占一行, 同一行不能有其它的编译指 令或C语句。
包含头文件的方式:#include <文件名> #include “文件名”
3.2 顺序结构程序设计
第三章 程序的控制结构与 结构化程序设计方法
3.1 算法与算法的表示方法
3.2 顺序结构程序设计
3.3 选择结构程序设计
3.4 循环结构程序设计
3.1 算法与算法的表示方法
本章主要内容: 1.了解算法的表示方法及其在程序设计中的重要地位. 2.掌握 C 语言的基本控制结构和基本控制语句. 3.掌握用 C 语言的基本控制语句进行顺序,选择和 循环结构程序的设计. 4.掌握一些常用的算法,如递推法,迭代法,穷举法等. 5.了解结构化程序设计的基本思想
-x
x>0 x=0 x>0
3.3 选择结构程序设计
选择结构的流程图表示
入口 真 假 真
P
P A B
假
A
B
出口
N-S 流程图
传统流程图
3.3 选择结构程序设计
选择结构种类
单分支的选择结构 双分支的选择结构 多分支的选择结构 嵌套的if语句或switch语句
3.3 选择结构程序设计
条件语句
3.1.1 算法的概念
数据结构 + 算法 = 程序 数据结构:对数据的描述和组织形式, 算法:对操作或行为的描述,即操作步骤。 算法——为解决一个具体问题而采取的确定的有限的操 作步骤。 算法分类: 数值运算算法:解决的是求数值解的问题。
非数值运算算法:主要解决关于分析推理、逻辑推理等
问题,如排序、查找等。
程序见eg3_2
3.2 顺序结构程序设计
例3.3:编程计算方程ax 2+bx+c=0的根,a,b,c 由键盘输入, 2 假设b -4ac> 0。 分析: 一元二次方程的求根公式:
x1, 2
b b 2 4ac b b 2 4ac 2a 2a 2a
b p 2a x1 p q
S6:n=n+1
S7:若n 100,返回到S4,
否则结束。
3.1.3 算法的表示方法
一、自然语言表示 二、流程图表示
处理框
输入输出框
起止框
判断框
连接符
流程线
3.1.3 算法的表示方法
例wenku.baidu.com中求5!的算法用流程图表示:
算法: 开始 P=1 i=2 p
N
S1:p=1
S2:i=2 S3:p i
i5