C语言程序设计97871132649490000(1-1)_第1页
C语言程序设计97871132649490000(1-1)_第2页
C语言程序设计97871132649490000(1-1)_第3页
C语言程序设计97871132649490000(1-1)_第4页
C语言程序设计97871132649490000(1-1)_第5页
已阅读5页,还剩244页未读 继续免费阅读

付费阅读全文

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

普通高等教育“互联网+”“十三五”规划教材

C语言程序设计

虞歌邵艳玲编著

内容简介

本书是C语言程序设计的基础教材,以崭新的思路进行设计和编排。全书共分9章,内容包

括程序设计概述,基本程序设计,程序的控制结构,函数,数组,指针,字符串,结构、联合和

链表以及文件,内容全面,通俗易懂。

本书以程序设计零起点读者为主要对象,以培养程序设计能力为目标,通过大量的例题,重

点讲解程序设计思想和方法,力图将C语言基础知识介绍和程序设计能力培养完美结合,培养读

者对程序设计的兴趣,提高读者程序设计水平。

本书适合作为普通高等学校程序设计课程的教材,也可供程序员和编程爱好者参考使用。

图书在版编目(CIP)数据

PC语言程序设计/虞歌,邵艳玲编著.—北京:中国

铁道出版社有限公司,2020.2

普通高等教育“互联网+”“十三五”规划教材

ISBN978-7-113-26494-9

Ⅰ.①C…Ⅱ.①虞…②邵…Ⅲ.①C语言-程序设计-

高等学校-教材Ⅳ.①TP312.8

中国版本图书馆CIP数据核字(2019)第276415号

书名:C语言程序设计

作者:虞歌邵艳玲编著

策划:刘丽丽韩从付编辑部电话2003

责任编辑:刘丽丽彭立辉

封面设计:崔丽芳

责任校对:张玉华

责任印制:郭向伟

出版发行:中国铁道出版社有限公司(100054,北京市西城区右安门西街8号)

网址:/51eds/

印刷:三河市航远印刷有限公司

版次:2020年2月第1版2020年2月第1次印刷

开本:787mm×1092mm1/16印张:15.5字数:380千

书号:ISBN978-7-113-26494-9

定价:45.00元

版权所有侵权必究

凡购买铁道版图书,如有印制质量问题,请与本社教材图书营销部联系调换。电话:(010)63550836

打击盗版举报电话:(010)51873659

前言

PREFACE

随着信息产业的迅速发展,软件人才的需求量越来越大。程序设计是软件人才必备的基础知

识和技能。

程序设计基础是一门理论与实践密切相关、以培养学生程序设计能力为目标的课程。如何消

除学生学习程序设计的畏难情绪,使学生顺利进入程序设计的大门,逐步掌握程序设计思想和方

法,提高实践动手能力,是本课程教学的难题。

程序设计既是科学,也是艺术。学习程序设计是一件非常辛苦的事情,要有非常强的耐心和

实践精神,需要花费大量的时间,不可能一蹴而就,必须从某个起点开始循序渐进。

本书就是一个很好的起点。本书以程序设计零起点读者为主要对象,采用C语言作为程序

设计的描述语言。C语言是目前业界广泛使用的程序设计语言,编者确信选用C语言作为程序设

计基础课程的教学语言是正确的选择。在教学实践中,编者感到C语言简洁、灵活、高效,能

够带给软件开发者无尽的想象空间,同时也深深感到讲授C语言过程中面临的困难和挑战。

尽管目前有关学习C语言的书籍很多,但学习C语言仍然让大多数初学者心存畏惧。编者

一直从事程序设计方面的教学和科研工作,主讲过多门程序设计课程,积累了丰富的教学经验。

在本书编写过程中,编者结合自己学习和使用C语言的经验和感悟,以程序设计为主线,通过

例题,简洁通俗地讲解程序设计思想和方法,并穿插介绍相关的语言知识,循序渐进地培养学生

的程序设计能力。本书对那些渴望掌握C语言而又心存畏惧的初学者是一个很好的选择。

教学改革的重点之一,就是要抓学生实践动手能力的培养,学生的实践能力是实现就业的决

定因素,而就业率又是体现教育质量的重要指标。在新工科建设的大背景下,我们实施了程序设

计课程的教学改革,在教学内容、教学方法、教学手段和考核方式上,基本形成了比较完整的体

系,目的就是培养学生的程序设计能力,适应社会对软件人才培养的需求。本书源于教学改革和

教学实践,体现了程序设计教学改革的成果。

本书程序的编译和运行环境为Dev-C++,并配有iStudy通用实践评价平台,可实现在线学

习、练习、测评与考务管理。

读者要获取本书的相关资源,请访问中国铁道出版社有限公司网站/51eds/。

