《教学课件第1章程序设计与软件开发基础概述》由会员分享,可在线阅读,更多相关《教学课件第1章程序设计与软件开发基础概述(46页珍藏版)》请在金锄头文库上搜索。
1、第第1章章程序设计与软件开发基础概述程序设计与软件开发基础概述第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程第二节第二节 算法与数据结构算法与数据结构第三节第三节 C语言介绍语言介绍第四节第四节 常用常用C开发工具开发工具1 / 46C语言程序设计语言程序设计 龙昭华主编第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)2 / 46一、一、 各种进制之间数的转换各种进制之间数的转换十进制转换成二进制十进制转换成二进制:对于整数部分采用除2取余法,用2逐次去除十进制数, 直至商为0为止。先得到的余数为二
2、进制的低位数,最后得到的余数为二进 制的最高位的数。十进制数转换成八进制、十六进制十进制数转换成八进制、十六进制:方法同转换成二进制,只是将2分别改成8 和16。二进制、八进制、十六进制数转换成十进制数二进制、八进制、十六进制数转换成十进制数:使用按权展开、逐项相加的方 法。二进制转换成八进制、十六进制二进制转换成八进制、十六进制:因为2 23 3=8=8、2 24 4=16=16,所以3位二进制对应一位 八进制,4位二进制对应一位十六进制。八进制、十六进制转换成二进制八进制、十六进制转换成二进制:上面的逆过程,将1位八进制数转成3位二进 制数,将1位十六进制数转成4位二进制数即可。例如例如:
3、 (10001)B = 1*24+1 =(17)D =(21)O =(11)H (20)D =(10100)B =(24)O =(14)H (2B)H = 2*16+11 =(43)D =(53)O =(101011)B二、二、 原码、反码、补码、原码、反码、补码、ASCIIASCII码码第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程3 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)原码:原码:在原码中规定正数符号位为0,负数符号位为1,后面的数据位则表示该 数的绝对值。如:+15原=0000000000001111B,-15B。反码:反码:在反
4、码中规定正数的反码与原码相同;负数的反码由该负数的原码进行 计算:原码符号位不变,数据位按位取反(即0变为1,1变为0)。 如:+15反=0000000000001111B , -15B。补码:补码:正数的补码等于原码;负数的补码等于该负数的反码加1,即该数绝对 值的原码按位取反加1。如:+15补=+15原=0000000000001111B, -15B。ASCII 码:码:无符号整型数据值即为ASCII码值。 标准ASCII码取值 0127 。 扩展ASCII码取值 128255 。如:字母AZ的ASCII码值为6590。注意:注意:在计算机中,数值数据是用补码方式表示的,而字符数据是用AS
5、CII码表示的。三、三、 编程语言编程语言第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程4 / 46第一代语言第一代语言又称“机器语言”,是计算机诞生和发展初期使用的语言,它是用二 进制形式编码的,由CPU可以识别的0、1序列构成指令码。第二代语言第二代语言是“汇编语言”,它开始于20世纪50年代初,是用助记符来表示每一 条机器指令。第一代语言和第二代语言都是低级语言。第三代语言第三代语言即“高级语言”,它起源于20世纪50年代中期,与人们的自然语言和 数学语言更接近,可读性强,编程方便。它告诉计算机怎么做。 如:BASIC,FORTRAN、COBOL、PASCAL、C等。C语言也
6、是中级语言,它把 高级语言的基本结构和语句与低级语言的实用性结合起来。第四代语言第四代语言称为“非过程化语言”,又称为“面向对象的语言”。它告诉计算机做 什么。不必关心问题的解法和处理过程的细节描述,只要说明所要完成的 加工和条件,指明输入数据和输出形式,就能得到要的结果,其他工作由 系统来完成。如:C+、Visual C+、DELPHI等。第五代语言第五代语言,堪称智能性语言。PROLOG语言是第五代语言的代表,他广泛运用 于抽象问题求解、数据逻辑、公式处理、自然语言理解、专家系统和人工 智能的许多领域。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)四、四、 软件
7、工程软件工程第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程5 / 46 2 2、软件工程概念、软件工程概念 软件工程软件工程是采用工程的概念、原理、技术和方法来维护和开发软件,把经时间考验证明正确的管理技术和当前能够得到的最好的技术方法结合起来。1 1、软件危机的表现、软件危机的表现 软件复杂性飞速增长,错误率大增 落后编程方式导致软件成本极高 手工开发周期长 维护工作量大 软件工程强调使用生命周期生命周期的方法和各种结构化分析与设计技术,用系统的观点来分解问题,然后再分别解决各个子问题。软件生命软件生命淘汰淘汰软件运行:维护软件运行:维护软件开发软件开发软件实现(编程、测试)软件
8、实现(编程、测试)软件设计(建模、算法)软件设计(建模、算法)软件定义(分析)软件定义(分析)编制有关文档(用户手册、操作手册等、报告)编制有关文档(用户手册、操作手册等、报告)系统说明书系统说明书设计说明书设计说明书程序、系统程序、系统(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 3、软件开发模型、软件开发模型第一节第一节 基础知识回顾与软件工程基础知识回顾与软件工程6 / 46(1)(1)、瀑布模型:、瀑布模型: 支持结构化软件开发。(2)(2)、演化模型:、演化模型: 多次迭代逐步修正。(3)(3)、螺旋模型:、螺旋模型: 瀑布模型 + 演化模型 + 风险分
9、析。(4)(4)、喷泉模型:、喷泉模型: 主要用于面向对象开发过程,支持复用,具有迭代和无间歇特征。(5)(5)、增量模型:、增量模型: 快速原型模型的一种。系统需求系统需求运行运行测试测试需求分析需求分析软件需求软件需求设计设计编码编码(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)第二节第二节 算法与数据结构算法与数据结构7 / 46一、一、 数据结构的概念数据结构的概念程序程序:程序实质是完成既定任务的指令序列。而编写程序的工具是语言。 程序程序 = = 数据结构数据结构 + + 算法算法 + 程序设计方法 + 语言工具环境 算法是灵魂,是问题求解过程中的精确描
10、述;数据结构是加工对象;语言是工 具;编程需要采用合适的方法。 数据:数据:是对客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:数据元素:是数据的基本单位,在程序中通常作为一个整体进行考虑和处理。一个数 据元素可由若干个数据项数据项组成。数据项是数据的不可分割的最小单位。如一本 书的书目为一个数据元素,而书目信息中的每一项(如书名、作者名等)为一个 数据项。数据对象:数据对象:是性质相同的数据元素的集合,是数据的一个子集。数据结构:数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 结构:结构:数据元素相互之间的关系称为结构。数据的逻辑结构:数据的
11、逻辑结构:数据元素间的逻辑上的联系称为数据的逻辑结构。数据结构中的元素之间的关系集合,反映的是数据的逻辑结构。数据结构研究的内容着重于数据的逻辑结构,因此经常把逻辑结构称为数据结构。数据的存储结构:数据的存储结构:数据的逻辑结构在计算机存储设备中的映像称为数据的存储结构。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)二、二、 数据结构的分类数据结构的分类第二节第二节 算法与数据结构算法与数据结构8 / 46根据数据元素之间关系的不同特性,数据结构有4类基本结构:集合:集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。线性结构:线性结构:结构中的
12、数据元素之间存在一个对一个(简记为1:1)的关系。树形结构:树形结构:结构中的数据元素之间存在一个对多个(简记为1:N)的关系。图状图状(网状网状)结构:结构:结构中的数据元素之间存在多个对多个(简记为M:N)的关系。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)逻辑结构逻辑结构线性线性存储结构存储结构非线性非线性树树图图顺序存储结构顺序存储结构链式存储结构链式存储结构数据结构数据结构索引存储结构索引存储结构散列存储结构散列存储结构最常用的抽象运算:初始化、读取访问、插入、删除等抽象运算:初始化、读取访问、插入、删除等三、三、 算法概述算法概述第二节第二节 算法与数
13、据结构算法与数据结构9 / 46算法:算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。算法解决的是“做什么”和“怎么做”的问题,程序中的操作语句就是算法的体现。计算机算法可分为两大类:计算机算法可分为两大类:数值运算算法、非数值运算算法。数值运算算法:数值运算算法:数值运算的目的是求数值解,如:求方程的根、函数的定积分等。非数值运算算法:非数值运算算法:应用十分广泛,如:图书检索、人事管理、行车调度管理、排序算法等。常用算法:常用算法: 递推化算法(牛顿迭代法、二分法、梯形法、穷举法等); 排序算法(选择法、冒泡法); 查找算法(顺序查找、折半查找)
14、; 有序数列的插入、删除操作; 存储区的动态分配与释放,单向线性链表的建立、查找、插入、删除操作; 初等数论问题求解的有关算法(最大公约数、最小公倍数、素数等); 递归算法(求最大公约数、阶乘等); 字符串的处理(字符和字符串的插入、删除、字符串的连接、比较等)。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)算法具有算法具有5 5个特性:个特性:第二节第二节 算法与数据结构算法与数据结构10 / 46有穷性:有穷性:对任何合法的输入值,算法中每个步骤由计算机执行的次数及时间都是有限的。确定性:确定性:算法中每个步骤含义明确,无二义性。在任何条件下,相同的输入,必有相
15、同的输出。可行性:可行性:算法中描述的操作都可通过有限次的基本运算来实现。输入:输入:一个算法应具有零个或多个输入。(无输入情况:如求:1*2*3*4*5)。输出:输出:一个算法应具有一个或多个输入。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)算法的设计目标:算法的设计目标:第二节第二节 算法与数据结构算法与数据结构11 / 46正确性:正确性:设计的算法应当满足具有输入、输出和加工处理等明确的无歧义性 的描述的具体问题的需求。验证正确性通常有4个层次: 程序不含语法错误; 程序对于几组输入数据能够得出满足规格说明要求的结果; 程序对于精心选择的典型、苛刻而带有刁
16、难性的几组输入数据能 够得出满足规格说明要求的结果; 程序对于一切合法的输入数据能够得出满足规格说明要求的结 果。 一般情况至少通过第层的验证。 可读性:可读性:算法主要是为了阅读与交流,其次才是机器执行。可读性好有助于 人对算法的理解;难懂的程序易于隐藏较多错误,难以调试和修改。健状性:健状性:当输入非法数据时,算法也能适当地做出反应或进行处理,而不会 产生莫名其妙的输出结果。效率与低存储量的需求:效率与低存储量的需求:主要指算法执行时的最长时间与所需的最大存储空 间。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)四、四、 算法的表示方法算法的表示方法第二节第二节
17、 算法与数据结构算法与数据结构12 / 461、用自然语言表示算法:、用自然语言表示算法:自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。除了简单问题外,一般不用自然语言描述算法。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)例例 1.1 :用自然语言写出求的算法。解:解:算法表示如下:S1:sign=1/*数值的符号*/S2:sum=1/*累加和*/S3:deno=2/*分母值*/S4:sign=(-1)*signS5:term=sign*(1/deno)/*某一项的值*/S6:sum=sum+t
18、ermS7:deno=deno+1S8:若deno100返回S4,否则转S9S9:输出sum2、用流程图表示算法、用流程图表示算法第二节第二节 算法与数据结构算法与数据结构13 / 46 用流程图表示算法,形象直观,比较清楚地显示出各个框之间的逻辑关系,易于理解。但流程图占用篇幅较多,当算法较复杂时,画流程图既费时,又不方便。但必须掌握。 美国国家标准化协会ANSI规定了一些常用的流程图符号,并已被世界各国程序工作者采用:起止框 输入输出框 判断框 处理框 流程线 连接点 注释框或或三种基本结构:三种基本结构: 为了解决程序设计混乱的问题,1966年提出了三种基本结构:顺序结构顺序结构、选选择
19、结构择结构、循环结构循环结构,然后由这些基本结构按一定规律组成一个算法结构,整个算法结构是由上而下将各个基本结构顺序排列起来的。使用这三种基本结构顺序组成的算法结构,可以解决任何复杂的问题,并且是“结构化”的算法。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)顺序结构:顺序结构:第二节第二节 算法与数据结构算法与数据结构14 / 46 顺序结构是程序设计中最简单的一种基本结构。 如右图所示,形象地描述了一个最简单的顺序结构:图中虚线框内是一个顺序结构。其中A和B两个框是顺序执行的,即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。ABab(第一章(第一章
20、程序设计与软件开发基础概述)程序设计与软件开发基础概述) 选择结构选择结构(或称选取结构,或称分支结构或称选取结构,或称分支结构):第二节第二节 算法与数据结构算法与数据结构15 / 46 如下图所示,虚线框内是一个选择结构。此结构必包括一个判断框,根据给定的条件p是否成立,而选择执行A框或B框。 注意:无论条件p是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。A或B两个框中可以有一个是空的,即该空框不执行任何操作。ABPab成立不成立APab成立不成立(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)循环结构循环结构(或称重复结构或称重复结构):第二节第
21、二节 算法与数据结构算法与数据结构16 / 46 循环结构即反复执行某一部分的操作,分为当型(while型)循环结构和直到型(until型)循环结构两类。APab成立不成立当型当型(while(while型型) )循环结构:循环结构: 如右图所示,虚线框内是一个while型结构。它的功能是当给定的条件p成立时,执行A框操作,执行完A后再判断条件p是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p条件不成立为止,此时不执行A框,而是从b点脱离循环结构。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)直到型直到型(until(until型型) )循环结构:
22、循环结构:第二节第二节 算法与数据结构算法与数据结构17 / 46 如右图所示,虚线框内是一个until型结构。它的功能是先执行A框,然后判断给定的条件p是否成立,如果条件p成立,再执行A框,然后再对条件p作判断,如果条件p仍然成立,又执行A框,如此反复执行A框,直到某一次p条件不成立为止,此时不执行A框,而是从b点脱离本循环结构。APab成立不成立(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)三种基本结构的共同特点:三种基本结构的共同特点:第二节第二节 算法与数据结构算法与数据结构18 / 46只有一个入口只有一个出口结构内的每一部分都有机会执行到结构内不存在“死
23、循环”(无终止的循环)(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)其他结构:其他结构:第二节第二节 算法与数据结构算法与数据结构19 / 46 事实上,基本结构不一定只限于上面三种,只要具有上述基本结构的4个特点的结构都可以作为基本结构。人们可以运用三种基本结构定义自己派生的基本结构,并由这些基本结构组成结构化程序。 如下两图所示。APabYNB根据表达式的值p进行选择abABN(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 例例 1.2 :用流程图表示出求第二节第二节 算法与数据结构算法与数据结构20 / 46的算法。解:解:开始1
24、= sign1 = sum2 = denoadeno+1 = deno(-1)*sign = signsign*(1/deno) = termsum+term = sumdeno100NYab结束打印打印sumb(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)3、用、用NS盒流程图表示算法盒流程图表示算法第二节第二节 算法与数据结构算法与数据结构21 / 46 既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属多余的了。1973年美国两学者I.Nassi和B.Shneiderman提出了一种新的流程图形式,并以他们的名字命名为NS结构化
25、流程图。这种流程图完全去掉了带箭头的流程线,全部算法写在一个矩形框内,在该框内还可以包括其他的从属于它的框,即由一些基本的框组成一个大框。这种NS流程图十分适合结构化程序设计,因而很受欢迎。三种基本结构对应的三种基本结构对应的NSNS流程图符号流程图符号:AB当p成立A直到p不成立AAB成立不成立p顺序结构选择结构当(while)型循环结构直到(until)型循环结构(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 例例 1.3 :用NS流程图表示求素数的算法。第二节第二节 算法与数据结构算法与数据结构22 / 46解:解: 素数是指除了1和该数本身之外,不能被其他任
26、何整数整除的数。实际上,若要判断一个正整数m是否为素数,只要将2到间的每一个整数去除m,若有一个能整除m,则m不是素数,若其间的所有整数都不能整除m,则m为素数。(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”m 例例 1.4 :用NS流程图表示出判定20002500年中的每一年是否闰年,输出结果的算法。第二节第二节 算法与数据结构算法与数据结构23 / 46解:解:闰年的条件:闰年的条件:能被4整除,但不能被100整除的年份都是闰年。如:1996年、
27、2004年是闰年。能被100整除,又能被400整除的年份是闰年。如:1600年、2000年是闰年。不符合这两个条件的年份不是闰年。y = 2000y = y + 1是是的余数为的余数为0打印打印y“非闰年非闰年”的余数不为0打印打印y“是闰年是闰年”的余数为的余数为0打印打印y“是闰年是闰年”否是打印打印y“非闰年非闰年”是否否否直到直到y2500(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 4、用伪代码表示算法、用伪代码表示算法第二节第二节 算法与数据结构算法与数据结构24 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 用流
28、程图和NS图表示算法,直观易懂,但画起来比较费事,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的。因此,流程图适宜表示一个算法,但在设计比较复杂的算法过程中使用不是很理想。为了设计算法时简便,常常用伪代码表示。伪代码表示算法的优点伪代码表示算法的优点: 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章,自上而下的写下来,每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂书写方便、格式紧凑,也比较好懂,便于向计算机语言(即程序)过渡。 伪代码的书写格式比较自由,可以随手写下来,容易表达出设计者的思想,易于修改易于修改。伪代
29、码表示算法的缺点伪代码表示算法的缺点: 用伪代码写算法不如流程图或NS图直观,可能还会出现逻辑上的错误。 例例 1.5 :用伪代码表示“打印20002500年中的每一年是否闰年”的算法。第二节第二节 算法与数据结构算法与数据结构25 / 46解:解:用伪代码表示的算法如右边所示:BEGIN(算法开始算法开始) y = 2000 while y0)printf(“%d”,x);elseprintf(“%d”,x);(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)五、五、 结构化程序设计方法结构化程序设计方法第二节第二节 算法与数据结构算法与数据结构27 / 46(第一章
30、(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)一个结构化程序就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、阅读、修改和维护。结构化程序设计强调程序设计风格和程序结构规范化,提倡清晰的结构。结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。采用以下方法就可以保证得到一个结构化的程序: 自顶向下; 进行总体设计。 逐步细化; 进行细节设计。 模块化设计; 把复杂的问题“分而治之”,每个模块功能独立,其耦合性越少越好。 结构化编码。 设计好结构化的算法后,还要善
31、于进行结构化编码。第第1章章程序设计与软件开发基础概述程序设计与软件开发基础概述-习题习题128 / 46C语言程序设计语言程序设计 龙昭华主编习习 题题 (一一)* 复习本章全部内容,预习本章剩余内容和第二章内容。复习本章全部内容,预习本章剩余内容和第二章内容。1.1 分别分别使用流程图、伪代码写出求使用流程图、伪代码写出求 的根的算法。的根的算法。 分别考虑:分别考虑:有两个不等的实根;有两个不等的实根;有两个相等的实根;有两个相等的实根;无实根。无实根。1.2 用用NSNS图表示图表示“将将100200100200之间的素数打印出来之间的素数打印出来”的算法。的算法。第三节第三节 C语言
32、介绍语言介绍29 / 46一、一、 C C语言的产生与发展语言的产生与发展(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)C语言是1972年由美国贝尔实验室的DennisRitchie设计发明的,并首次在UNIX操作系统的DECPDP-11计算机上使用。C语言可以追溯到1960年出现的ALGOL60。ALGOL60是面向问题的高级语言,不宜用来编写系统程序。1963年英国剑桥大学在ALGOL60的基础上推出了接近硬件一些的CPL(CombinedProgrammingLanguage),但它规模较大,难以实现。1967年剑桥大学又对CPL语言做了简化,推出了BCPL(
33、BasicCombinedProgrammingLanguage)语言。在1970年,AT&T贝尔实验室的KenThompson根据BCPL语言又一次做了简化,设计出较先进的并取名为B的语言。但B语言过于简单,功能有限。最后导了C语言(取BCPL的第二个字母)的问世。随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。ALGOL60CPLBCPLBC1963年1967年1970年1972年1960年二、二、 C C语言的特点语言的特点第
34、三节第三节 C语言介绍语言介绍30 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如UNIX、DBASEPLUS、DBASE都是由C语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,象PC-DOS、WORDSTAR等就是用这种方法编写的。归纳起来C语言具有下列特点:1. C是中级语言是中级语言 :它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2. C是结
35、构式语言:是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。3. C语言功能齐全:语言功能齐全:C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。4. C语言适用范围大:语言适用范围大:C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNI
36、X,也适用于多种机型。5. 语法限制不太严格,程序设计自由度大。语法限制不太严格,程序设计自由度大。因此C程序员要对程序设计更熟悉一些。6. 生成目标代码质量高,程序执行效率高。生成目标代码质量高,程序执行效率高。7. C语言可移植性好、硬件控制能力高、表达和运算能力强。语言可移植性好、硬件控制能力高、表达和运算能力强。三、三、 C C程序介绍程序介绍第三节第三节 C语言介绍语言介绍31 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)1. C程序是由函数构成的。程序是由函数构成的。一个C源程序至少包括一个main()函数,也可以包含一个main()函数和若干
37、个其他函数。因此函数是C程序的基本单位。被调用的函数可以是系统提供的库函数,也可以是自己编写的函数。C的函数相当于其他语言的子程序,编写C程序,就是编写一个个函数,因此可以说C是函数式的语言。ANSIC提供了100多个库函数,TurboC2.0和MSC4.0提供了300多个库函数。2. C程序的一个函数由两部分组成。程序的一个函数由两部分组成。函数的首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。一个函数名后面必须跟一对圆括号,函数参数可以没有。函数首部结尾无分号“;”。函数体,即函数首部下面的花括弧内的部分。如果一个函数内有多个花括弧,则最外层的一对为函数
38、体的范围。函数体一般包括:声明部分:在这一部分中定义所用到的变量(或调用的函数)。执行部分:由若干个语句构成。注意:空函数也是合法的。空函数既无声明部分,又无执行部分。3. 一个一个C程序总是从程序总是从main函数开始执行,并在函数开始执行,并在main函数中结束函数中结束第三节第三节 C语言介绍语言介绍32 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)不论main函数在整个程序中的位置如何,一个C程序总是从main函数开始执行的,main函数执行完毕,也标志着整个C程序执行完毕。 4. C程序书写格式自由程序书写格式自由 C程序没有行号,一行内可以写几
39、个语句,一个语句可以分写在多行上。 5. 5. 每个语句和数据定义的最后必须有一个分号。每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分,分号不可少,即使是程序中最后一个语句也应该包含分号。 6. C6. C语言本身没有输入输出语句。语言本身没有输入输出语句。输入和输出操作是又库函数scanf和printf等函数来完成的。由于输入输出操作牵涉到具体的计算机设备,把输入输出操作放在函数中处理,就可以使C语言本身的规模较小,编译程序简单,很容易在各种机器上实现,程序具有可移植性。 如输出:Hello,How do you do! 则用: printf(“Hello,How do
40、you do!”); 7. 可以用可以用/* */对对C程序中任何部分作注释。程序中任何部分作注释。8. #include的作用的作用第三节第三节 C语言介绍语言介绍33 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)在许多C语言系统软件中,程序的第一行有#include“./src/card.h”或#include,它的作用是将事先定义的各种环境进行加载,保证编写的程序代码能正确运行。文件stdio.h或card.h称为头文件。如果头文件放在C系统缺省目录中(一般为include目录),则该文件在加载时,直接写文件名,并用一对尖括号括起来。如果头文件不在C
41、系统缺省目录中,则必须在文件名前加上路径,并用一对双引号“”括起来。使用双引号“”时,它将首先在当前目录或指定目录寻找头文件,如果没有找到,则再到C缺省目录寻找。 9. C语句分类语句分类第三节第三节 C语言介绍语言介绍34 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 控制语句:控制语句:它完成一定的程序流程控制能力。C语言有9种控制语句: if() else (条件语句) for() (循环语句) while() (循环语句) do while() (循环语句) continue (结束本次循环) break (中止执行switch或循环语句) swi
42、tch (多分支选择语句) goto (转向语句) return (从函数返回语句) 函数调用语句:函数调用语句:由一个函数加一个分号就构成一个函数调用语句。 空语句:空语句:它是只有一个分号的语句,什么也不做。 复合语句:复合语句:花括号内的所有语句总称为一个复合语句。 表达式语句:表达式语句:表达式语句是指由一个表达式构成的语句,表达式的最后加一个分号就构成了表达式语句,C语言程序中的语句大多数都是表达式语句。10. C语言的输入输出函数语言的输入输出函数第三节第三节 C语言介绍语言介绍35 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) C语言没有输入
43、输出语句,主要由库函数完成,库函数在stdio.h中定义,例如: putchar (输出字符) 如:char ch=A; putchar(ch); getchar (输入字符) 如:char ch; ch=getchar(); printf (格式输出) 如:printf(“Very Good!”); scanf (格式输入) 如:int n; scanf(“%d”,&n); puts (字符串输出) 如:char name10=“Zhangsan”; puts(name); gets (字符串输入) 如:char name10; gets(name);11. C11. C语言关键字语言关键字
44、第三节第三节 C语言介绍语言介绍36 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 关键字又称保留字,它是ANSI C保留下来的有专门目的的名字,它不能被程序员重复命名。使用C语言编程时,不能定义与关键字相同的变量名、函数名等。 C语言中的常用的关键字有以下30多个: 类型名:int,char,float,double,short,long,unsigned,viod 存储类型:auto,static,register,extern 控制语句:if,while,do,goto,break,continue,for,default,case, switch,
45、return,else 类型标识符:struct,union,enum 其他:typedef,sizeof,signed,const,volatile 另外,Turbo C2.0扩展关键字有:asm,_cs,_ds,_es,_ss,cdecl,far, near,huge,interrupt,pascal12. C语言的标识符语言的标识符第三节第三节 C语言介绍语言介绍37 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述) 所谓标识符,是指常量、变量、语句标号以及用户自定义函数的名称等。 标识符的命名必须遵循以下原则: 所有标识符必须由一个字母(az, AZ)
46、或下划线(_)开头。 标识符除开头的其它部分可以用字母、下划线或数字(09)组成。 不要太长。在IBM-PC的MSC系统中取8个字符,Turbo C允许32个字符。 不要与C语言中的库函数名、类型名相同。 不能使用C语言中的关键字。如do、for、int等。 大小写字母表示不同意义,即代表不同的标识符。 例如:例如: 合法的标识符 不正确的标识符 smart 5smart _decision bomb? key_board key.board FLOAT float Year2008 a%例例 1.7 :第三节第三节 C语言介绍语言介绍38 / 46(第一章(第一章 程序设计与软件开发基础概述
47、)程序设计与软件开发基础概述)#include/*包含文件说明*/ main()/*主函数*/intmax(intx,inty);/*声明部分,函数声明*/inta,b,c;/*定义变量*/*执行部分*/scanf(“%d,%d”,&a,&b);/*输入变量a和b的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(“max=%dn”,c);/*输出c的值*/intmax(intx,inty)/*定义max函数,函数值为整形*/intz;/*定义本函数中用到的变量*/if(xy)z=x;elsez=y;return(z);/*将z的值返回,通过max带回调用处*/
48、例例 1.8 :打印图案。:打印图案。第三节第三节 C语言介绍语言介绍39 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)#include/* 包含文件说明 */ voidmain(void)/*主函数*/clrscr(); /* 清屏 */printf(“AAAAAAAAAAAA”);printf(“AAAAAAAAAA”);printf(“AAAAAAAA”);printf(“AAAAAA”);printf(“AAAA”);printf(“AA”);printf(“A”);四、四、 TurboCTurboC源程序的一般形式源程序的一般形式第三节第三节 C
49、语言介绍语言介绍40 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)包含文件 子函数类型声明 全程变量声明 main() 局部变量声明 sub1() 局部变量声明 sub2() 局部变量声明 . . . subN() 局部变量声明 其中sub1(),.,subN()代表用户定义的子函数,程序体指TurboC提供的任何库函数调用语句、控制流程语句或其它用子函数调用语句等。五、五、 C C语言编程风格语言编程风格第三节第三节 C语言介绍语言介绍41 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)1. 格式缩进。格式缩进。缩进的
50、大小是为了清楚的定义一个块的开始和结束。最好使用8个缩进字符,当然也可以使用4个缩进字符。可直接使用Tab缩进8个字符。如果你的程序有3个以上的缩进的时候,你就应该修改你的程序。程序嵌套太多,不利于阅读。2.花括号的位置。花括号的位置。一般情况下,将开始的花括号放在一行的最后,而将结束的花括号放在一行的第一位。当然也可以将开始的花括号放在一行的第一位。但是,命名函数时,开始的花括号都是放在下一行的第一位的。 3.3.命名系统。命名系统。C是一种简洁的语言,那么,命名也应该是简洁的。描述性名字对全局变量来说是必要的,但局部变量的命名应该短小精悍。 4.4.函数处理。函数处理。函数应该短小而迷人,
51、而且它只作一件事情。函数的局部变量的个数一般不应该超过5-10个,否则分割成更小的函数。 5.5.注释。注释。在有限的注释里,尽可能多的说明你的代码做些什么,而不是注释怎么做的。一般将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做。假如这个函数确实很复杂,你需要在其中有部分的注释,则请分割成小函数。 6.6.字母书写规范。字母书写规范。程序一般用小写字母书写。变量名、函数名等一般用小写字母书写。符号常量一般用大写字母书写。 7. 7. 在在Turbo CTurbo C中中, , 要严格区分大、小写字母。要严格区分大、小写字母。相同字母的大、小写代表不同的变量。第四节第四节 常用常
52、用C开发工具开发工具42 / 46一、一、 C C程序的上机步骤程序的上机步骤(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)为了使计算机能按照人们的意志进行工作,必须根据问题的要求,编写出相应的程序。所谓程序,就是一组计算机能识别和执行的指令。用高级语言编写的程序称为“源程序”。计算机只能识别和执行由0和1组成的二进制的指令,源程序必须通过“编译程序”翻译成二进制形式的“目标程序”。最后,将该目标程序与系统的函数库和其他目标程序连接起来,形成可执行的目标程序。开始开始结束结束编辑编辑连接连接编译编译执行执行库函数库函数和其他目和其他目标程序标程序可执行可执行目标程序
53、目标程序 f.exe目标目标程序程序f.o源程源程序序f.c结果结果正确?正确?有有错?错?不正确不正确正确正确有错有错无错无错二、二、 Turbo C 2.0 Turbo C 2.0第四节第四节 常用常用C开发工具开发工具43 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)TurboC是美国Borland公司于1987年首次推出的产品,而TurboC2.0则是该公司1989年出版的。Borland公司后来又推出了面向对象的程序软件包TurboC+,它继承发展TurboC2.0的集成开发环境,并包含了面向对象的基本思想和设计方法。1991年为了适用Micro
54、soft公司的Windows3.0版本,Borland公司又将TurboC+作了更新,即TurboC的新一代产品BorlandcC+。TurboC2.0的使用步骤的使用步骤:首先安装或拷贝TurboC2.0系统到计算机相应目录,如c:tc20。调用TurboC程序。执行c:tc20tc.exe即可。设置环境目录。执行Options-Directories即可。它规定编译、连接所需文件的路径,设置好后应执行SaveOptions将配置存盘。具体有下列各项需要配置(至少前4项):Includedirectories包含文件的路径,多个子目录用“;”分开。Librarydirectories库文件路
55、径,多个子目录用“;”分开。Outputdirectoried输出文件(.OBJ,.EXE,.MAP文件)的目录。TurboCdirectoriedTurboC所在的目录。Pickfilename定义加载的pick文件名,如不定义则从currentpickfile中取。编辑源文件。执行Edit即可。生成*.c文件。编译源文件。执行Compile-CompiletoOBJ即可。生成*.obj文件。生成可执行文件。执行Compile-LinkEXEfile即可。生成*.exe文件。执行可执行文件。注意:注意:也可直接执行Run-Run命令运行程序。也可执行Compile-MakeEXEfile完成
56、obj和exe的生成。三、三、 Microsoft C Microsoft C第四节第四节 常用常用C开发工具开发工具44 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)MicrosoftC是微软公司为IBM系列微机开发的C编译系统,MSC6.0提供了多个库函数。MSC6.0命令方式的用法如下:编辑C源程序。可用任何编辑系统,其文件为*.c,如:f.c。编译和连接。使用CL命令即可,CL是Compile和Link的第一个字母。用法为:CLf.c编译和连接完成后生成*.exe文件,这里即f.exe。执行程序。在DOS命令行输入文件名即可。这里如:f四、四、 U
57、nix Unix下的标准下的标准C C第四节第四节 常用常用C开发工具开发工具45 / 46(第一章(第一章 程序设计与软件开发基础概述)程序设计与软件开发基础概述)Unix操作系统下运行C程序的步骤如下:编辑源程序。在Unix中可用文本编辑程序ed或屏幕编辑程序vi编辑源程序。其文件名为:*.c,如f.c。 编译。调用C编译程序cc对源文件进行编译。如: cc f.c 编译后生成*.o文件,表示目标文件(*.obj)。这里生成:f.o。 连接。将目标程序和库函数或其他目标程序连接成可执行的目标程序。在Unix中,连接是由cc自动完成的。最后得到的可执行文件系统自动确定为:a.out。如果不想
58、内定为a.out,也可以在编译时自己指定可执行文件名。如这里指定为:f.out。其命令为: cc -o f.out f.c 执行程序。只需键入可执行文件即可。 a.out (系统缺省名) 或 f.out (自定名) 第第1章章程序设计与软件开发基础概述程序设计与软件开发基础概述-习题习题246 / 46C语言程序设计语言程序设计 龙昭华主编 习习 题题 (二二)* 复习本章全部内容,预习第二章内容。复习本章全部内容,预习第二章内容。1.3 请参照本章例题,编写一个请参照本章例题,编写一个C C程序,输出以下信息:程序,输出以下信息: * * Very Good ! Very Good ! * *1.4 上机运行本章习题上机运行本章习题1.3的程序,熟悉的程序,熟悉Turbo C2.0环境。环境。