程序设计基础知识
主要内容: 1、程序设计概述(理解) 程序、程序设计语言的概念 程序设计的一般过程 如何学习程序设计 2、算法(熟悉) 3、结构化程序设计方法(了解)
1.1 程序设计概述 一、概念: 1、程序:程序是为解决某一问题而编写的语句序列。通俗的说,将解决一个实际问题的具体操作步骤用某种计算机语言描述出来,就形成了程序。
例如:判断输入的任意整数n能否被3整除,程序如下: (C语言) main() { int n; printf("\n enter a integer:"); scanf("%d", &n); if( n%3==0) printf("\n %d can be divided by 3" , n); else printf("\n %d can't be divided by 3", n); }
2、程序设计语言:即计算机语言 分类: 机器语言:用计算机能直接理解和执行的“0”和“1” 表示各种操作的程序设计语言,很难使用。 汇编语言:用助记符号来表示各个基本操作的程序设计语言 ,如 add r1, 4 高级语言:用接近自然语言和数学语言的语法符号描述基本操作的程序设计语言
二、程序设计的一般过程 用计算机解决问题的基本过程如图1.1所示: 对于简单问题,前三步可看作一步,即分析问题、设计算法。
程序设计的基本过程 (1)分析要解决的问题,明确任务。 即分析要处理的数据是什么,从哪里来,作怎样的处理,结果送往那里。 例如:求学生的平均成绩。 分析该问题,明确它有三项功能: 输入学生成绩、求平均成绩、输出结果; 要处理的原始数据为:学生的成绩; 要进行的处理为:求平均; 结果为:平均值,送屏幕显示或保存于文件中。
(2)分析问题,建立数学模型,并选择合适的解决方案 例如:分析求平均成绩的处理过程,可以将数据的具体含义去掉,抽象为:计算一批数据的平均值。 (3)确定数据结构和算法 :数据结构及数据的组织方式,算法是对数据处理过程的具体描述。不同的数据结构对应不同的算法。 例如:有一堆盒子,上面有编号(设编号为两为数字),要查找某个编号的盒子,如何实现? 方法1:若该堆盒子已排成一队,则可以从第一个开始逐个比较,直至找到或找完为止。 方法2:若该堆盒子已按编号排成多队,每一队的高位数字相同,则可以根据要找的盒子的高位直接确定他在那一队,然后在该队中再逐个查找。 由此可见,只有先确定了数据结构,才能设计相应的算法。
(4)编码:即编写程序 。 用某种计算机语言将上一步设计好的算法描述出来,就是程序。 可见,算法是编程的基础。 (5)调试程序:将源程序送入计算机,进行排错、试运行,调试的结果是得到一个能正确运行的程序。 通常,调试程序至少占整个程序设计工作量的一半。 (6)整理资料,交付使用
三、学习程序设计的方法 1、一讲、二练、三考 2、多读源程序、多编写程序、多上机调试 3、忌上课只听不记、忌“纸上谈兵”、忌课下不练习 具体要求: 1、上课有重点、有选择的记 2、上机有准备:准备好课本、笔记、作业等 3、除课后习题必须全部解决外,多做一些二级考试的模拟题 4、做一个自己感兴趣的完整的程序(小项目)
1.2 算法及其描述 一、算法: 对解决某一特定问题的操作步骤的具体描述。 广义的说,算法就是为解决一个问题而采取的方法和步骤。 1.2 算法及其描述 一、算法: 对解决某一特定问题的操作步骤的具体描述。 广义的说,算法就是为解决一个问题而采取的方法和步骤。 程序=算法十数据结构 就是说:“程序是在数据的特定的组织方式的基础上,对抽象算法的具体描述”。作为程序设计人员,在设计算法前,必须认真考虑和设计数据的组织方式,即数据结构;然后针对具体的数据结构设计相应的操作步骤,即算法。
二、算法的描述 描述算法的方法有多种,常用有: 自然语言(描述不够严格,限于简单问题) 流程图* (同一问题的流程图不唯一) 流程图* (同一问题的流程图不唯一) N-S 图* (结构清晰,但难于修改) PAD图 (结构清晰,唯一性好) 伪代码* (灵活,但需要有一定的程序设计基础) 学习建议: 流程图或N-S图一定要熟练掌握,伪代码表示法在学习完基本的流程控制语句后也经常使用。
1、用自然语言描述 例1. 1 计算任意长方形的面积。 分析: 要实现的功能有: 输入长和宽,计算面积,输出结果。 先定义数据结构:程序中要处理的数据有三个,即长、宽、面积,设分别用实型变量length、width、area表示。则算法如下: ①输入长和宽分别存入length, width ②计算面积:length×width => area ③输出结果area
例1. 2 计算s1+s2+s3+s4+s5(其中si表示第i个数)。 先定义数据结构: 设变量 s 表示累计和,初值为0; 变量 x 表示每次要处理的数据(s1~s5中的一个); 变量 i 表示要处理第几个数(其取值范围可以是:1~5),设初值为1。
例1.2算法 根据以上定义,算法设计如下: S1: 赋初值 0=>s S2: 赋初值 1=>i S3: 输入第i个数x S4: 累加:s+x=>s S5: 计数增值:i+1=>i S6: 若i≤5,表示数据还未处理完,返回 S3 继续重复S3、S4、S5;否则,计算结束,执行S7。 S7:输出结果 s。
例1. 4 判断任意整数是奇数还是偶数。 分析:设整型变量 n 表示要处理的整数, 则算法为: 首先输入n, 然后判断条件“n%2等于0”(%是求余运算符)是否成立, 若条件成立,则输出“n是偶数”; 否则输出“n是奇数”。
2、用流程图表示算法 流程图是用几种图形、箭头线和文字说明来表示算法的框图。 流程图中规定使用的符号如图1.2所示 用流程图的优点是:直观形象、易于理解,能将设计者的思路清楚地表达出来,便于以后检查修改和编程。
结构化的流程图:即一个流程图由三种基本结构(顺序、选择、循环结构)组成,这三种基本结构可以相互嵌套,组合成复杂的算法。
注:P表示条件,A、B表示一个基本操作或一个基本结构。
例1. 3 计算长方形的面积(用流程图表示的算法如图1.4所示)。
例1. 4 判断任意整数是奇数还是偶数。
3. 用N-S图表示算法 用N-S图表示的三种基本结构
1.3 结构化程序设计 结构化程序设计思想包括两个方面的内容: 模块化设计和结构化编码 特点: 1.3 结构化程序设计 结构化程序设计思想包括两个方面的内容: 模块化设计和结构化编码 特点: 结构化的程序结构清晰,层次分明,便于程序员编写、阅读和修改,提高了程序的可靠性,保证了程序的高质量、高效率。 为了得到结构化的程序,必须强调程序设计的规范化,采用结构化的程序设计方法。
1. 模块化设计方法 自顶向下,逐步细化。(常用) 其基本思想是:将一个复杂的大任务分解为若干个较小的任务,如果这些子任务还较复杂,再将其进行划分,直到每个任务都能很容易的实现其具体细节,然后“分而治之”,即分别实现各个小任务。这样,对一个大任务的处理就变成了对一个个小任务的实现,使问题变得相对简单了。 例学生管理系统。 自下而上,逐步积累。(不常用)
例:学生管理系统。 … … … 学生管理 成绩管理 学籍管理 宿舍管理 档案管理 成绩输入 成绩统计
2. 结构化编码 用结构化的程序设计语言(如C语言)正确地描述算法,就是结构化编码。 C语言中有直接描述三种基本结构和基本操作的语句,用这些语句将算法表示出来,就是C的源程序。