本书由虞歌、邵艳玲编著,王鹏远、郭洪涛老师提供了许多素材、资源。在本书编写过程中,

参考了部分图书资料和网站资料,在此向其作者表示感谢。本书的出版得到了中国铁道出版社有

限公司的大力支持,在此表示衷心的感谢。

由于时间仓促,编者水平和经验有限,书中难免存在疏漏与不妥之处,恳请读者提出宝贵意

见和建议,使本书日臻完善。编者联系方式:yuge@。

编者

2019年10月

目录

CONTENTS

第1章程序设计概述............................12.3.2整数类型.....................................17

1.1计算机系统..........................................12.3.3浮点数类型.................................19

1.1.1计算机硬件系统...........................12.3.4运算符和表达式的

1.1.2计算机软件系统...........................2基本概念.....................................20

1.1.3计算机中的信息表示...................32.3.5算术运算符和算术表达式..............21

1.2程序设计基础......................................52.3.6赋值运算符和赋值表达式...........22

1.2.1程序..............................................52.3.7自增和自减运算符.....................24

1.2.2程序设计语言...............................52.4字符类型............................................25

1.2.3程序设计......................................62.5布尔类型和运算符............................27

1.3C语言的发展历史与特点...................72.5.1布尔类型.....................................27

1.3.1C语言的历史...............................72.5.2关系运算符和关系表达式..........28

1.3.2C语言的特点...............................82.5.3逻辑运算符和逻辑表达式..........29

1.4C程序开发...........................................92.5.4条件运算符和条件表达式..........30

1.4.1基本术语......................................92.6枚举类型............................................32

1.4.2C程序的开发过程........................92.7其他常用运算符................................33

1.5初识C程序........................................102.7.1位运算符.....................................33

1.5.1第一个C程序............................102.7.2逗号运算符和逗号表达式..........35

1.5.2华氏温度转换为摄氏2.7.3长度运算符.................................36

2.7.4运算符小结.................................36

温度的程序.................................11

1.5.3两个整数的加、减、2.8类型之间的关系..................................37

2.8.1隐式(自动)类型转换..............37

乘、除程序.................................12

1.5.4计算圆面积的程序.....................132.8.2显式(强制)类型转换..............38

思考与练习.................................................142.8.3类型定义.....................................39

2.9语句....................................................39

第2章基本程序设计..........................15

2.9.1语句的概念.................................39

2.1标识符及其命名规则.........................152.9.2简单语句.....................................39

2.1.1标识符........................................152.10使用标准库......................................40

2.1.2关键字........................................162.10.1格式化输入/输出函数..............40

2.2变量和常量........................................162.10.2常用数学函数...........................45

2.2.1变量和变量声明.........................162.10.3常用字符处理函数...................48

2.2.2常量和常量声明.........................172.11程序设计错误..................................49

2.3数值数据类型和运算符.....................172.11.1语法错误...................................49

2.3.1数据类型的基本概念.................172.11.2运行时错误...............................50

IIC语言程序设计

2.11.3逻辑错误...................................504.6.3条件编译...................................106

2.11.4测试和调试...............................504.6.4文件包含...................................107

2.12程序设计风格..................................514.7内联函数..........................................107

2.12.1适当的注释...............................514.8终止程序..........................................108

2.12.2命名习惯...................................514.9用计算机生成随机数.......................109

2.12.3程序编排...................................52思考与练习...............................................113

思考与练习

.................................................53第5章数组·········································117

第3章程序的控制结构.......................565.1一维数组..........................................117

3.1单入口、单出口的控制结构.............565.1.1声明和处理一维数组...............117

3.2分支结构............................................575.1.2使用一维数组编写程序............120

3.2.1if语句.........................................575.1.3一维数组和函数.......................125

3.2.2switch语句..................................615.2二维数组..........................................128

3.3循环结构............................................665.2.1声明和处理二维数组...............128

3.3.1while语句...................................665.2.2使用二维数组编写程序............131

3.3.2do…while语句............................705.2.3二维数组和函数.......................135

3.3.3for语句.......................................715.3排序和查找......................................137

3.3.4循环的使用.................................745.3.1排序..........................................137

3.3.5退出循环....................................745.3.2查找..........................................141

3.3.6多重循环....................................765.4可变长数组......................................145

思考与练习.................................................80思考与练习...............................................146

第4章函数........................................82第6章指针·········································149

4.1函数的定义和调用............................826.1指针的基本概念..............................149

4.2函数声明............................................896.1.1指针的定义...............................149

4.3函数设计的基本规则.........................916.1.2声明指针变量...........................150

4.3.1函数头的设计规则.....................916.1.3取地址运算符和解引用

