第1章_C语言及程序设计概述.ppt
C 语语 言言 程程 序序 设设 计计主主 讲:叶讲:叶 斌斌E-mail:课程安排课程安排总学时:n64学时(理论40学时 实验24学时)教材:nC语言程序设计(第一版).叶斌,陈世强主编,北京:科学出版社,2012年6月参考教材:nC语言程序设计(C99版).陈良银,游洪跃,李旭伟主编.北京:清华大学出版社,2006 nC语言程序设计(第四版)谭浩强著.北京:清华大学出版社,2010nC语言程序设计教程(第2版).李丽娟主编.北京:人民邮电出版社,2009 2第第1章章 C语言及程序设计概述语言及程序设计概述【学习目标学习目标】掌握程序、程序设计语言及程序设计方法等基本概念;掌握程序、程序设计语言及程序设计方法等基本概念;了解计算机求解问题的基本过程;了解了解计算机求解问题的基本过程;了解C语言的发展及特语言的发展及特点;掌握点;掌握C语言程序的基本结构以及语言程序的基本结构以及C语言的基本语法单语言的基本语法单位;掌握位;掌握C语言程序的开发过程与开发环境。语言程序的开发过程与开发环境。【重重 难难 点点】重点:程序设计语言与程序设计方法的基本概念,重点:程序设计语言与程序设计方法的基本概念,C语言基本语法单位以及语言基本语法单位以及C语言程序的基本结构。语言程序的基本结构。难点:计算机求解问题的基本过程,难点:计算机求解问题的基本过程,C语言源程序生语言源程序生成可执行程序的过程。成可执行程序的过程。【教学安排教学安排】学时:学时:2学时学时31.1 程序与程序设计语言程序与程序设计语言1.1.1 程序的概念程序的概念 什么是什么是计算机程序算机程序?计算机程序算机程序是指可以被计算机或其他信息处理是指可以被计算机或其他信息处理装置连续执行的一条条指令的集合。装置连续执行的一条条指令的集合。程序程序是一组有序的指令(是能够完成特定任务是一组有序的指令(是能够完成特定任务的指令序列)。的指令序列)。使用程序使用程序设计语言言编写的用来使写的用来使计算机完成一算机完成一定任定任务的一系列命令的集合便构成的一系列命令的集合便构成程序程序。编写程序的工作写程序的工作则称称为程序程序设计。41.1 程序设计语言与程序设计程序设计语言与程序设计什么什么是是程序程序程序程序设计语设计语设计语设计语言言言言?为人和计算机之间都能识别和交流而制定的一种特为人和计算机之间都能识别和交流而制定的一种特为人和计算机之间都能识别和交流而制定的一种特为人和计算机之间都能识别和交流而制定的一种特定语言,这种特定的语言就是定语言,这种特定的语言就是定语言,这种特定的语言就是定语言,这种特定的语言就是程序设计语言程序设计语言程序设计语言程序设计语言。可以从不同的角度对程序设计语言进行分类可以从不同的角度对程序设计语言进行分类可以从不同的角度对程序设计语言进行分类可以从不同的角度对程序设计语言进行分类:通用通用通用通用语语言言言言专专用用用用语语言言言言结结构化构化构化构化语语言言言言模模模模块块化化化化语语言言言言面向面向面向面向对对象象象象语语言言言言机器机器机器机器语语言言言言汇编语汇编语言言言言高高高高级语级语言言言言低级语言低级语言高级语言高级语言从应用范围分从应用范围分从应用范围分从应用范围分从程序设计方法分从程序设计方法分从程序设计方法分从程序设计方法分从与机器的联系程度分从与机器的联系程度分从与机器的联系程度分从与机器的联系程度分5只有用机器语言编写的源程序才能在计只有用机器语言编写的源程序才能在计算机上直接执行,用其他语言编写的源程序算机上直接执行,用其他语言编写的源程序都需要翻译后才能被计算机所理解并执行。都需要翻译后才能被计算机所理解并执行。用于语言翻译的工具称为用于语言翻译的工具称为语言处理程序语言处理程序或或翻翻译程序译程序,用不同的程序设计语言编写出来的,用不同的程序设计语言编写出来的源程序源程序,需要使用不同的语言处理程序来翻,需要使用不同的语言处理程序来翻译。通过语言处理程序翻译后的目标代码称译。通过语言处理程序翻译后的目标代码称为为目标程序目标程序。1.1 程序设计语言与程序设计程序设计语言与程序设计6n n高级语言源程序高级语言源程序的翻译方式:的翻译方式:n n 解释方式解释方式解释程序解释程序高级语言源程序高级语言源程序高级语言源程序高级语言源程序执行结果执行结果执行结果执行结果解释程序解释程序解释程序解释程序数据数据数据数据n n 编译方式编译方式编译程序编译程序高级语言源程序高级语言源程序高级语言源程序高级语言源程序目标程序目标程序目标程序目标程序编译程序编译程序编译程序编译程序数据数据数据数据可执行程序可执行程序可执行程序可执行程序连接程序连接程序连接程序连接程序执行结果执行结果执行结果执行结果执行执行执行执行1.1 程序设计语言与程序设计程序设计语言与程序设计71.1 程序与程序设计语言程序与程序设计语言 1.1.2 程序设计语言的发展程序设计语言的发展 人们常把编写程序的过程称为程序设计。在进人们常把编写程序的过程称为程序设计。在进行程序设计时离不开程序设计语言。程序设计语行程序设计时离不开程序设计语言。程序设计语言的种类很多,从其发展历史以及功能情况来划言的种类很多,从其发展历史以及功能情况来划分可以大致划分成五个阶段:分可以大致划分成五个阶段:1、机器语言:、机器语言:计算机可以直接识别和执行的二进制语言。计算机可以直接识别和执行的二进制语言。如:如:加法指令加法指令:1 0 0 0 0 0 0 0 减法指令减法指令:1 0 0 1 0 0 0 0特点:计算机可以直接识别和执行,效率高,特点:计算机可以直接识别和执行,效率高,节省内存;但难以阅读和记忆。节省内存;但难以阅读和记忆。81.1 程序与程序设计语言程序与程序设计语言2、汇编语言:、汇编语言:用用“助记符助记符”来表示机器指令。来表示机器指令。如:如:ADD A,B ADD A,B SUB A,B SUB A,B计计算算机机不不能能直直接接识识别别和和执执行行用用汇汇编编语语言言编编写写的的源源程程序序,它它必必须须经经过过一一个个叫叫汇汇编编程程序序的的系系统统软软件件翻翻译译成成机机器器语语言言程程序序(即即目目标程序)后才能执行。标程序)后才能执行。3、算法语言:、算法语言:即高级语言,不依赖于机器,降低了编程的难度。即高级语言,不依赖于机器,降低了编程的难度。如:如:C、PASCAL、FORTRAN等,用等,用+和和-来来 表示加减运算。表示加减运算。计算机也不能直接执行算法语言描述的源程序,必须先经过计算机也不能直接执行算法语言描述的源程序,必须先经过编译程序或解释程序翻译成目标程序后,才能由计算机执行。编译程序或解释程序翻译成目标程序后,才能由计算机执行。91.1 程序与程序设计语言程序与程序设计语言4、面向任务的程序设计语言:面向任务的程序设计语言:是非过程化的语言,不需要知道问题是如何求解的。是非过程化的语言,不需要知道问题是如何求解的。例如:要从某学生表例如:要从某学生表SSSS用数据库(用数据库(SQLSQL)查询语言获取表中查询语言获取表中记录的信息,采用记录的信息,采用SELECTSELECT语句,描述如下:语句,描述如下:SELECT SSNO,SSNAME,SSAGE,SSSEX FROM SSSELECT SSNO,SSNAME,SSAGE,SSSEX FROM SS5 5、面向对象的程序设计语言:面向对象的程序设计语言:认为系统是由许多对象组成的,对象通过消息相互认为系统是由许多对象组成的,对象通过消息相互 联系和相互作用,从而完成系统的功能。如联系和相互作用,从而完成系统的功能。如C+C+,设计的程序更易懂设计的程序更易懂,更适合更大规模的程序开发。更适合更大规模的程序开发。101.1 程序与程序设计语言程序与程序设计语言1、C语言的发展概况语言的发展概况 起源于起源于1968年发表的年发表的CPL语言语言。语言是美国电话电报公司(语言是美国电话电报公司(AT&T)贝尔实验室于)贝尔实验室于70年代年代初研制出来的。发明者是初研制出来的。发明者是Dennis.M.Ritchie。1978年,由年,由B.W.Kernighan和和D.M.Ritchie合著的合著的The C Programming Language一书,称之为一书,称之为“K&R”标准。后来又被多次改进,并出标准。后来又被多次改进,并出现了多种版本。现了多种版本。1983年开始,美国国家标准化协会(年开始,美国国家标准化协会(ANSI),),根据语言问世以来各种版本对语言的发展和扩充,制定了根据语言问世以来各种版本对语言的发展和扩充,制定了ANSI C标准,于标准,于1989年颁布,称为年颁布,称为C89标准。标准。1994、1995年又年又两次做了修订,即两次做了修订,即C89的的95修正案。修正案。1999年产生了年产生了C99新标准。新标准。目前在微型计算机上使用的有目前在微型计算机上使用的有Microsoft C,Quick C,Turbo C,Borland C 等多种版本。等多种版本。1.1.3 C语言的语言的发展发展及及特点特点111.1 程序与程序设计语言程序与程序设计语言1)语言简洁、紧凑,使用方便、灵活)语言简洁、紧凑,使用方便、灵活 2)具有结构化的控制语句,以函数作为程序模块以)具有结构化的控制语句,以函数作为程序模块以实现程序的模块化。实现程序的模块化。3)数据类型丰富)数据类型丰富 4)允许直接对位、字节和地址进行操作)允许直接对位、字节和地址进行操作 5)可直接操纵硬件)可直接操纵硬件 6)生成的目标代码质量高,程序执行效率高)生成的目标代码质量高,程序执行效率高 7)可移植性好)可移植性好 2、C语言的特点语言的特点121.2 程序设计方法程序设计方法 程序设计程序设计程序设计程序设计:使用某种程序设计语言编写一些代码:使用某种程序设计语言编写一些代码:使用某种程序设计语言编写一些代码:使用某种程序设计语言编写一些代码来驱动计算机完成特定功能的过程。来驱动计算机完成特定功能的过程。来驱动计算机完成特定功能的过程。来驱动计算机完成特定功能的过程。算法算法算法算法:用计算机解题的方法和步骤。:用计算机解题的方法和步骤。:用计算机解题的方法和步骤。:用计算机解题的方法和步骤。程序设计的基本过程程序设计的基本过程程序设计的基本过程程序设计的基本过程:分析所求解的问题,抽象:分析所求解的问题,抽象:分析所求解的问题,抽象:分析所求解的问题,抽象数学模型,设计合适的算法,编写程序数学模型,设计合适的算法,编写程序数学模型,设计合适的算法,编写程序数学模型,设计合适的算法,编写程序(编写代编写代编写代编写代码码码码),调试运行直至得到正确结果、编写程序文,调试运行直至得到正确结果、编写程序文,调试运行直至得到正确结果、编写程序文,调试运行直至得到正确结果、编写程序文档等阶段。档等阶段。档等阶段。档等阶段。131.2 程序设计方法程序设计方法程序设计的基本过程程序设计的基本过程141.2 程序设计方法程序设计方法 1.2.1 结构化程序设计方法结构化程序设计方法 1.结构化程序设计特征结构化程序设计特征结构化程序设计的特征主要有以下几点:结构化程序设计的特征主要有以下几点:(1)以三种基本结构(顺序、分支、循环,详细内)以三种基本结构(顺序、分支、循环,详细内容参考第容参考第3章)的组合来描述程序;章)的组合来描述程序;(2)整个程序采用模块化结构;)整个程序采用模块化结构;(3)有限制地使用)有限制地使用goto转移语句,在非用不可的情况转移语句,在非用不可的情况下,也要十分谨慎,并且只限于在一个结构内部跳下,也要十分谨慎,并且只限于在一个结构内部跳转,不允许从一个结构跳到另一个结构,这样可缩转,不允许从一个结构跳到另一个结构,这样可缩小程序的静态结构与动态执行过程之间的差异,使小程序的静态结构与动态执行过程之间的差异,使人们能正确理解程序的功能;人们能正确理解程序的功能;151.2 程序设计方法程序设计方法(4)以控制结构为单位,每个结构只有一个入口,以控制结构为单位,每个结构只有一个入口,一个出口,各单位之间接口简单,逻辑清晰;一个出口,各单位之间接口简单,逻辑清晰;(5)采用结构化程序设计语言书写程序,并采用一采用结构化程序设计语言书写程序,并采用一定的书写格式使程序结构清晰,易于阅读;定的书写格式使程序结构清晰,易于阅读;(6)注意程序设计风格。注意程序设计风格。2.自顶而下的设计方法自顶而下的设计方法 结构化程序设计的总体思想是采用模块化结构,结构化程序设计的总体思想是采用模块化结构,自上而下,逐步求精。自上而下,逐步求精。161.2 程序设计方法程序设计方法面向对象程序设计方法(面向对象程序设计方法(Orient Object Programming,缩写为,缩写为OOP)认为客观世界是由各)认为客观世界是由各种各样的实体组成的,这些实体就是面向对象方法种各样的实体组成的,这些实体就是面向对象方法中的对象。对象之间的交互通过发送消息来实现,中的对象。对象之间的交互通过发送消息来实现,从而驱动程序执行来完成系统的功能。从而驱动程序执行来完成系统的功能。面向对象程序设计把数据看作程序开发中的基本面向对象程序设计把数据看作程序开发中的基本元素,并且不允许它们在系统中自由流动。它将数元素,并且不允许它们在系统中自由流动。它将数据和操作这些数据的函数紧密的连结在一起,并保据和操作这些数据的函数紧密的连结在一起,并保护数据不会被外界的函数意外的改变。护数据不会被外界的函数意外的改变。1.2.2 面向对象程序设计方法面向对象程序设计方法 171.3 C语言程序的基本结构语言程序的基本结构 一个完整的语言程序,是由一个一个完整的语言程序,是由一个main()函数(又称主函数)函数(又称主函数)和若干个其它函数结合而成的,或仅由一个和若干个其它函数结合而成的,或仅由一个main()函数构成函数构成/*/*功能:仅由功能:仅由main()main()函数构成的语言程序示例函数构成的语言程序示例*/*/*源程序名:源程序名:CH0105.C*/CH0105.C*/*01*/*01*/#include/*02*/*02*/main()main()/*03*/*03*/*04*/*04*/printf(“Helloprintf(“Hello World!n”);World!n”);/*05*/*05*/程序运行时,在屏幕上显示一行英文:程序运行时,在屏幕上显示一行英文:Hello World!Hello World!。说明:说明:(1)main是主函数的函数名,表示这是一个主函数。是主函数的函数名,表示这是一个主函数。(2)函数调用语句,)函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。函数的功能是把要输出的内容送到显示器去显示。(3)printf函数是一个由系统定义的标准函数,可在程序中直接调用。函数是一个由系统定义的标准函数,可在程序中直接调用。(4)#include是编译预处理命令,其作用是将某个已经存在的文件包含到程序中。是编译预处理命令,其作用是将某个已经存在的文件包含到程序中。181.3 C语言程序的基本结构语言程序的基本结构1.3.1 C程序的结构特点程序的结构特点()一个语言源程序可以由一个或多个源文件组成。()一个语言源程序可以由一个或多个源文件组成。()每个源文件可由一个或多个函数组成,关于函数()每个源文件可由一个或多个函数组成,关于函数的内容将在以后第四章介绍。的内容将在以后第四章介绍。()函数是语言程序的基本单位。一个源程序不论()函数是语言程序的基本单位。一个源程序不论由多少个文件组成,都有一个且只能有一个由多少个文件组成,都有一个且只能有一个main函数,函数,即主函数。即主函数。main()函数的作用,相当于其它高级语言函数的作用,相当于其它高级语言中的主程序;其它函数的作用,相当于子程序。中的主程序;其它函数的作用,相当于子程序。()()C语言程序总是从语言程序总是从main()函数开始执行。一个函数开始执行。一个语言程序,总是从语言程序,总是从main()函数开始执行,而不论其在函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行程序中的位置。当主函数执行完毕时,亦即程序执行完毕。完毕。191.3 C语言程序的基本结构语言程序的基本结构1.3.1 C程序的结构特点程序的结构特点()源程序中可以有预处理命令()源程序中可以有预处理命令(include 命令仅为命令仅为其中的一种),预处理命令通常应放在源文件或源其中的一种),预处理命令通常应放在源文件或源程序的最前面。程序的最前面。()每一个说明,每一个语句都必须以分号结尾。()每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号但预处理命令,函数头和花括号“”之后不能加分之后不能加分号。号。()标识符,关键字之间必须至少加一个空格以示()标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间间隔。若已有明显的间隔符,也可不再加空格来间隔。隔。201.3 C语言程序的基本结构语言程序的基本结构()所有语句都必须以分号()所有语句都必须以分号“;”结束,函数的结束,函数的最后一个语句也不例外。最后一个语句也不例外。()程序行的书写格式自由,既允许一行内写几()程序行的书写格式自由,既允许一行内写几条语句,也允许一条语句分写在几行上。如果某条条语句,也允许一条语句分写在几行上。如果某条语句很长,一般需要将其分写在几行上。语句很长,一般需要将其分写在几行上。()允许使用注释。()允许使用注释。C语言的注释格式为:语言的注释格式为:/*/1.3.2 源程序书写格式源程序书写格式 211.4 C语言的基本语法单位语言的基本语法单位 1.4.1 语言的字符集语言的字符集 1.4.2 关键字关键字1.4.3 标识符标识符 1.4.4 分隔符分隔符 1.4.5 注释注释221.4.1 语言的字符集语言的字符集字字符符是是组组成成语语言言的的最最基基本本的的元元素素。语语言言字字符符集集由由字字母母,数数字字,空空格格,标标点点和和特特殊殊字字符符组组成成。在在字字符符常常量量,字字符符串串常常量量和和注注释释中还可以使用汉字或其它可表示的图形符号。中还可以使用汉字或其它可表示的图形符号。()字母:小写字母()字母:小写字母a az z共共2626个,大写字母个,大写字母A AZ Z共共2626个;个;()数字:()数字:0 09 9共共1010个;个;()空空白白符符:空空格格符符、制制表表符符、换换行行符符等等统统称称为为空空白白符符。空空白白符符只只在在字字符符常常量量和和字字符符串串常常量量中中起起作作用用。在在其其它它地地方方出出现现时时,只只起起间间隔隔作作用用,编编译译程程序序对对它它们们忽忽略略。因因此此在在程程序序中中使使用用空空白白符符与与否否,对对程程序序的的编编译译不不发发生生影影响响,但但在在程程序序中中适适当当的的地地方方使使用空白符将增加程序的清晰性和可读性;用空白符将增加程序的清晰性和可读性;()标点和特殊字符。()标点和特殊字符。231.4.2 关键字关键字 关关键键字字是是由由语语言言规规定定的的具具有有特特定定意意义义的的字字符符串串,通通常常也也称称为为保保留留字字。用用户户定定义义的的标标识识符符不不应应与与关关键键字字相相同。标准同。标准C C定义的定义的3232个关键字如下表个关键字如下表:241.4.3 标识符标识符在在程程序序中中使使用用的的变变量量名名、函函数数名名、标标号号等等统统称称为为标标识识符符。除除库库函函数数的的函函数数名名由由系系统统定定义义外外,其其余余都都由由用用户户自自定定义义。C C 规规定定,标标识识符符只只能能是是字字母母(A AZ Z,a az z)、数数字字(0 09 9)、下下划划线线(_ _)组成的字符串,并且其第一个字符必须是字母或下划线。)组成的字符串,并且其第一个字符必须是字母或下划线。以下标识符是合法的:以下标识符是合法的:a ax x_3x_3xBOOK_1BOOK_1sum5sum5以下标识符是非法的:以下标识符是非法的:3s 3s 以数字开头以数字开头 s*Ts*T 出现非法字符出现非法字符*-3x-3x 以减号开头以减号开头 bowy-1 bowy-1 出现非法字符减号出现非法字符减号251.4.4 分隔符分隔符 语言中采用的分隔符包括逗号和空格。语言中采用的分隔符包括逗号和空格。(1)逗号主要用在类型说明和)逗号主要用在类型说明和函数函数参数表中,分隔参数表中,分隔各个变量,逗号也可以做运算符,具体参照本教程第各个变量,逗号也可以做运算符,具体参照本教程第二章。二章。(2)空格多用于语句各单词之间,作间隔符。在关)空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误。否则将会出现语法错误。例如,例如,int a;不能写成不能写成 inta;C编译器会把编译器会把inta当成一个标识符处理,其结果必然当成一个标识符处理,其结果必然出错。出错。261.4.5 注释注释 C C 语言的注释符是以语言的注释符是以“/*/*”开头并以开头并以“*/”结尾的串。程序结尾的串。程序编译时,不对注释作任何处理。编译时,不对注释作任何处理。(1 1)“/*/*”和和“*/”必须成对使用,且必须成对使用,且“/”和和“*”、以、以及及“*”和和“/”之间不能有空格,否则出错。为避免遗漏必须之间不能有空格,否则出错。为避免遗漏必须配对使用的符号,例如注释符号、函数体的起止标识符(花括配对使用的符号,例如注释符号、函数体的起止标识符(花括号)、圆括号等等,在输入时,可连续输入这些起止标识符,号)、圆括号等等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。在起止标识符嵌套然后再在其中进行插入来完成内容的编辑。在起止标识符嵌套时,以及相距较远时,这样做更有必要。时,以及相距较远时,这样做更有必要。(2 2)注释的位置,可以单占)注释的位置,可以单占1 1行,也可以跟在语句的后面。行,也可以跟在语句的后面。(3 3)如果)如果1 1行写不下,可另起行写不下,可另起1 1行继续写。行继续写。(4 4)注释中允许使用汉字。在非中文操作系统下,汉字将以)注释中允许使用汉字。在非中文操作系统下,汉字将以乱码呈现,但不影响程序运行。乱码呈现,但不影响程序运行。27C语言是一种编译型程序语言。语言是一种编译型程序语言。调试一个调试一个C程序需要经历程序需要经历4个基本步骤:编辑、编个基本步骤:编辑、编译、连接和执行。译、连接和执行。1.5 C语言程序的开发过程与环境语言程序的开发过程与环境正确正确正确正确正确正确有错误有错误有错误有错误编译编译 连接连接 运行运行编辑编辑有错误有错误281.5.1 源程序的编辑、编译、连接与执行源程序的编辑、编译、连接与执行1.编辑(编辑(Edit)编程人员把程序代码输入计算机的过程或修改已经存在的代编程人员把程序代码输入计算机的过程或修改已经存在的代码的过程就是编辑。码的过程就是编辑。2.编译(编译(Compile/Make)对源程序的语法和逻辑结构等进行检查以生成目标文件对源程序的语法和逻辑结构等进行检查以生成目标文件(Object)的过程就是编译。)的过程就是编译。3.连接连接(Link)连接的作用是使用系统提供的连接程序(或称连接器连接的作用是使用系统提供的连接程序(或称连接器Linker)把目标文件、其他目标程序模块与系统提供的标准库)把目标文件、其他目标程序模块与系统提供的标准库函数有机结合起来,生成可以运行的可执行文件。函数有机结合起来,生成可以运行的可执行文件。4.运行运行(Run)在在MS-DOS下通过直接键入可执行文件主文件名后按回车键下通过直接键入可执行文件主文件名后按回车键来运行,来运行,Windows下可通过双击可执行文件图标运行。下可通过双击可执行文件图标运行。291.5.2 Visual C+6.0集成开发环境集成开发环境Microsoft Visual C+(下简称(下简称MSVC,VC)是)是美国微软公司生产的基于其美国微软公司生产的基于其Windows系统的软件开系统的软件开发工具。发工具。30