版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1C程序设计Ch分支实用2
分析问题确定算法编写程序
调试程序整理结果第1页/共46页3NiklausWirth公式:
程序=数据结构+算法第2页/共46页4程序=
数据结构+算法+程序设计方
法+语言工具+程序设计人员第3页/共46页5§3.1
算法第4页/共46页6一、算法概念1.算法概念算法:解决问题的方法与步骤。如:某菜品制作步骤就是加工该菜肴的算法;
乐谱就是演奏某乐曲的算法;
太极拳动作图解就是打太极拳的算法。例1(清华P14例2.2)写出输出50个学生成绩中大于等于80分者的算法。假设:i为学生人数
ni为第i个学生的学号
gi为第i个学生的成绩第5页/共46页7则算法如下:S1:1iS2:输入ni,gi的值S3:如果gi≥80,则输出ni,gi的值,否则不输出S4:i+1iS5:若i≤50,则返回S2;否则算法结束2.算法优劣标准:
正确、简单3.算法种类:数值计算算法与非数值计算算法
(清华P14)第6页/共46页8二、算法特性(清华P18)1.有穷性2.确定性(无歧义性)3.有效性4.有零个或多个输入5.至少有一个输出三、算法的组成要素(高教P56)1.操作(算数运算、逻辑运算、关系运算、函数运算、位运算、I/O操作等)2.控制结构(顺序结构、选择结构、循环结构)第7页/共46页9四、算法的描述(清华P19,高教P57)1.用自然语言描述算法2.用传统流程图描述算法(组成元件见清华P19图2.3)
例2(清华P20例2.7/高教P59求n!)
例3.用传统流程图描述求解两个整数中的最大值的算法。第8页/共46页10
例3.
开始定义inta,b,ca>b输入a,b的值acbc输出c的值结束第9页/共46页113.用N_S流程图描述算法(组成元件见清华P20图2.24至2.27/高教P59图3.6)
例4.
用N_S流程图描述求解两个整数中的最大值的算法。例5.(例1的N_S图)定义inta,b,c输入a,b的值a>bacbc输出c的值yn定义inti,ni,gi输入ni,gigi≥80i+1i1i输出ni,giyn当i≤50例4例5第10页/共46页124.用伪代码描述算法用伪代码描述算法就是用介于自然语言与计算机语言之间的文字与符号来描述算法。例6.(对应例5)
BEGIN1iwhilei≤50{inputni,giifgi≥80printniandgii+1i}
END第11页/共46页135.用程序设计语言描述算法计算机无法识别流程图和伪代码,只有用程序设计语言描述的算法,才能被计算机执行、实现。与伪代码不同,用程序设计语言描述算法时,必须严格遵守所用语言的语法规则。例7.
(例6中算法的C语言描述.高教P61例3.1类似)main(){inti=1,n,g;while(i<=50)
{scanf(“%d%d”,&n,&g);if(g>=80)printf(“%d,%d\n”,n,g);i=i+1;}
}第12页/共46页14§3.2
结构化程序设计方法第13页/共46页15一、程序设计方法及其发展二、结构化程序设计方法1.结构化程序设计方法(功能抽象,化整为零,逐步细化)2.结构化程序设计原则(高教P61例3.1后归纳总结)(1).模块化
(2).自顶向下
(3).逐步求精3.结构化程序的特点
(1).由三种基本结构顺序组成(清华P28)(2).每个程序块只有一个入口和一个出口
(3).没有死语句(执行不到的语句)
(4).没有死循环设计的模块化。划分模块时,模块的独立性要强;扇出数要恰当(2—5个,≤9个);大小要适中(50——100条语句,≤500条)。编码的结构化。应选择结构化程度高的程序设计语言编码。第14页/共46页164.三种基本结构(图示其传统框图和N_S图。高教P58)
(1).顺序结构
(2).分之结构(单分支、二分支、多分支)(3).循环结构(当型循环、直到型循环)任何一个结构化程序都由这三种基本结构顺序组成,在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构之内。第15页/共46页17§3.3
C程序整体结构与C语句第16页/共46页18一、C程序整体结构
……
……
C程序源程序文件2源程序文件n函数1源程序文件1预处理命令全局变量声明函数n函数说明部分函数体局部变量声明执行语句第17页/共46页19二、C语句(个高教P64,P68图示)1.控制语句(清华P68,9种,控制程序流程)2.函数调用语句(由一次函数调用加;构成)如:printf(“%d”,32+5);3.表达式语句(由一个表达式+;构成)如:x=3;4.空语句(由一个;构成):;5.复合语句(花括号括起的多个语句)如:{intx,y;x=2;y=3;}第18页/共46页20§3.4三种基本控制结构程序设计第19页/共46页21§3.3.1
顺序结构程序设计
(按语句出现的先后顺序执行,高教习题)例1.从终端输入三角形三边的值(假设能构成三角形),求三角形的面积.设a,b,c,s,area分别为三边,半周长和面积,则
area=s=(a+b+c)/2框图和程序如下:第20页/共46页22
开始输入a,b,c
(a+b+c)/2
s
area
输出area
结束#include<math.h>main(){floata,b,c,s,area;printf(“Inputa,b,c:\n”);
scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%f\n”,area);}第21页/共46页23§3.3.2分支结构程序设计(根据一定的条件有选择地执行)一、if语句的三种形式1.if(表达式)语句__单分支结构
表达式
0
非0语句如:if(x>y)z=x;说明:①格式中的”语句”称为if语句的内嵌语句.②内嵌语句只能是一个语句;若有多个,应用大括号括起来,成为一个复合语句.if(x>y){z=x;x=y;}第22页/共46页24③内嵌语句可以是空语句.if(x>y)
;
特别:if(x>y)z=x;
可以写成:if(x>y)
z=x;
但不能写成:
if(x>y);
z=x;
④格式中的”表达式”
一般是表示条件的逻辑表达式或关系表达式,但它可以是任意的数值类型的表达式(整型,实型,字符型等)
如if(32)printf(“OK!\n”);if(‘a’)printf(“%d\n”,’a’);都是正确的
第23页/共46页25例2.输入二整数,求a,b中的最大值,并放在maxv中。main(){inta,b,maxv;scanf(“%d%d”,&a,&b);maxv=a;
if(a<b)maxv=b;printf(“max=%d\n”,maxv);}
开始输入a,bamaxv
a<b
非0bmaxv
输出maxv
结束0成本P29例3.4第24页/共46页26例3.输入三个数,使它们按由小到大的顺序输出.三个数由x,y,z输入temp为中间变量按比较交换法排序板书算法框图根据框图写出程序如右main(){floatex,y,z,temp;
scanf(“%f%f%f”,&x,&y,&z);
if(x>y){temp=x;x=y;y=temp;}if(x>z){temp=x;x=z;z=temp;}if(y>z){temp=y;y=z;z=temp;}Printf(“%f,%f,%f\n”,x,y,z);}成本P30例3.6,高教习题第25页/共46页272.if_else(二分支结构)
格式:if(表达式)语句1else语句2
功能:
根据条件控制程序流程
表达式
语句1语句2非00说明:①格式中if语句,else语句的内嵌语句均可以是空语句,也可以是复合语句,还可以是分支语句②语句1与语句2只能被执行其一.第26页/共46页28例4.用if_else结构改写例2中的程序main(){inta,b,maxv;scanf(“%d%d”,&a,&b);
if(a<b)maxv=b;
elsemaxv=a;printf(“max=%d\n”,maxv);}思考:①如果第五行中没有else会怎样?
②可否将if和else的内嵌语句改为输出语句?第27页/共46页29例5.(高教P69例3.3)例6.(新清华P95例5.3)有一函数:输入一个x值,输出相应的y值.以下程序中哪些能输出正确结果?Why?程序1:main(){intx,y;scanf(“%d”,&x);
if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“%d,%d\n”,x,y);}程序2:将程序1中的if语句改为:if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;第28页/共46页30程序3:将程序1中的if
语句改为:y=-1;if(x!=0)if(x>0)y=1;elsey=0;程序4:将程序1中的if
语句改为:y=0;if(x>=0)if(x>0)y=1;elsey=-1;分析之,并据程序画出相应的框图.注意:
①
if和else的内嵌语句后都必须有分号;②
else子句不能单独使用,必须与if语句配对使用:从最内层开始,与前面最近的if配对.
高教P70例3.4第29页/共46页313.if_elseif(多分支结构)格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3
…………
elseif(表达式n-1)语句n-1
else语句n第30页/共46页32功能:根据条件控制程序流程
表达式1
表达式2
表达式n-1
语句1语句2语句n-1语句n………非00非0非0000第31页/共46页33例7.某运输公司运费规定如下(cost为运费,x为距离)0x≤500.05x>50cost=0.075x>1000.10x>3000.15x>500根据距离远近,输出运费.程序如右:main(){intx;floatcost;scanf(“%f”,&x);if(x<=50)cost=0;elseif(x<=100)cost=0.05;
elseif(x<=300)cost=0.075;
elseif(x<=500)cost=0.10;
elsecost=0.15;printf(“%d,%f\n”,x,cost);
}思考:该程序中的if结构可否有其他表述形式?第32页/共46页34例8(成本P36例3.11)输入一个简单表达式,形如:
操作数运算符操作数如:32*56
输出该表达式的值。
main(){floatvalue1,value2;charoperator;printf(“typeinyourxpresssion.\n”);scanf(“%f%d%f”,&value1,&operator,&value2);第33页/共46页35if(operator==‘+’)printf(“%f\n”,value1+value2);else
if(operator==‘-’)printf(“%f\n”,value1-value2);
elseif(operator==‘*’)printf(“%f\n”,value1*value2);
elseif(operator==‘/’)if(value2==0)printf(“divisionbyzero.\n”);elseprintf(“%f\n”,value1/value2);
elseprintf(“unknwonoperator.\n”);}第34页/共46页36说明:①格式中if语句,else语句的内嵌语句均可以是空语句,也可以是复合语句,还可以是分支语句②语句1,语句2,……,语句n只能被执行其一.③if和else的内嵌语句后都必须有分号;④
else子句不能单独使用,必须与if语句配对使用:从最内层开始,与前面最近的if配对.⑤当if或else后又含有一个或多个if语句时,称为if语句的嵌套第35页/共46页37二、if语句的嵌套一般形式如下:if(){……if()语句1else语句2
……}else{……if()语句1else语句2
……}内嵌if内嵌if例.下面程序段试图使第三行的else与第一行的if配对,能否实现?怎样实现?if()if()语句1elseif()语句2else语句3高教P70例3.4与此例类似,其正确程序见P72第36页/共46页38对于if语句的嵌套,应特别注意else与if的配对关系:从最内层开始,else与前面最近的if配对.一般应遵循如下原则:①内嵌的if语句最好含有相应的else语句,使if和else的数目相同,一一对应。
例9:高教P72例3.5or
清华P59例5.3程序1②如果if和else的数目不相同,可使用大括号来确定配对关系。
如上例和高教P72例3.4的正确程序③只嵌套在else子句中,构成if_elseif结构。高教P74例3.6第37页/共46页39三、switch语句格式:
switch(表达式){case常量表达式1:语句1case常量表达式2:语句2
………………case常量表达式n:语句ndefault:语句n+1}第38页/共46页40说明:①switch后的表达式可以是整型字符型和枚举型数据②各case后的表达式必须为常量表达式;
如:可以3+6,但不可以3+x③各case子句后的语句i可以是空语句,也可以是复合语句,并可缺省其大括号;
如:case‘A’:x=90;printf(“%d”,x);④各case子句的前后顺序可以任意;⑤
default子句可以没有;⑥一个switch结构的case子句和default子句必须用大括号整体扩起来。第39页/共46页41功能:根据switch后表达式的值是否与某case
后常量表达式的值相等,确定程序流程NS图:表达式常量表达式1常量表达式2……常量表达式n否则语句1,……语句n+1语句2,……语句n+1……语句n,语句n+1语句n+1第40页/共46页42注意:
①任二case子句后的常量表达式的值不相等,否则会导致相同条件出现两种甚至多种执行方案的矛盾②多个case子句可共用一组执行语句;且除该组最后一case子句,前面若干case子句的执行语句可缺省不写如:…………case‘A’:case‘B’:case‘C’:printf(“>60\n”);break;…………第41页/共46页43③执行完一个case子句后,流程转移到下一case子句继续执行,若只需执行一个语句后退出switch结构,可以在该case子句的执行语句序列最后使用break语句。例10.清华P75例3.7main(){floatvalue1,value2;charoperator;printf(“typeinyourexpresssion.\n”);scanf(“%f%d%f”,&value1,&operator,&value2);例11.(用switch结构改写例8)
第42页/共46页44{case’+’:printf(“%f\n”,value1+value2);break;case’-’:printf(“%f\n”,value1-value2);break;case’*’:prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结构性心脏病介入治疗规范化诊疗业务学习
- 《中小学学生学籍管理办法(2026年)》
- 外墙涂料施工工艺及质量控制指南
- 农林牧渔企业信息公开工作规范落实自查自纠整改复查报告
- 2025年东昌府区柳园街道招聘社区网格员考试试题附答案详解
- 某人防工程监理实施细则
- 乡村兽医培训考试试题
- 法制宣传日宣传活动总结
- 公司文职人员试用期转正工作总结
- 活动宣传方案
- 2026贵州省住房资金管理中心招聘工作人员1人备考题库含答案详解(考试直接用)
- 2026储能入市背景下的投资测算工具设计逻辑深度研究报告
- 2026四川省阿坝州州级事业单位考试调动37人重点基础提升(共500题)附带答案详解
- 2026湖北神农架林区公安局招聘辅警22人笔试参考题库及答案解析
- 2026学校规范教育收费自查整改报告
- 2026中华全国供销合作总社直属事业单位招聘27人考试参考题库及答案解析
- 事故隐患排查治理基本知识
- 煤矿防治水知识培训
- 科学学习方法小学主题班会课件
- 2026江铜铜箔科技股份有限公司第一批次春季校园招聘89人建设笔试参考题库及答案解析
- 2026年建安杯信息通信建设行业安全竞赛重点题库(新版)
评论
0/150
提交评论