4.3.2函数体的设计规则.....................92运算符.......................................150

4.4递归函数............................................926.1.4指向指针的指针.......................152

4.4.1递归的概念.................................926.2指针赋值..........................................153

4.4.2运用递归求解问题.....................946.3通用指针..........................................155

4.4.3递归和循环.................................976.4使用const修饰指针........................157

4.5变量的作用域..................................1006.5指针和函数......................................158

4.5.1局部变量和全局变量...............1006.5.1指针作为函数的参数...............158

4.5.2动态变量和静态变量...............1016.5.2指针作为函数的返回值............160

4.5.3作用域和生命期.......................1026.5.3指向函数的指针.......................162

4.6预处理指令......................................1036.5.4qsort()函数和bsearch()函数......165

4.6.1预处理指令的概念...................1036.6指针和数组......................................168

4.6.2宏定义......................................1046.6.1指针的运算...............................168

目录III

6.6.2指针和一维数组.......................1718.3.3有序链表...................................215

6.6.3指针和二维数组.......................173思考与练习...............................................217

6.6.4指针和可变长数组...................175第9章文件·········································221

6.7动态存储分配..................................1769.1文件的基本概念..............................221

思考与练习...............................................1799.1.1流和文件指针...........................221

第7章字符串······································1829.1.2文本文件和二进制文件............222

9.1.3文件缓冲区...............................222

7.1字符串的基本概念..........................182

9.2文件操作..........................................223

7.2字符串的基本操作..........................185

9.2.1打开文件...................................223

7.3常用字符串处理函数.......................188

9.2.2关闭文件...................................224

思考与练习...............................................192

9.2.3设置文件缓冲区.......................224

第8章结构、联合和链表·····················1959.2.4临时文件...................................225

8.1结构.................................................1959.2.5删除文件和重命名文件............225

8.1.1结构类型和结构变量...............1959.2.6检测文件末尾和错误条件........226

8.1.2结构和指针...............................1999.3文件输入/输出.................................226

8.1.3结构和数组...............................2009.3.1格式化输入/输出......................226

8.1.4结构和函数...............................2069.3.2字符输入/输出..........................228

8.1.5结构中的位域...........................2089.3.3行输入/输出..............................229

8.2联合.................................................2099.3.4块输入/输出..............................230

8.3链表.................................................2119.4文件定位..........................................232

8.3.1链表的概念...............................211思考与练习...............................................235

8.3.2链表的基本操作.......................212参考文献.......................................................238

第1章程序设计概述

在学习和使用计算机时,首先要了解计算机系统。计算机的组成不仅与硬件有关,而且还涉

及软件。我们撰写文档、畅游因特网使用的文字处理器、浏览器都是在计算机上运行的软件。而

软件是使用程序设计语言开发出来的。C语言就是一种流行且功能强大的程序设计语言,很多软

件都是用C语言开发的。

1.1计算机系统

1.1.1计算机硬件系统

1.计算机硬件结构

计算机硬件是计算机系统中所有物理装置的总称。计算机硬件系统有5个基本组成部分,分

别是控制器、运算器、存储器、输入设备和输出设备。控制器和运算器构成了计算机硬件系统的

核心—中央处理器(centralprocessingunit,CPU)。存储器可分为内存储器和外存储器,简称内

存和外存。计算机硬件系统各个基本组成部分之间是用总线相连接的。总线是计算机硬件系统内

部传输各种信息的通道。

图1.1所示为一般计算机的硬件结构图。

图1.1计算机硬件结构图

2C语言程序设计

2.中央处理器

中央处理器由控制器和运算器组成,是计算机硬件系统的核心。

(1)计算机硬件系统的各个基本组成部分能够有条不紊地协调进行工作,都是在控制器的控

制下完成的。程序是完成既定任务的一组指令序列,每条指令都规定了计算机所要执行的一种基

本操作。控制器按照程序规定的流程依次执行指令,最终完成程序所要实现的任务。

(2)运算器在控制器的控制下,进行算术运算和逻辑运算。运算器内部有算术逻辑运算单元

(arithmeticallogicalunit,ALU)以及存放运算数据和运算结果的寄存器。

3.存储器

存储器由内存和外存组成,其主要功能是存放程序和数据。

(1)内存由大规模或超大规模集成电路芯片所构成。内存分为随机存储器(randomaccess

memory,RAM)和只读存储器(read-onlymemory,ROM)两种。RAM用来存放正在运行的程序

和数据,一旦关闭计算机(断电),RAM中的信息就会丢失。ROM中的信息一般只能读出而不能

写入,断电后,ROM中的原有信息保持不变;在计算机重新开机后,ROM中的信息仍可被读出。

内存由许多存储单元构成,所有的存储单元都按顺序编号,这些编号称为内存地址。内存中所有

