1、模块1 程序设计基础知识,程序设计方法(C&C+),2,程序设计方法(C&C+),主讲教师:高飞 授课对象: 2010级本硕博班 总课时:64学时(理论教学48,上机编程16) 上课时间:星期一第七、八节星期三第五、六节 上课地点:良乡1 - 104 教室,3,程序设计方法(C&C+)教材与教学参考书,教 材:C/C+程序设计教程国防工业出版社 梁成升编 参考书:C语言程序设计教程北京理工大学出版社 李凤霞编C+与数据结构北京理工大学出版社 高飞编C+与数据结构实验教程北京理工大学出版社 苏京霞、高飞编 上机环境: Visual C+,4,期末考核方法,平时作业 网络教室http:/ 期末成绩
2、由两部分组成 平时作业与上机成绩20分。以网络教室中提交的作业为准。 期末考试成绩80分。其中理论部分40分,编程部分40分。在网络教室中进行。,5,程序设计方法(C&C+)教学目标,掌握C&C+语言的基本语法和规定掌握程序设计基本算法和思路提高上机操作能力培养自学能力,开拓思路养成良好的程序设计习惯,6,本课程学习过程中可能出现的问题,注重理论学习,忽视上机编程实践 入门时以为难度大,产生畏难情绪 过于注重学习语句的语法规定,忽视了对编程的思路和方法的训练 急于求成,总想编写综合性的程序,忽视基本概念,忽视基本功的训练和练习 认为课程简单,考试之前临时突击,忽视了平时的日积月累,7,本课程的
3、学习方法,平时认真听讲,积极思考,提高上课效率 学会自主学习,认真完成作业和上机练习 上机编程是学好C&C+程序设计方法的关键环节,多上机,多练习,提高动手能力 加强交流面对面/网络交流。多讨论,多请教,多提问,及时答疑解惑 开阔眼界,打开思路,多看几本参考书,8,本课程的学习方法,初学时重点是掌握C&C+语言的语法和规定从模仿起步必要的记忆养成良好的编程习惯掌握上机编写程序的方法,后期应重点掌握编程思路和基本算法学会分析问题开始进行算法设计熟练掌握程序调试方法,9,第 9 页,本课程学什么?,要求掌握C&C+语言的语法编程工具程序设计方法,10,第 10 页,让 我 们 开 始 吧 ,11,
4、本模块主要内容,计算机程序设计语言的发展 信息的表示与存储 程序设计方法的发展过程 程序的开发过程,12,计算机程序,计算机的工作是用程序来控制的; 程序是指令的集合; 指令是计算机可以识别的命令。,计算机语言的发展,13,机器语言与汇编语言,由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。 计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。 汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。 此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需
5、要考虑大量的机器细节。,计算机语言的发展,14,高级语言,高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。,计算机语言的发展,15,面向过程语言面向对象语言,FORTRAN BASIC C&C+ PASCAL COBOL LISP,C+ Turbo PASCAL Visual BASIC Visual J+ Visual FoxPro,高级语言分类,16,面向过程语言(Procedural languages):面向过程语言是一套指令,这些指令从头到尾一条一条执行,除非有指令在别处强行控
6、制。 -面向过程语言的每条指令都是一个为完成特定任务而对计算机系统发出的命令,所以有时又被称为强制性语言。,面向过程语言,17,面向对象的语言,出发点: 更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。 特点: 是高级语言。 将客观事物看作具有属性和行为的对象。 通过抽象找出同一类对象的共同属性和行为,形成类。 通过类的继承与多态实现代码重用。,计算机语言的发展,18,面向对象的语言,优点: 使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。,计算机语言的发展,19,信息的表示和存储,信息的分类 计算机的数字系统 程序设计中
7、常用的数制 不同进位计数制间的转换 二进制数的编码表示 小数的表示方法,20,信息的分类, 指令控制信息 控制字信息 定点数 数值信息 数据信息 浮点数 字符数据 非数值信息 逻辑数据,信息的表示与存储,21,计算机的数字系统,计算机采用的是二进制数字系统。 基本符号:0、1 进位原则:逢二进一 优点: 易于物理实现 二进制数运算简单 机器可靠性高 通用性强 缺点:对人来说可读性差,信息的表示与存储,22,信息的表示与存储,用一组固定的数字和一套统一的规则表示数目,进位的规律,2. 基数,数制中所含数字符号的个数,3. 常用种类,十进制 八进制 十六进制 二进制,符号的个数,数制所包含的数字符
8、号的个数称基数,1. 数制,23,数制,基数 10,基数 2,基数 8,例,n进制由n个数字组成 计数方法是:逢n进一,24,权,n=整数位数-1 m=小数位数,1. 权的概念,25,权,2. 数的按权展开,任何一个数值都是各位数字 本身的值与其权之积的总和,(1234)10=1 103+2 102+3 101+4 100,26,数制,3. 不同数制下的权,整数:从右向左 i =0,1,2,3 小数:从左向右i = -1,-2,-3.,27,一、二进制数及其与十进制数间的转换,1. 二进制数的表示(101.11)2 = 122 + 021 + 120 + 12-1 + 12-2,2. 二进制数
9、的特点,逢 2 进1;有 0 和 1 两个不同的数字符号;数位的权为 2 的幂次方 2n。,?,(49)10 = (?)2计算机 计算机(?)2 =(?)10,不同数制间的转换,基数为 2,28,3. 二进制数 十进制数,不同数制间的转换(续),(101.01)2 = ( ? )10,(101.01)2 =122021120 02-112-2=22 +20 + 2-2=4 + 1 + 0.25= (5.25)10,5.25,按权展开法,(101101.101)2 =252322 20 2-12-3=328410.5 0.125= (45.625)10,关键!记住权值,例,29,不同数制间的转换
10、(续),整数除2倒取余,4. 十进制数 二进制数,小数乘正取整,4. 十进制数 二进制数,30,不同数制间的转换(续),例:,(49.58)10 = ( ? )2,110001.,整数除以2倒取余数 小数乘以正取整数,100,31,不同数制间的转换(续),注意:所有的十进制整数都能准确地转换成二进制整数,十进制小数不一定能精确地转换成二进制小数!根据精度要求取m位。,32,不同数制间的转换(续),例:0.65312 = 1.3062 1 0.30622 = 0.6124 00.61242 = 1.2248 10.22482 = 0.4496 00.44962 = 0.8992 0( 0.6 5
11、 3 1 )10( 0.1 0 1 0 0 )2,33,不同数制间的转换(续),二、八进制数及其转换,1. 八进制数的表示(375.42)8 = 382 + 781 + 580 + 48-1 + 28-2,2. 特点,逢 8 进1;有0 7 八个不同的数字符号;数位的权为8的幂次方 8n。23 = 8,三位二进制数 一位八进制数。,34,3. 八进制数 十进制数,不同数制间的转换(续),(375.42)8 = ( ? )10,(375.42)8 = 382 + 781 + 580 + 48-1 + 28-2 = 192 +56 + 5 + 0.5 + 0.03= (253.53)10,253.
12、53,按权展开法,35,4. 二进制数 八进制数,不同数制间的转换(续),(10 111 011.110 1)2 = ( )8,(6754.32)8 = ( )2,110,111,101,100,011,010,.,.,2,7,3,6,4,23 =8,以小数点为界, 分别向左、向右 每3位一组,直接将一位八进制数写成 三位二进制数 或将三位二进制数写成一 位八进制数,不足3位补0!,36,不同数制间的转换(续),三、十六进制数及其转换,1. 十六进制数的表示(97B.4C)16= 9162 + 7161 + 11160 + 416-1 + 1216-2,2. 特点,逢16进1;有0 9、A F
13、共十六个不同的数字符号;数位的权为16的幂次方 16n;24=16,四位二进制数 一位十六进制数。,37,3. 十六进制数 十进制数,不同数制间的转换(续),(ABC.DE)16 = ( ? )10,(ABC. DE)16 = 10162 + 11161 + 12160 + 1316-1 + 1416-2 = 2560 + 176 + 12 + 0.81 + 0.05= (2748.86)10,2748.86,按权展开法,38,6. 二进制数 十六进制数,不同数制间的转换(续),(1011 1110 0110.1101 1)2 = ( )16,7. 十六进制数 二进制数,( A7B 8.C 9
14、)16 = ( )2,1010,0111,1011,1000,1100,1001,.,.,B,E,6,D,8,24 =16,以小数点为界, 分别向左、向右 每4位一组,直接将一位十六进制数写 成四位二进制数 或将四位二进制数写成一 位十六进制数,不足4位补0!,39,不同数制间的转换(完),四、R 进制数与十进制数的相互转换,1. R 进制数转换为十进制数,按Rn权值展开法,2.十进制数转换为 R 进制数,整数除以R倒取余数 小数乘以R正取整数,40,不同数制间的转换(完),计算机中常见的数值,21 = 22 = 23 = 24 = 25 = 26 = 27 = 28 = 29 =,2 4 8
15、 16 32 64 128 256 512,210 =,1024,= 1K,220 =,10241024,= 1024K,= 1M,230 =,1024 1024 1024,= 1024M,= 1G,41,数的原码、反码和补码表示,二进制数的符号由最高位表示“0”表示“+” “1”表示“”,一、基本概念 1、机器数、真值和模数,模数:一个计量器的容量或者与零等价的数。,机器数:数(连同符号)在机器中的编码表示 真值:机器数所对应的十进制数值,带符号数如何表示?,5 -5 真值,42,数的原码、反码和补码表示(续),对模数的理解,1.计数器从“0”开始计数。 2.计数器所能计的数值的个数即模数。
16、 3.计数器的模数=最大值+1。 4.计数器的模数(Rn)取决于基数(R)和位数(n),43,数的原码、反码和补码表示(续),1.二位十进制计数器的模数是多少?,2. 八位二进制计数器的模数是多少?,二位十进制计数器最多可以计100个数 八位二进制计数器最多可以计256个数,44,数的原码、反码和补码表示(续),2、带符号数和无符号数,带符号数,1 0 0 0 0 1 0 1,-5 带符号数,无符号数,133 无符号数(机器编码),45,数的原码、反码和补码表示(续),二、机器数表示数值的几种方法,原码 反码 补码,解决数值计算问题 减法问题,46,数的原码、反码和补码表示(续),带符号的二进
17、制数,按数位的 宽度填满,最高位是符号位,1、数的原码表示,例,a=-12 b=+12,a原=10001100 b原=00001100,记为:,47,数的原码、反码和补码表示(续),原码的表示范围:(2n11)(2n11) 最小的负数最大的正数,正0和负0的 区别是什么?,+0原=0 0000000 -0原=1 0000000,-127+127,当n=8时,原码的表示范围是?,48,数的原码、反码和补码表示(续),对原码除符号位之外按位求反 0变1,1变0,2、数的反码表示,例,a=-12,记为:a反=11110011,49,数的原码、反码和补码表示(续),计算机不会直接做减法!6+7=13
18、6-7=? 8-3=?,为什么要用补码?,3、数的补码表示,解决方法:将负数表示成正数!-7=+? -3=+?,50,数的原码、反码和补码表示(续),将时针由8点校对到3点蓝:顺时针 +7 8+7=15=3黄:逆时针 5 8-5=3,8 + 7 = 8 5=3,什么是补码?,+7是-5的补码,丢掉 模数12,基本概念,51,数的原码、反码和补码表示(续),有证明: a-x(小于模的数)=a+(模-x),对于钟表而言: 1、9-5(小于12)=9+(12-5) 4=9+7=16=4(丢掉模) -5的补码是+7 2、3-4=3+(12-4)-1=3+8=11 -4的补码是+8,例,差1点到模数(1
19、1点),-x总可以用+(模-x)表示,等值,52,数的原码、反码和补码表示(续),补码的求法,对于2位十进制数求补码:模= 102 =100,-28补 = 102-28=72 75-28=47 = 75 +72=147 (模100),对于4位二进制数-1001求补码:模= 24 =16,-1001补 = 24-1001=10000-1001=0111 1100-1001=0011 = 1100+0111=10011 (模10000),-x补 = 2n-| x |,例,53,数的原码、反码和补码表示(续),计算机如何求补码,对原码除符号位以外按位变反加1,对二进制数-1001求补码:不用模数,-
20、1001补 = -1001 反+1= 1 0110+1=10111,对于8位二进制数-1001求补码: -1001补 = -1001 反+1= 1 1110110+1=11110111,例,54,数的原码、反码和补码表示(完),补码的表示范围: 2n1 (2n11),当n=8时,补码的表示范围是?,+0补 = -0补 =0,-128+127,-0反=11111111,对补码再求补码就得到原码,正数的原码、反码、补码相同, 只有负数的原码、反码、补码不同!,55,数的原码、反码和补码表示(续),为什么负数补码的编码多一个?,-128补=28-1补= 28|27| = 28 27= 2 27 27
21、= 27 = (1000 0000)2,当n=8时, 28-1 (-128)的补码是?,讨论,这是-128的补码 还是-0的补码?,0补= 280= (1 0000 0000)2 0= (0000 0000)2,= +0,补码可以 唯一表示0,56,数的定点和浮点表示,小数点 在计算机中如何表示,?,两种方法,位置固定:3.14159-定点,位置变化: 3.14159-浮点,3.14159X100 0.314159X101 0.0314159X102,的位置移动,数的大小不变,57,数的定点和浮点表示(续),1. 定点小数格式,小数点位置固定在某一位置。,包括:定点小数和定点整数,小数点固定在
22、最高数据位的左边,所有的数都是纯小数,只能表示小数,一、定点表示法,58,数的定点和浮点表示(续),例1:0.6875 用8位定点小数表示,0.6875,0.1011,0.1011000,0 1011000,58 H,小数点隐藏,0表示正数,59,数的定点和浮点表示(续),例2:- 0.6875 用8位定点小数表示,-0.6875,-0.1011,-0.1011000,11011000,D8 H,小数点隐藏,1表示负数,60,数的定点和浮点表示(续),用32位字长做定点小数时,表示的数的范围是:,(1 2-31), 1,最小绝对值是:,2-31,61,数的定点和浮点表示(续),2. 定点整数格
23、式:,小数点固定在最低位数字的右边,是不是除一个比例因子就能表示小数,定点表示有什么特点?,直观、简单、节省硬件,数据范围小,不灵活,62,数的定点和浮点表示(续),例如-113,用定点整数表示为:,1 1 1 1 0 0 0 1,例如113,用定点整数表示为:,0 1 1 1 0 0 0 1,63,小数点位置可任意移动,数的定点和浮点表示(续),3.14159X100 0.314159X101 0.0314159X102,3.14159,尾数:数的有效数字,阶:小数在数中的实际位置,二、浮点表示法,64,数的定点和浮点表示(续),尾数常用定点小数表示,有一个符号位,阶常用整数表示,有一个符号
24、位,假定:32位字长,8位作阶,24位作尾数 能表示的最大的数?最小数?,?,65,数的定点和浮点表示(续),当阶的符号位为 0,其余为 1 当尾数符号位为 0,其余为 1,时表示的数最大:,1038,当阶的符号位为 0,其余为 1 当尾数符号位为 1,其余为 1,时表示的数最小:,-1038,?,怎么得到的,2 7-1,2 *(1-2 -23),2127 1038,2 7-1,- 2 *(1-2 -23),-2127 -1038,66,数的定点和浮点表示(续),32位字长,8位作阶,24位作尾数时,表示的数的范围是:,- 2-150, -1038,2-150, 1038,67,数的定点和浮点
25、表示(续),当浮点数字长一定时,阶数位数越长,则所表示的数据范围越大。,当浮点数字长一定时,尾数位数越长,则所表示的数据精度越高。,68,程序设计方法的发展历程 面向过程的程序设计方法,程序的目的:用于数学计算 主要工作:设计求解问题的过程 缺点:对于庞大、复杂的程序难以开发和维护,69,程序设计方法的发展历程 面向过程的结构化程序设计方法,设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 其模块化实现的具体方法是
26、使用子程序。,70,程序的三种基本结构,特点: 一个入口,一个出口 顺序执行,顺序结构,程序设计方法的发展历程 面向过程的结构化程序设计方法,71,选择结构,双选择,单选择,功能: 判断条件为真时执行语句 否则,跳过语句,功能: 判断条件为真时执行语句1 否则,执行语句2,72,循环结构,当型循环,直到型循环,先循环后判断,入口,出口,73,程序设计方法的发展历程 面向过程的结构化程序设计方法,优点: 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。,74,程序设计方法的发展历程 面向过程的结构化程序设计方法,缺点:可重用性差、数据安全性差、难以开发大型软
27、件和图形界面的应用软件 把数据和处理数据的过程分离为相互独立的实体。 当数据结构改变时,所有相关的处理过程都要进行相应的修改。 每一种相对于老问题的新方法都要带来额外的开销。 图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。,75,程序设计方法的发展历程 面向对象的方法,将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外界发生关系。 对象与对象之间通过消息进行通讯。,76,程序设计方法的发展历程 面向对象的方法,优点: 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了
28、良好的保障。 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。,77,程序设计与算法,程序设计数据结构算法方法工具,程序设计编程,对求解问题的数据描述:数据结构对求解问题的过程的描述:算法,78,程序设计与算法,?什么是数据结构,计算机的别名:数据处理机 数据元素:数据的最小单位 数据结构:数据元素的组织形式,程序设计数据结构算法,数据结构的优劣决定软件或程序的复杂程度和面貌,数据结构,数据类型,79,目的:改善环境,加快程序开发过程。 常用工具:描述算法的图形工具、表示结构的开发工具等。,程序设计工具,程序设计与算法,80,程序设计的一般步骤,程序设计与算法,分
29、析问题,建立数学模型,确定数据结构和算法,编写程序,调试运行,分析整理结果,81,程序设计与算法,算法:完成一项任务的具体步骤 计算机语言的别名:算法语言, 2R=L , R2= S 3次乘法,1次乘方 R=A,2A=L,AR=S 3次乘法 2R=L,RR=S 4次乘法,一、什么是算法?,例,求圆周长和圆面积,数学模型:L2R SR2,三种算法:,可读性好,执行效率高,综合的优点,82,程序设计与算法,二、算法的两要素,基本功能操作 控制结构,基本功能操作:逻辑运算:与、或、非;算术运算:加、减、乘、除;数据比较:大于、小于、等于、不等于、大等于、小于等于; 数据传送:输入、输出、赋值。 控制
30、结构: 顺序、选择、循环,83,程序设计与算法,三、算法的表示,图形符号,起止框,判断框,处理框,输入/输出框,注释框,流向线,连接点,84,程序设计与算法,用流程图表示算法,例2: 求12345,即5。用流程图表示法。,方法一:,方法二:,i=i+1 计数器 i=i+n 计数器 t=t+x 累加器 a=a*x 累乘器,85,程序设计与算法,计算函数值算法流程图,开 始,输入a,b,c,x,xa,Y,bx+a2m,a(c-x)+c2m,N,选择结构流程图,循环结构流程图,86,结构化程序设计方法,一、程序的三种基本结构,特点: 一个入口,一个出口 顺序执行,顺序结构,87,结构化程序设计方法,
31、选择结构,双选择,单选择,功能: 判断条件为真时执行语句 否则,跳过语句,功能: 判断条件为真时执行语句1 否则,执行语句2,88,结构化程序设计方法,多分支,功能:从多个条件中选择满足条件的一个分支执行。,89,结构化程序设计方法,循环结构,当型循环,直到型循环,先循环后判断,入口,出口,90,结构化程序设计方法,二、NS流程图,91,3.循环结构,结构化程序设计方法,92,4、传统流程图与N-S流程图的比较,结构化程序设计方法,例1:1+2+3+ 直到t的值大于100。,?,93,例2:输入10个整数,要求打印出其中最大的数。用N-S图表示。,结构化程序设计方法,三、模块化程序设计,详细设
32、计,94,基本术语,源程序: 用源语言写的,有待翻译的程序 目标程序: 也称为“结果程序“,是源程序通过翻译程序加工以后所生成的程序。 翻译程序: 是指一个把源程序翻译成等价的目标程序的程序。,程序的开发过程,95,基本术语 三种不同类型的翻译程序,汇编程序: 其任务是把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。 编译程序: 若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程序,那么,该翻译程序就称为“编译程序“。,程序的开发过程,96,基本术语 三种不同类型的翻译程序,解释程序: 这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、 执行一句,直至将整个源程序翻译并执行完毕。,程序的开发过程,97,程序的开发过程,编辑 将源程序输入到计算机中,生成后缀为c或cpp的磁盘文件。 编译 将程序的源代码转换为机器语言代码。 连接 将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为exe的可执行文件。 运行调试,程序的开发过程,