1、第1章 C语言程序设计概述1.1 程序设计语言程序设计语言1.2 程序设计的基本方法程序设计的基本方法1.3 程序设计语言的内容体系程序设计语言的内容体系1.4 C语言的特点语言的特点1.5 基本基本C语言程序结构语言程序结构实操训练实操训练课外练习课外练习1.1 程序设计语言程序设计语言为什么要学习程序设计语言?为什么要学习程序设计语言?从计算机外部来看,计算机似乎具有人的智能,能实现人的各种意图。而事实上,计算机是程序控制的高度自动化的信息处理工具。要让计算机来实现人的意图,必须将意图编写成程序,输入并存储到计算机的存储器中,只有当计算机执行程序时,才会按人的意图进行规定的操作。也就是说,
2、没有程序,计算机就表现不出任何功能。程序是解决某一问题的方法和步骤向计算机的表达或描述。这种表达或描述必须采用人与计算机能进行交互的语言。这种与计算机交互的语言就是程序设计语言。编程语言有哪些?各具有什么特点?编程语言有哪些?各具有什么特点?随着计算机应用技术的发展,程序设计语言也经历了不同的发展阶段,出现了多种语言。根据人与计算机的交互性,程序设计语言可分为低级语言和高级语言。低级语言包括机器语言、汇编语言,高级语言则分为面向过程的高级语言和面向对象的高级语言。机器语言是计算机能够直接识别的语言,它是一组二进制编码指令。在计算机应用初期,人们用机器语言编写程序。但是机器语言是冗长的二进制代码
3、,难理解、难记忆、难编程,只有少数计算机专业人员才会使用。随着计算机应用技术的发展,计算机语言一直朝着“人性化”的方向发展,先后出现了汇编语言和不同种类的高级语言。汇编语言是用一组便于人们记忆的助记符号来表示机器语言的指令。汇编语言中的一条指令对应一条机器指令。机器语言和汇编语言都是面向具体计算机的语言,每一种计算机都有自己独特的机器语言和汇编语言。由于它们依赖具体的计算机,所以被称为低级语言。1面向过程的语言面向过程的语言所谓过程,其实质是某个输入集合到某个输出集合的一个映射,可以用某种描述形式来说明这种映射的细节。从解决问题的角度来讲,可以把解决问题的方式抽象为较大的过程,再把这个较大的过
4、程分解为较小的过程,一直到具体的操作步骤。这些过程都可以用某种高级语言按照一定的顺序和规则进行描述。这种类型的程序设计语言称为面向过程的高级语言。也就是说,用面向过程的语言编程只需根据解决问题的过程,把过程的每一步按顺序用语言描述出来,也称为基于算法的编程语言。面向过程的编程语言有BASIC、FORTRAN、COBOL、PASCAL、C、Ada、LISP等。2面向对象的语言面向对象的语言面向对象的语言是用客观世界中描述事物的方法来描述一个程序要描述的事物,使程序设计更接近现实世界的思维方式,更简捷高效。面向对象的程序设计是以处理的数据为对象,根据对象的属性与操作进行封装并定义接口来组织程序。常
5、用的面向对象的程序设计语言有Visual C+、Visual Basic、Dephi、Java等。计算机编程语言只是提供了一种人与计算机进行交互的方法或工具。计算机唯一能识别的语言只有机器语言,所有非机器语言编写的程序都要转换为机器语言,才能在计算机中执行。这种转换一般称为编译。编译由系统软件来完成。所以,为了方便用户使用,任何高级语言都有一个实现编译等操作功能的语言处理软件。C语言的语言处理软件有多种,如Touber C、Visual C+6.0等。如何将非机器语言程序转换为计算机能够识别的机器如何将非机器语言程序转换为计算机能够识别的机器语言代码?语言代码?由非机器语言编写的程序一般称为源
6、程序,能被计算机直接执行的程序称为可执行程序。把一个源程序变换成一个可执行程序,一般要经过图1.1所示的处理。图1.1 源程序转换处理步骤高级语言的种类很多,不同的语言各有不同的特点与使用场合,但从原理上看,各种语言都包含一些相同的功能和结构。对初学者来说,只要选择有代表性的语言,掌握了程序设计语言的规律和内在功能结构,就很容易学习和应用其他语言。现在一般都把C语言作为程序设计的入门语言。1.2 程序设计的基本方法程序设计的基本方法程序设计需要哪些知识与技术?程序设计需要哪些知识与技术?程序设计涉及多方面的知识和技术,可以将程序设计所包含的内容表示为程序程序=算法算法+数据结构数据结构+程序设
7、计方法程序设计方法+语言工具语言工具程序设计是以上四个方面知识的综合运用与贯通。事实上,这四个方面中的每一个都属于专门课程的范畴。本书的重点是通过C语言来学习程序设计,但对算法、数据结构、程序设计方法应有一个初步了解,以便于理解和设计C语言程序。1.2.1 数据结构与算法数据结构与算法数据结构与算法具有密切的联系。数据结构是加工对象,算法则是对数据结构加工处理的方法。不同的数据结构可能需要采取不同的算法,不同的算法可以对不同的数据进行加工处理。1数据结构数据结构何谓数据结构?数据结构在程序中如何表示?何谓数据结构?数据结构在程序中如何表示?数据结构指的是数据的组织形式,例如,字符数组、方程组系
8、数矩阵、人员的基本信息表、反映部门组织机构关系的树形图、反映网络结构及信息的网状图等都是不同的数据结构。一般情况下,数据元素之间不是相互孤立的,常常存在某些逻辑上的联系,这些联系与存储无关,独立于计算机。我们把客观事物本身的逻辑关系称为逻辑结构。数据要能被计算机处理,就必须存储在计算机中。通常把数据元素及其关系在计算机内的表示称为数据的存储结构,它是数据的逻辑结构在计算机存储器中的映射。组织和存储数据的目的是能被计算机处理,即对数据施加各种运算。因此,可以在逻辑结构上定义运算集合,而在存储结构上实现这些运算。2算法算法何谓算法?算法如何表示?何谓算法?算法如何表示?所谓算法,是解决某一问题所采
9、取的方法和步骤。程序设计中的算法把解决问题的每一步骤具体化为计算机的操作,即算法解决计算机在什么情况下应该“做什么”和“怎样做”的问题。软件行业把软件开发分为设计和编码两个不同的阶段。所谓设计,就是算法的设计,编码则是对算法以编程语言来表示。算法的设计就是算法的分析与表示。算法设计没有固定的模式。同一个问题可有多种算法,不同的设计者可以设计出不同的算法。下面通过一个实例来介绍算法及算法设计。例如:一个班有30个学生,要求将一门课考试成绩不及格的学生的学号和成绩打印出来。假设用c表示学生的学号,ci代表第i个学生的学号,用s表示学生的成绩,si代表第i个学生的成绩,则问题的算法步骤如下:(1)1
10、i(相当于设立了一个指针,先指向第一个学生);(2)如果si60,则打印出学号ci和成绩si,否则不打印;(3)i+1i(相当于修改指针,使其指向下一个学生);(4)如果i30,返回步骤(2),继续执行,否则算法结束。算法要采用一定的形式表示出来,其目的是便于用一种计算机编程语言把算法变换成能在计算机上实现的程序。算法的描述有多种方式,如图解方式、语言方式等。其中,流程图是最容易理解的一种最基本的算法描述方法。为了使读者在C语言学习中会分析并表示算法,下面对流程图作一简单介绍。流程图采用一些规定的图形符号来表示相应的处理流程。常用的图形元素如图1.2所示。上例用流程图表示则如图1.3所示。图1
11、.2 流程图中常用的图形元素图1.3 算法流程图流程图的另一种表示形式是N_S图。N_S图是去掉流程线,把算法写在一个框内的流程图。几种基本程序结构的N_S图符号如图1.4所示。图1.3算法的N_S图表示如图1.5所示。图1.4 几种基本程序结构的N_S图符号图1.5 N_S图示例1.2.2 程序设计方法程序设计方法程序设计的基本方法有哪些?程序设计的基本方法有哪些?程序设计方法涉及非常丰富的内容,但模块化程序设计思想始终贯穿所有程序设计的过程。模块化程序设计方法的基本思想就是抽象和分解。抽象是人类认识世界的基本法则之一。现实世界中的某些事物、状态或过程之间总是存在着某些相似的方面,把这些方面
12、集中和概括起来,暂时忽略它们之间的差异,或者说抽出事物的本质特性而暂时不考虑其细节,这就是抽象。抽象包含了系统的观点和分层的观点,即可以把程序设计问题看成一个系统,这个系统可用高级的抽象概念来理解和构造,这些高级的抽象概念又可用较低级的抽象概念来理解和构造,如此进行下去,直到最低层次的模块可用某种程序设计语言的语句来表示为止。实际上,对系统的每一次抽象都是向更具体的方面推进的过程,也是进一步分解的过程。因此,在抽象的过程中,同时伴随着分解。当我们遇到一个较大、较复杂的问题时,不应急于编写程序代码,而应该首先把问题自顶向下逐步分解,细化成一个个程序模块,然后对每一个模块进一步细化。处于不同层次的
13、模块应该只考虑本模块内部的问题而不必考虑其他模块内部的问题,顶层模块控制系统的主要功能并影响全局,底层模块则完成对数据的具体处理。信息隐蔽和局部化是模块化程序设计方法的另一基本思想。这一思想的大意是:在模块化的程序设计过程中,一个模块内包含的信息不能被不需要这些信息的模块访问,也就是说,模块的划分应该遵循独立性原则,即模块彼此之间互相依赖的程度要小,而模块内部各元素彼此之间的结合要紧密。结构化程序设计是程序设计的重要方法。结构化程序设计是以模块设计为中心的,任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构。1.3 程
14、序设计语言的内容体系程序设计语言的内容体系程序设计语言包括哪些基本内容?应以怎样的思想方程序设计语言包括哪些基本内容?应以怎样的思想方法学习程序设计语言?法学习程序设计语言?程序设计语言是人与计算机进行交互的语言。它既具有自然语言的要素和规律,又有计算机处理所要求的一些特点。为了从自然语言体系来联想程序设计语言体系,图1.6对自然语言和程序设计语言进行了对比。从图中可以看出,程序设计语言与自然语言具有可类比的体系内容,但它们又有很大差别。自然语言中,在字词及符号的基础上,依据语法规则可造句。而程序设计语言中,每一条语句表示计算机内部的一个功能操作,且有严格的格式规定,必须按照规定书写,否则计算
15、机系统就不能识别。程序依据算法,由相应的功能语句构成,要求计算机实现一个特定的功能。学习了简单数据对象和简单算法的结构语句就可以编写简单程序,进一步学习复杂数据对象、复杂算法的结构语句就可以编写复杂功能程序了。图1.6 自然语言和程序设计语言的对比1.4 C语言的特点语言的特点为什么要学习为什么要学习C语言?语言?C语言是20世纪70年代初贝尔实验室的D.M.Ritchie在总结之前高级语言优、缺点的基础上,针对UNIX操作系统的研发而设计出的高级编程语言。随着UNIX操作系统的闻名,C语言很快风靡世界,成为最流行的程序设计语言。在C语言的发展初期,出现了多种版本,标准不一。C语言内部具有许多
16、功能结构和应用特点,这些特点只有在学习C语言的过程中才能领悟。下面仅对C语言的一般特点作简要介绍。(1)语言简洁,使用灵活,易于学习和使用。C语句接近于自然语言和数学语言,功能与语义紧密联系,容易理解和应用。(2)数据类型丰富。C语言包含丰富的数据类型,涵盖了实际中所面临的各种数据结构,几乎不需要用户自己定义数据结构,给程序设计带来了很大便利。(3)数据处理功能强。C语言包含数值运算符、字符运算符、逻辑运算符和字/位运算符,它们与丰富的数据类型相结合,构成了灵活多样的表达式,可以实现其他高级语言难以实现的运算。(4)具有低级语言对计算机的一些硬件资源进行控制的功能。C语言不但具有其他高级语言的
17、功能和应用方式,还兼有低级语言的许多功能,例如对存储器或I/O端口的地址访问、位操作等功能,不仅是通用的程序设计语言,又广泛地应用于系统软件开发和实时控制应用系统开发中。(5)既支持结构化程序设计,又支持面向对象程序设计。随着程序设计方法和技术的发展,在基本C语言的基础上,又产生了C语言的超集C+语言,二者具有良好的兼容性和继承性,使得基本C语言支持结构化程序设计,C+语言支持面向对象程序设计。学习基本C语言是学习C+的基础。C语言程序可以在C+编译系统中运行,本书中的所有程序都是在Visual C+6.0环境中运行的。(6)生成的目标代码效率较高。汇编指令与机器码指令一一对应,汇编语言源程序
18、生成的目标代码几乎不包含冗余码。一般高级语言源程序生成的目标代码都包含一定量的冗余代码,C语言源程序生成的目标代码所包含的冗余代码较少,其目标代码的效率仅比汇编语言的低10%20%。(7)可移植性好。C语言程序几乎可在各种类型的计算机和操作系统上运行。1.5 基本基本C语言程序结构语言程序结构C语言程序是什么样子的?语言程序是什么样子的?C语言程序书写有什么基本语言程序书写有什么基本要求?要求?在学习有关C语言的具体内容之前,对基本程序结构应有一个初步了解,这样一方面能认识C语言的一些特点,另一方面能了解一个C语言程序的基本组成,从而有助于后面的学习。下面通过一个简单的C语言程序来说明其构成特
19、点。1.结构角度的结构角度的C语言程序的构成特点语言程序的构成特点(1)C语言程序由函数构成。函数是C语言程序的基本单位,是一个实现特定功能的程序模块,相当于其他语言中的子程序。一个C语言程序必须有一个主控函数(main),程序从main()函数的第一条可执行语句开始执行。一个C语言程序可以包含若干个函数(系统提供的库函数和用户定义的函数),由函数调用关系形成完整的功能体系。从这个角度来说,一个C语言程序的设计,就是一个个函数及其调用关系的设计。在例1.1中,因功能简单,所以只有一个主函数。(2)一个函数由函数首部和函数体两部分构成。因为C程序中的函数是一个功能相对独立的模块,所以在函数首部要
20、定义本函数被引用的名称及其模块之间需传递的参数;函数体是功能的具体实现部分,函数体被一对大括号界定。具体的函数定义内容将在后续章节中介绍。(3)函数体中每一条语句用“;”作为结束符,也就是说,“;”是C语言程序中语句的唯一标识。(4)在一个C语言程序中若要调用标准库函数,在程序首部应用预处理命令#include把有关信息包含在本程序中。C语言编译系统为各类标准库函数提供了原型定义,分别包含在扩展名为.h的头文件中。使用哪一类库函数,应用#include把相应的头文件包含进来。(5)在C语言程序的任一语句行可以用“/”进行注释。注释只是为了提高程序的可读性,对程序的功能及处理没有丝毫影响。注释内
21、容可以采用程序员习惯的语言字符。2.功能角度的功能角度的C语言程序的构成特点语言程序的构成特点从功能角度来看,一个程序就是对特定数据进行存储和处理,并将处理结果输出给用户的过程。所以,一个C语言程序应包含提供原始数据、数据存储、数据处理、数据输出这几个环节的操作语句。如例1.1中:(1)“int a,b,s;”用于为存储数据定义了三个变量。在C语言程序中,一个变量代表存放一个数据的单元。(2)“scanf(%d,%d,&a,&b);”用于提供原始数据,即从键盘上输入两个运算数。(3)“s=a+b;”用于对数据加工处理,即实现两数相加的运算。(4)“printf(sum=%dn,s);”用于将处
22、理结果输送给用户。没有这个语句,就得不到运行结果。3.C语言程序设计规范语言程序设计规范利用C语言编写程序,必须遵守C语言系统的基本规定,例如基本字符集、各种关键字、符号命名规则、语句格式、函数定义规则和程序结构等。为了提高程序的可读性和软件开发的效率,在C语言系统基本规定的基础上,还有不同的编程规范。附录E列出了一种编程规范,可供读者参考。在初学C语言程序设计时,可以暂不关心C语言系统基本规定之外的编程规范,但建立编程规范意识和习惯,对将来开发实际应用系统是很有好处的。实操训练实操训练实训任务实训任务 学习学习VC+6.0集成开发环境,集成开发环境,了解了解C语言程序的组成语言程序的组成实训
23、项目 模拟单一功能计算器。输入、编译、运行例1.1中的加法计算器程序。实训指导实训指导(1)启动VC+6.0,屏幕界面见附录F中的图F-1。(2)建立文件。在菜单栏选择“File”在下拉菜单中点击“新建”在对话窗口中选择“文件”标签在下方列表中选择“C+Source File”在“文件名”对话框中输入文件名在“位置”框中选择文件保存的位置点击“确定”按钮,出现“客户区”(编辑区)。(3)编辑(输入)程序。在“客户区”(编辑区)输入源程序。(4)编译程序。在菜单栏选择“Build”在下拉菜单中点击“编译”,在屏幕下方输出区显示编译信息。如果程序有错误,则显示错误提示信息,可按提示信息修改程序,直
24、到无错误提示。(5)运行程序。在菜单栏选择“Build”在下拉菜单中点击“执行”在运行框中输入两个运算数,显示运算结果。(6)检测运算结果是否正确,体会源程序每一条语句的功能。(7)修改程序,分别实现两个数的减、乘、除运算。课外练习课外练习1思考:(1)计算机通过什么方式来实现人的意图?(2)什么是程序?程序设计包含哪些内容?(3)编程语言有哪些种类?各有何特点?(4)何谓数据结构?何谓算法?它们与程序设计有何关系?(5)表达算法的方式有哪几种?(6)模块化程序设计方法的主要思想是什么?(7)简述程序设计语言与自然语言的异同点。(8)C语言有哪些特点?2画出从a、b、c三数中求出最大数的流程图。