存储单元的总和称为内存的存储容量。

(2)外存用来存放大量的需要长期保存的程序和数据。计算机若要运行存储在外存中的某个

程序,必须将其从外存读入到内存中才能运行。外存按存储介质材料可以分为磁存储器、光存储

器和闪存(flashmemory)存储器。磁存储器中最常用的是硬盘(harddisk)。光存储器中最常用的

是CD(compactdisk)和DVD(digitalversatiledisk)。闪存存储器包括固态硬盘SSD(solidstatedisk)、

U盘等。

4.输入设备和输出设备

(1)输入设备用于向计算机输入程序和数据。最常用的输入设备是键盘(keyboard)和鼠标

(mouse)。

(2)输出设备用来输出计算机的处理结果。最常用的输出设备是显示器(monitor)和打印机

(printer)。

通常把控制器、运算器和内存称为计算机的主机。输入设备、输出设备和外存称为计算机的

外围设备。

1.1.2计算机软件系统

1.计算机软件的概念

计算机软件是计算机系统重要的组成部分,如果把计算机硬件看成是计算机的“躯体”,那么

计算机软件就是计算机系统的“灵魂”。没有任何软件支持的计算机称为“裸机”,只是一些物理

设备的堆积,几乎是不能工作的。只有配备了一定的软件,计算机才能发挥作用。计算机功能的

强弱也与其所配备的软件的丰富程度有关。

计算机软件是计算机系统中与硬件相互依存的另一部分,它是程序、数据及其相关文档的完

整集合。

在程序正常运行过程中,需要输入一些必要的数据。文档是与程序开发、维护和使用有关的

第1章程序设计概述3

图文材料。程序和数据必须装入计算机内部才能工作;文档一般是给人看的,不一定装入计算机。

2.计算机软件的分类

计算机软件一般可以分为系统软件和应用软件两大类。

(1)系统软件居于计算机系统中最靠近硬件的一层,其他软件都是通过系统软件发挥作用的。

系统软件与具体的应用领域无关。

(2)应用软件是指为解决某一领域的具体问题而开发的软件产品。随着计算机应用领域的不

断拓展和广泛普及,应用软件的作用越来越大。

3.操作系统

最重要的系统软件是操作系统(operatingsystem,OS)。操作系统能对计算机系统中的硬件和

软件资源进行有效的管理和控制,合理地组织计算机的工作流程,为用户提供一个使用计算机的

工作环境,起到用户和计算机之间的接口作用。

只有在操作系统的支持下,计算机系统才能正常运行。如果操作系统遭到破坏,计算机系统

就无法正常工作。

操作系统有如下主要功能:

(1)任务管理。对中央处理器CPU的资源进行分配,并对其运行进行有效的控制和管理。

(2)存储管理。有效管理计算机系统中的存储器,为程序运行提供良好的环境,按照一定的

策略将存储器分配给用户使用,并及时回收用户不使用的存储器,提高存储器的利用率。

(3)设备管理。按照一定的策略分配和管理输入/输出设备,以保证输入/输出设备高效、有

条不紊地工作。

(4)文件管理。文件是一组相关信息的集合,程序和数据都是以文件的形式存放在计算机外

存中。每个文件必须有一个名字,通过文件名可以找到对应的文件。文件管理的主要任务就是支

持文件的存储、查找、删除和修改等操作,保证文件的安全,方便用户使用。

(5)作业管理。作业是指要求计算机完成的某项任务。作业管理的主要任务是作业调度和作

业控制,目的是为用户使用计算机系统提供良好的操作环境,让用户有效地组织工作流程。

微软(Microsoft)公司的Windows操作系统、苹果(Apple)公司的MacOS操作系统以及Linux

操作系统都是目前常用的操作系统。

1.1.3计算机中的信息表示

1.二进制数字表示

在十进制系统中有10个数——0、1、2、3、4、5、6、7、8、9,而在二进制系统中只有2个

数——0和1。

无论是什么类型的信息,包括数字、文本、图形图像以及声音、视频等,在计算机内部都采

用二进制形式来表示。

尽管计算机内部均用二进制形式来表示各种信息,但计算机与外部的交往仍采用人们熟悉和便于

阅读的形式。计算机的外部信息需要经过转换变为二进制信息后,才能被计算机所接收;同样,计算机

的内部信息也必须经过转换后才能恢复信息的“本来面目”。这种转换通常由计算机自动实现。

二进制数往往会很长,比较烦琐。因此,常用八进制数或十六进制数来代替表述二进制数。

4C语言程序设计

在八进制系统中有8个数——0、1、2、3、4、5、6、7。每个八进制数字相等于3位二进制数。

在十六进制系统中有16个数——0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。字母A、B、

C、D、E、F对应十进制数10、11、12、13、14、15。每个十六进制数字相等于4位二进制数。

2.信息存储单位

(1)位(bit):简记为b,是计算机内部存储信息的最小单位。一个二进制位只能表示0或1,

要想表示更大的数,需要把更多的位组合起来。

(2)字节(byte):简记为B,是计算机内部存储信息的基本单位。一个字节由8个二进制位

组成,即1B等于8b。在计算机中,其他经常使用的信息存储单位还有:千字节KB(kilobyte)、

兆字节MB(megabyte)、吉字节GB(gigabyte)和太字节TB(terabyte),其中1KB等于1024B,

1MB等于1024KB,1GB等于1024MB,1TB等于1024GB。

(3)字(word):一个字通常由一个字节或若干个字节组成,是计算机进行信息处理时一次存

取、处理的数据长度。字长是衡量计算机性能的一个重要指标,字长越长,计算机一次所能处理

信息的实际位数就越多,运算精度就越高,最终表现为计算机的处理速度越快。常用的字长有8

位、16位、32位和64位等。

3.非数字信息的表示

文本、图形图像以及声音、视频之类的信息,称为非数字信息。在计算机中用得最多的非数

字信息是文本字符。由于计算机只能够处理二进制数,这就需要用二进制的“0”和“1”按照一

定的规则对各种文本字符进行编码。

计算机内部按照一定的规则表示文本字符的二进制编码称为机内码。

(1)西文字符的编码。字符的集合称为“字符集”。西文字符集由字母、数字、标点符号和一

些特殊符号组成。字符集中的每一个符号都有一个数字编码,即字符的二进制编码。计算机中使

用最广泛的西文字符集是美国标准信息交换码(AmericanStandardCodeforInformationInterchange,

ASCII)字符集,其编码称为ASCII码,已被国际标准化组织(InternationalOrganizationfor

Standardization,ISO)采纳,作为国际通用的信息交换标准代码。ASCII字符集采用一个字节(8

位)表示一个字符,所以可以表示256个字符。

(2)中文字符的编码。汉字在计算机中也只能采用二进制编码。汉字的数量大、字形复杂、

同音字多。汉字的总数超过6万个,常用的也有数千个,显然用一个字节(8位)编码是不够的。

我国于1981年颁布的GB2312—1980《信息交换用汉字编码字符集——基本集》,其二进制编码

称为国标码。国标码用两个字节(16位)表示一个汉字。GB2312—1980字符集的组成:第一部

分为字母、数字和各种符号,共682个;第二部分为一级常用汉字,按汉语拼音排列,共3755

个;第三部分为二级常用汉字,按偏旁部首排列,共3008个。总的汉字数为6763个。GB2312

—1980字符集的汉字有限,某些汉字无法表示。随着计算机应用的普及,这个问题日渐突出。我

国对GB2312—1980字符集进行了扩充,形成了GB18030《信息技术中文编码字符集》。GB18030

完全包含了GB2312—1980,共有汉字27484个。

(3)Unicode编码。随着因特网的迅速发展,信息交换的需求越来越大,不同的编码越来越

成为信息交换的障碍,于是Unicode编码应运而生。Unicode编码是由国际标准化组织ISO于20

世纪90年代初制定的一种字符编码标准,用多个字节表示一个字符,世界上几乎所有的书面语言

第1章程序设计概述5

都能用单一的Unicode编码表示。这样,ASCII字符与其他字符(如中文字符)的编码就统一起来,

简化了字符处理的过程。

1.2程序设计基础

1.2.1程序

1.程序的定义

广义地说,程序是指为进行某项活动所规定的途径。

我们平时所说的日程安排、会议议程等,都是程序的实例。例如,学校要召开运动会,就需

要事先编排好程序,从开幕式到闭幕式,每一项活动的时间、地点、人物、设施、规则、管理、

协调等都必须有详细、周密的安排。

2.程序的执行

程序的执行通常有3种方式。例如,在正常情况下,运动会按照程序所设定的顺序执行,称

为程序的顺序执行方式;如果遇到意外,例如下雨、运动员受伤等,还必须要准备相应的应急程

序,也就是两套或多套方案供选择执行,这就是程序的选择执行方式;而当一项比赛有多组多人

反复进行时,只需要一套程序反复执行即可,这就是程序的循环执行方式。

3.计算机程序

算法是解决某个问题所需要的方法和步骤。

如果以计算机作为工具解决某个问题,必须将解决问题的方法和步骤(算法)告诉计算机。

因为人无法与计算机直接交流,所以必须使用程序将算法表示成计算机能够理解的形式,然后让

计算机执行程序来完成指定的任务。

计算机程序就是人们为解决某个问题用计算机可以识别的指令合理编排的一系列操作步骤。

1.2.2程序设计语言

1.程序设计语言的定义

程序设计语言,又称编程语言,是编写计算机程序所使用的语言。程序设计语言是人与计算

机交互的工具,人要把需要计算机完成的工作告诉计算机,就需要使用程序设计语言编写程序,

让计算机去执行。

2.程序设计语言的发展

没有程序设计语言的支持,计算机将无法工作。由于程序设计语言的重要性,从计算机问世

至今,人们一直在为研制更好的程序设计语言而努力。程序设计语言的数量在不断增加,各种新

的程序设计语言不断问世。

程序设计语言的发展过程是其功能不断完善、描述问题的方法越来越贴近人类思维方式的过

程。越接近自然语言的程序设计语言,就越“高级”,反之就越“低级”。越低级的语言,学习和

使用难度就越大。

程序设计语言包括机器语言、汇编语言和高级语言。汇编语言和机器语言一般被称为低级语言。

6C语言程序设计

(1)机器语言是计算机诞生和发展初期使用的语言。机器语言采用二进制编码形式,由0、1组成

(如0000010000001110),是计算机唯一可以直接识别、直接运行的语言。机器语言的执行效率高,但不

易记忆和理解,编写的程序难以修改和维护,所以现在很少直接用机器语言编写程序。

(2)为了减轻编写程序的负担,20世纪50年代初发明了汇编语言。汇编语言和机器语言基

本上是一一对应的,但在表示方法上做了根本性的改进,引入了助记符,例如,用ADD表示加法,

用MOVE表示传送等。汇编语言比机器语言更加直观,容易记忆,提高了编写程序的效率。计算

机不能够直接识别和运行用汇编语言编写的程序,必须通过一个翻译程序将汇编语言转换为机器

语言后方可执行。

(3)世界上第一种高级程序设计语言是20世纪50年代由JohnBackus领导的一个小组研制的

FORTRAN语言。高级语言与人们日常熟悉的自然语言和数学语言更接近,便于学习、使用、阅

读和理解。高级语言的发明,大大提高了编写程序的效率,促进了计算机的广泛应用和普及。计

算机不能够直接识别和运行用高级语言编写的程序,必须通过一个翻译程序将高级语言转换为机

器语言后方可执行。常用的高级语言有C、C++、Java、C#和Python等。

3.语言处理程序

计算机只能直接执行机器语言程序,用汇编语言或高级语言编写的程序都不能直接在计算机

上执行。因此,计算机必须配备一种工具,其任务是把用汇编语言或高级语言编写的程序翻译成

计算机可直接执行的机器语言程序,这种工具就是“语言处理程序”。语言处理程序包括汇编程序、

解释程序和编译程序。

(1)汇编程序把用汇编语言编写的程序翻译成计算机可直接执行的机器语言程序。

(2)解释程序对用高级语言编写的程序逐条进行翻译并执行,最后得出结果。也就是说,类

似于外文翻译中的口译,解释程序对高级语言编写的程序是一边翻译,一边执行的。下次执行同

样的程序时,还必须重新翻译。

(3)编译程序把用高级语言编写的程序一次性翻译成计算机可直接执行的机器语言程序。类

似于外文翻译中的笔译,翻译一次就可以反复使用,以后每次运行同样的程序时,无须重新翻译。

1.2.3程序设计

1.程序设计的定义

程序设计,又称编程,是指编写计算机程序解决某个问题的过程。专业的程序设计人员常被

称为程序员。

进行程序设计必须具备四方面的知识:

(1)领域知识。这是给出解决某个问题算法的基础。例如,要解决素数判断的问题,必须了

解素数的概念以及素数判断的数学方法,这就是领域知识。如果程序员不具备解决某个问题的领

域知识,是不可能编写出解决该问题的计算机程序的。

(2)程序设计方法。程序设计方法是指合理编排计算机程序内部逻辑的方法。程序员在具备

领域知识的基础上,还必须掌握某种程序设计方法,运用适当的思维方式,构造出解决某个问题

的算法。

(3)程序设计语言。要使用计算机解决某个问题,程序员还必须掌握某种程序设计语言(如

第1章程序设计概述7

C语言),运用程序设计语言将算法转换为计算机程序。

(4)程序设计工具。程序员在设计程序时,为了提高程序设计的效率和程序的质量,通常需

要使用某种程序设计工具。

2.程序设计过程

程序设计过程包括分析、设计、编码、测试、维护等不同阶段。

(1)分析阶段的主要任务是了解问题的背景,理解问题的需求。

(2)设计阶段的主要任务是针对问题的需求,设计出解决问题的算法。

(3)编码阶段的主要任务是运用某种程序设计语言,将算法转换为程序。

(4)测试阶段的主要任务是对程序进行严格的测试,保证程序的质量。只有通过测试的程序

才能够交付使用。

(5)程序在交付使用后,就进入了维护阶段。人都有可能犯错误,程序是人的智力产品,无

论经过怎样的严格测试,程序中通常还是会存在错误的。在程序交付使用后,也有可能发现程序

中的错误,就需要对程序进行修改。在程序使用过程中,可能会对程序的功能提出新的需求,为

了实现新的需求,也需要对程序进行修改。诸如此类的修改工作通常称为对程序的“维护”。

程序设计初学者常犯的错误是拿到问题就开始编程,忽略了程序设计过程中的分析和设计阶

段,这会严重影响程序设计的质量。初学程序设计时,教材中的题目都比较简单,从这些题目中

很难体会到上述程序设计过程的作用。尽管如此,也不应该直接开始编程,而应该首先分析问题

的需求,设计出合理的算法。

3.程序设计好坏的界定

程序设计有非常严格的语法规则和很强的逻辑顺序,所以需要熟练掌握和深入理解相应的语

法规则,并进行大量的逻辑思维训练和编程实践,才能够设计出好用并可靠的计算机程序。

在保证程序正确的前提下,可读、易维护、可移植和高效是程序设计的首要目标。

可读是指程序清晰,具有良好的书写风格,没有太多繁杂的技巧,能使他人容易读懂。可读

性是程序维护的基础,如果很难读懂程序,则无法修改程序。

在程序使用过程中,可能会对程序的功能提出新的需求,为了实现新的需求,需要对程序进

行修改。易维护是指当需求发生变化时,能够比较容易地扩展和增强程序的功能。

可移植是指编写的程序在各种类型的计算机和操作系统上都能正常运行,且运行结果一致。

1.3C语言的发展历史与特点

1.3.1C语言的历史

1.C语言的起源

C语言是20世纪70年代初期由美国贝尔实验室开发出来的一种广为使用的程序设计语言。

1960年1月在巴黎举行的有全世界一流软件专家参加的讨论会上,AlanJ.Perlis发表了“算

法语言ALGOL60报告”。ALGOL60是程序设计语言发展史上的一个里程碑,它标志着程序设计

语言由一种“技艺”转而成为一门“科学”,开拓了程序设计语言的研究领域。

8C语言程序设计

1963年,剑桥大学和伦敦大学以ALGOL60为基础,共同推出了CPL(CombinedProgramming

Language)语言。

1967年,剑桥大学的MartinRichards对CPL语言做了简化,推出了BCPL(BasicCombined

ProgrammingLanguage)语言。

1970年,贝尔实验室的KenThompson以BCPL语言为基础简化了BCPL语言,设计出B语言

(取BCPL的第一个字母),并利用B语言写出早期的UNIX操作系统。

1972年,贝尔实验室的DennisRitchie以B语言为基础,设计出C语言(取BCPL的第二个

字母)。之后,KenThompson和DennisRitchie等人又利用C语言写出了新版的UNIX操作系统。

C语言是贝尔实验室的KenThompson和DennisRitchie等人开发的UNIX操作系统的“副

产品”。

2.C语言的标准化

C语言在20世纪70年代中后期得到了持续发展。1978年,BrianKernighan和DennisRitchie

合作编写出版了第一本有关C语言的书TheCProgrammingLanguage,由于当时没有C语言的正

式标准,这本书就成为了C语言事实上的标准,称为K&RC标准。

20世纪80年代,伴随着个人计算机(PC)的诞生,计算机应用日益普及,出现了许多C语

言版本。由于K&RC对C语言的某些特性的描述非常模糊,不同的C语言版本常常会对这些特

性做出不同的处理,使得这些C语言版本之间出现许多不一致的地方。如果C语言没有一个权威

的标准,势必会出现各种“方言”,威胁到C语言的发展。

1983年,美国国家标准协会(AmericanNationalStandardsInstitute,ANSI)开始制定C语言

标准,1988年完成并在1989年12月正式通过,成为ANSI标准(ANSIX3.159—1989)。1990年,

通过对ANSI标准的少量修改,国际标准化组织(ISO)通过了此项标准(ISO9899:1990)。这一C

语言版本称为C89标准。

1995年,对C89标准进行了一些修正和扩展。1999年,ISO通过了新的C语言标准(ISO/IEC

9899:1999)。这一C语言版本称为C99。

2011年12月8日,ISO正式公布了C语言新的标准(ISO/IEC9899:2011),即C11。新的标

准增加了许多新的特性。

3.为什么要学习C语言

(1)目前常用的Linux、Windows和MacOS等操作系统,其核心部分主要是用C语言编写的。

掌握了C语言,就具备了深入理解这些操作系统的基础。

(2)目前很多流行的程序设计语言(如C++、Java、C#等)都衍生自C语言。掌握了C语言,

有助于更好地理解这些程序设计语言。

(3)C语言仍然广泛应用于新软件的开发,特别是在与硬件直接打交道的底层软件开发中。

1.3.2C语言的特点

1.C语言的优点

(1)语言简洁、紧凑,压缩了一切不必要的语言成分;使用方便、灵活,程序书写形式自由。

(2)高效。发明C语言就是为了编写以往必须用汇编语言编写的程序。用C语言编写的程序

第1章程序设计概述9

能够在硬件受限的环境中快速运行。

(3)C语言提供了与硬件直接打交道的机制,使其能够胜任底层软件(如操作系统)的开发

工作,与操作系统(特别是Linux操作系统)紧密集成。

2.C语言的不足

(1)C语言的灵活性使得程序员有可能用C语言编写出“投机取巧”和除了自己几乎没有人

能够读得懂的程序。这样的程序出错概率较高,某些隐藏的错误不容易发现。

(2)当用C语言编写的程序规模达到一定程度时,往往很难控制程序的复杂性,使得程序难

以维护。

3.有效地使用C语言

(1)遵循C语言的标准版本。

(2)采用切合实际的编程规范。编程规范就是程序设计风格,即使程序设计语言本身没有强

制要求,程序员也必须遵循规范并坚持使用。良好的编程规范可使程序设计风格一致,易于阅读

和修改。

(3)充分利用库函数。程序员必须能够熟练使用C语言本身提供的标准库函数以及第三方经

过严格测试的库函数。合理地使用库函数可以减少程序错误,节省编程工作量。

(4)使用程序设计工具。为了提高程序设计的效率和程序的质量,程序员必须能够熟练使用

相应的程序设计工具,尤其能够很好地使用程序设计工具的调试功能来修正错误。

1.4C程序开发

1.4.1基本术语

源程序文件,又称源代码文件,简称源文件,是指用高级语言编写的、有待翻译的程序,并

将程序以文件的形式保存在计算机外存(如硬盘)中。C语言源程序文件的文件扩展名通常为.c。

目标程序文件,又称目标代码文件,简称目标文件,是指源程序文件通过翻译加工以后生成

的程序文件。目标程序文件通常是用机器语言(二进制代码)来表示的。在Windows操作系统中,

C语言目标程序文件的文件扩展名通常为.obj。

可执行程序文件,又称可执行代码文件,简称可执行文件,是指可以在计算机上直接运行的

程序文件。在Windows操作系统中,可执行程序文件的文件扩展名通常为.exe。

编辑器,又称编辑程序,是指用来编写或修改源文件的程序。

编译器,又称编译程序,是指将某种高级语言编写的源文件转换成目标文件的程序。

连接器,又称连接程序,是指将一个或多个由编译器生成的目标文件和运行程序所需的支持

文件连接为一个可执行文件的程序。

1.4.2C程序的开发过程

运用C语言进行程序开发通常要经过编辑、编译、连接、运行和调试这几个阶段。

10C语言程序设计

在获得了解决问题的算法后,首先要使用编辑器编写C语言程序并以源文件的形式保存,然

后使用编译器将源文件转换为目标文件,最后使用连接器将目标文件和运行支持文件连接为可执

行文件,运行可执行文件。

编写的程序出现错误时,必须对源文件进行修改,然后重新编译和连接。因此,在程序开发

过程中,一般都要经历发现错误、修改源文件、编译和连接、运行程序、再发现错误、再修改源

文件……这样一个反复的过程,这个过程称为程序的调试(debug)。

为了提高程序开发效率,通常会使用集成开发环境(integrateddevelopmentenvironment,IDE)。

在集成开发环境IDE中,程序员可以方便、高效地完成编辑、编译、连接、运行和调试等程序开

发过程中的所有工作。

C程序的开发过程如图1.2所示。

图1.2C程序的开发过程

1.5初识C程序

1.5.1第一个C程序

【例1.1】编写程序,在屏幕上输出WelcometoC和Programmingisfun。

1/*例1_1.c*/

2#include<stdio.h>

3intmain(void){

4printf("WelcometoC\n");

5printf("Programmingisfun\n");

6return0;

7}

【运行结果】

WelcometoC

Programmingisfun

输入程序时,不要输入行号。行号不是程序的内容,只是为了方便解释程序。

第1行是注释,说明了程序名。注释是提高程序可读性的一种手段,有助于程序员相互交流、

理解程序。注释是写给人看的,而不是写给计算机的。在编译程序时,编译器会忽略注释。注释

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论