第
1 
章 
C 
语言介
绍


本章学习要点: 

(1)C程序文件的组成。

(2)编写及运行C程序
。
(3)C程序的书写规范和编程风格
。
1 C语言概述

1.
1.1 
C语言的起源和C语言标准
1.
C语言是20 世纪70 年代初在贝尔实验室为了编写操作系统及其他系统软件而产生的

一种具有自身基础理论体系的编程语言。

由于C语言具有的一个非常重要的优点是可移植性,因而得到了广泛流行和持续发
展。C语言的快速发展使不同的版本相继出现,这些版本互不兼容,因此C语言的标准亟待
建立。1983 年,美国国家标准协会(AmericanNationalStandardsInstitute,ANSI)制定C 
语言标准。1989 年12 月,ANSI 批准了第一个C语言标准。1990 年,该标准被国际标准化
组织(InternationalStandardOrganization,ISO)批准,这一版本的C语言标准被称为C89 
或C90 标准。1999 年,C语言标准委员会将C++/Java语言的一些特性加到C语言中,以
此提高C语言的性能,产生了C语言的1999 标准,也称C99 标准。

1.2 
C语言的优缺点
1.
C语言具有以下主要特点。

.C语言是一种小型语言。C语言提供了一套有限的特性集合,为了使特性较少,C语
言不直接提供输入和输出语句、有关文件操作的语句和动态内存管理的语句等操
作,而是由编译系统所提供的库函数来实现的。
.C语言是一种包容性语言。C语言语法限制不太严格,不像其他语言一样强制进行
详细的错误检查,因此程序设计自由度较大,但对程序员的要求也更高。
.C语言是一种底层语言。C语言提供机器级概念的访问,能实现汇编语言的大部分
功能,可以直接对硬件进行操作,可用来编写系统软件。因此,C语言既是通用的程
序设计语言,又是成功的系统描述语言。

C语言程序设计
1.C语言的优点
.高效。C语言的产生是为了编写系统程序,其优点是能够生产高质量的目标代码, 
使其在有限的内存空间中快速运行,因而C语言程序的执行效率高。
.可移植。C语言编译器规模小、容易编写,因而容易移植到新系统中,几乎在所有计
算机系统中都可以使用C语言。
.功能强大。C语言拥有丰富的运算符和数据类型,从而使C语言具有丰富的运算类
型、多样化的表达式类型,能够实现各种复杂的数据结构运算。
.灵活。C语言的特点使其编程轻松、自由,使用上的限制非常少。例如,可以使用C 
语言编写从嵌入式系统到各种应用程序;C语言允许字符与整数或浮点数相加。
.标准库。C语言的一个突出优点就是它具有标准库,该标准库包含了数百个可以用
于输入/输出、字符串处理、存储分配以及其他实用操作的函数。
e、
.结构化。C语言具有结构化的控制语句, i-le和sicwhlo
例如,feswth选择语句,idwhile及for循环语句。C语言用函数作为程序的模块单位,得以实现程序的模块化
和结构化。

2.C语言的缺点
和它的许多优点一样,C语言的缺点源于它与机器的紧密结合性。

.C程序更容易隐藏错误。C语言的特点使用C语言编程的出错概率较高,包含很多
觉察不到的隐患。例如,一个额外的分号可能会导致无限循环,遗漏一个地址号
(&)可能会引发程序崩溃。
.C程序可能会难以理解。C程序简要、灵活的特点会使程序员编写的程序让其他程
序员读不懂。C语言有许多其他通用语言没有的特性,且这些特性可以以多种方式
结合使用,其中的一些结合方式则会使其他程序员不理解。
.C程序可能会难以修改。现代编程语言往往提供了“类”“包”之类的结构,使大的程
序可以分解成很多模块进行管理。但如果用C语言编写大规模的程序则将会使程
序难以阅读、修改和管理。
1. 
如何使用C语言
1.3 
C语言既有优点又有缺点,那么,在使用时需要有效利用C语言的优点并尽量避免它的
缺点。使用C语言时可注意以下几点。

.规避C语言的缺点。现在没有一个编译器可以检查出编程语言的所有缺陷。程序
员需要通过阅读参考书籍和文献,并不断积累经验等,才能掌握C语言的特点,避免
其缺陷。
.使程序更可靠。C程序员可以通过使用软件、调试工具等方式对程序进行广泛的错
误检查、分析和纠错。
.利用现有的代码库。函数的集合经常被打包成库,使用这些库既可极大地减少错
误,又可节省大量的编程时间。这些库有公用、开源、以商品销售等形式。

第
1 
章 
C 
语言介绍

.具有编程规范。程序员应当从一开始就遵守并坚持使用符合C语言程序准则的、规
范化的编程风格,编码规范可以使程序统一,且易于阅读、修改和维护。
.避免极度复杂和无节制简洁。极其复杂的编程和没有节制的简略都会导致编写的
程序难以理解,因而我们提倡简洁但易于理解的编程风格。
.符合标准。为了提高程序的可移植性,尽量避免使用不符合标准的库函数、特性等。
2 C程序文件

1.
一个C程序的结构如图1-1所示,它可以由一个或多个源程序文件(简称源文件)组成, 
通常还有一些头文件(headerfile)。源文件由预处理指令、数据、函数的声明以及函数组成; 
函数由函数首部和函数体构成;函数体由数据声明和执行语句构成。


图1-1C 程序的结构

1.1 
源文件
2.
源文件包含预处理指令(如#include、#define等)、变量声明、函数等,源文件的扩展名
为c.。一个函数包括函数首部和函数体,函数体包含声明部分和执行部分,声明部分是对有
关数据的声明,执行部分是由语句组成的。一个C语句经过编译后产生若干条机器指令, 
可以向计算机系统发出操作指令。多个源文件中必须有一个源文件包含一个名为main的
主函数,主函数是程序的起始点。

一个C程序可以由多个源文件组成,把程序分成多个源文件的优点如下。

.把相关的函数和变量分组放在同一个文件中,可以使程序的结构清晰。
.可以分别对每一个源文件进行编译。如果程序规模很大而且需要频繁改变,分成多
个源文件的方法可以极大地节约程序运行时间。
.把函数分组放在不同的源文件中利于再次使用。

C 
语言程序设计

2.头文件
1.2 

头文件包含了源文件之间共享的信息,如符号常量定义、类型定义、函数原型、变量声明
等,头文件的扩展名为.nclude实现了共享。预处理指令#

h。这些信息通过预处理指令#iinclude指示预处理器打开指定的头文件,并且把此文件的内容插入当前源文件中,这样几
个源文件就可以访问相同的信息。也就是说,共享的信息放在一个头文件中,然后在每个源
文件中用“#include<共享头文件>”指令就可以把该头文件的内容插入源文件恰当的位
置中。源文件指程序员编写的全部文件,包括.h文件。本书中的“ 通常仅

c文件和.源文件
”
指
.


c文件。

1.3 
把程序划分成多个文件
2.
现在应用我们已经知道的关于头文件和源文件的知识来开发一种把一个程序划分成多
个文件的简单方法。这里将集中讨论函数,但是同样的规则也适用于外部变量。假设已经
设计好程序,换句话说,已经决定程序需要什么函数以及如何把函数分为逻辑相关的组。下
面是处理的方法。

. oo.

把每个函数集合放入一个不同的源文件中(比如用名字fc来表示一个这样的

. 
文件)。
h( 头文件是foo.
创建和源文件同名的头文件,只是扩展名为.在此例中, h)。

.在头文件中放置源文件中定义的函数原型。
.每个需要调用定义在源文件中的函数的源文件都应包含头文件。
.源文件也应包含头文件,这是为了编译器可以检查头文件中的函数原型是否与源文
件中的函数定义相一致。
.main函数将出现在另一个源文件中。main函数所在的文件中也可以有其他函数, 
前提是程序中的其他文件不会调用这些函数。
3 运行C程序

1.
1.1 
C程序的运行步骤
3.
运行一个C语言程序包含以下几个步骤。

(1)编辑。在计算机通过编辑器创建一个后缀为.
c的C语言源程序。

(2)预处理。源程序被送交给预处理器(preprocesor),预处理器执行以#开头的指
令。预处理器是一个小软件,它可以在编译前处理C程序,可以给程序添加内容及进行修
改。预处理器的行为由#字符开头的预处理指令控制,如#define、#include。
(3)编译。经过预处理后的程序进入编译器(compiler),编译器把程序翻译成机器能够
识别的目标代码,生成后缀为.j的目标文件。然而,这时的目标文件还不可以运行。
ob


第
1 
章 
C 
语言介绍

(4)连接。连接器(r)把由编译器产生的目标代码和其他所需要的附加代码整合
linke
在一起,这样才最终产生了后缀为.e的可执行文件。这些附加代码包括程序中用到的库

ex
函数(如printf函数)。

(5)运行。C程序经过编辑、预处理、编译、连接几个自动完成的步骤后即可运行,并输
出运行结果。
根据编译器和操作系统的不同,编译和连接所需的命令是多种多样的,生成的文件后缀
也不同。

1.2 
集成开发环境
3.
C程序可以通过在操作系统提供的窗口中输入命令的方式来调用命令行编译器,也可
以使用集成开发环境(进行编译。集成开发环

integrateddevelopmentenvironment,IDE) 
境是一个应用程序,用户可以在其中编辑、编译、连接、执行、调试程序,组成集成开发环境的
各个部分可以协调工作。集成开发环境有很多种,这里不作一一介绍。下面给出在Visual 

C++6.

0集成环境下的上机操作方法。

(1)安装ViulC+0。在ViulSuieuee,
sa+6.satdo光盘运行安装文件stp.x按提示一步
步进行操作即可安装成功。

(2)启动ViulC+0。从桌面上选择“ →“ →Mirsfsatdo→
sa+6.开始” 程序”cootViulSuiVisualC++6.

0命令,显示程序主界面。

(3)建立项目(可选)。在主界面选择File→New→Projects→Win32Console 
Application命令,在Projectname中输入对该项目的命名,右侧中间的单选按钮默认选定
Addtocurentworkspace,单击OK按钮。在弹出的对话框中选择右侧的Anemptyproject单选按钮,单击Finish按钮。
(4)编辑源程序。在主界面中选择File→New命令,此时出现一个New对话框,选择
该对话框左上角的Fils选项卡, +SuclViulC+0既可处
e选择其中的C+oreFie选项(sa+6.
理C++源程序,也可处理C源程序),然后在对话框右半部分的Location对话框中输入存放
该文件的路径和文件夹,在右上方的File对话框中输入该源程序的命名后,单击OK按钮, 
这样即将进行编辑的源程序的文件名和路径就创建好了。随后,在编辑窗口打开源程序文
件,开始编辑源程序代码即可。编辑完毕,单击Save按钮,便在默认路径和文件夹中建立了
一个C语言源程序文件。
uild→Compil

(5)编译和连接程序。在主界面菜单栏中选择Be命令,系统则开始对当
前程序进行编译,若在编译过程发现错误,则将在下方窗格中列出所有错误和警告。修改错
误并重新编译,直至修改完所有错误为止。选择Build→Build命令,则会在文件夹中生成该
源程序的可执行文件,完成编译和连接。
(6)运行程序。选择Build→Execute命令,即开始运行该源程序的可执行文件,执行完
毕,输出结果的窗格将显示运行结果。

C 
语言程序设计

4 编写程序

1.
4.程序设计的任务
1.1 

程序设计是针对要解决的问题进行从确定任务直至得到结果、写出文档的整个过程,一
般需经历以下几个工作阶段。

(1)分析问题。对于要解决的问题进行认真的分析,研究所给定的条件,分析最后应达
到的目标,找出解决问题的规律,选择解题的方法,这也被称为建立模型。
(2)设计算法。设计出解决问题的方法,并将其具体步骤清晰地描述出来。例如,要解
一个方程式,需要了解应选择什么方法,以及使用该方法求解方程式的每一个步骤是什么。
(3)编写程序。根据所设计的算法,用高级编程语言编写源程序。
(4)运行程序。编译系统对源程序进行编辑、编译、连接,然后运行程序,得到程序的运
行结果。
(5)分析结果。对程序运行结果进行分析,判断结果是否正确、合理。如果不正确或不
合理,则对程序进行调试和测试。调试(debug)是发现程序错误和排除程序故障的过程。
测试(test)是使用多组数据运行程序,尽最大可能发现程序漏洞,并修改程序以便弥补漏
洞,使程序能适用于各种情况。
(6)编写程序文档。程序文档即为程序说明书或用户文档,是软件的重要组成部分,其
内容包括程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据、使用注意事
项等。现在商品软件的程序说明书有的以readme 文件形式提供,有的在程序的帮助下提
供,以便于用户阅读和使用程序。
1.2 
计算机算法
4.
计算机为了解决某个问题而采用的方法和具体步骤称为计算机算法。计算机算法可分

为两大类:数值运算算法和非数值运算算法。数值运算算法是求数值解,如求方程的解、求

定积分等。非数值运算算法是除数值运算法以外的解决问题的方法和步骤,如解决图书检

索、人事管理、车辆调度等问题的算法。

计算机算法的表示方法有自然语言、流程图、伪代码。

(1)自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表
示计算机算法就通俗易懂,但文字冗长,容易出现歧义。
(2)流程图是用一些图形来表示各种不同的操作。流程图法又可分为传统流程图和
N-S流程图法(即结构化流程图)。传统流程图用流程线指出各框的执行顺序,对流程线的
使用没有严格限制,因而会导致传统流程图变得没有规律,难以阅读和修改,使算法的可靠
性和可维护性难以保证。N-S流程图将全部算法写在一个由一些基本的矩形框所组成的一
个大的矩形框中,这种流程图适用于结构化程序设计。用流程图表示的算法直观形象、易于
理解,但是占用篇幅较多,尤其是算法比较复杂时,用流程图描述算法会既费时又困难。

第1章 C语言介绍
(3)伪代码是介于自然语言和编程语言之间的文字和符号。用伪代码表示的算法格式
紧凑、修改方便、易于阅读,便于向编写程序过渡。
1.3 
结构化算法或程序
4.
1966 年,Bohra和Jacopini提出了以下3种程序的基本结构,可用这3种基本结构作为
表示一个良好算法或程序的基本单元。

1. 
顺序结构
如图1-2所示,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的。即在执
行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基
本结构。

2. 
选择结构
选择结构又称选取结构或分支结构,如图1-3所示。虚线框内是一个选择结构。此结
构中必包含一个判断框。根据给定的条件c是否成立来选择执行A框或B框。例如,条件
c可以是“x>=0”或“x>y,a+b<c+d”等。


图1-2 顺序结构图1-3 选择结构

3. 
循环结构
循环结构又称为重复结构,即反复执行某一部分的操作。有两类循环结构。

(1)当型(while型)循环结构。while型循环结构如图1-4(a)所示。它的作用是当给定
的条件c1成立时,执行A框操作;执行完A后,再判断条件c1是否成立,如果仍然成立,再
执行A框;如此反复执行A框,直到某一次c1条件不成立为止,此时不执行A框,而脱离
该循环结构。
(2)直到型(until型)循环结构。until型循环结构如图1-4(b)所示。它的作用是先执
行A框;然后判断给定的c2条件是否成立,如果p2条件不成立,则再执行A;接着对c2条

件作判断,如果c2条件仍然不成立,又执行A;如此反复执行A,直到给定的c2条件成立为
止,此时不再执行A,而脱离该循环结构。
图1-4 循环结构
以上3种基本结构,有以下共同特点。
(1)只有一个入口。
(2)只有一个出口。
(3)结构内的每一部分都有机会被执行到。
(4)结构内不存在“死循环”(无终止的循环)。
由以上3种基本结构构成的算法或程序是结构化的算法或程序,可以解决任何复杂的
问题,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。
基本结构并不只限于上面3种,具有上述4个特点的都可以作为基本结构,并可由这些
基本结构组成结构化算法或程序。
结构化程序设计是把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控
制在人们容易理解和处理的范围内。结构化程序设计的基本思想是:强调程序设计风格和
算法/程序结构的规范化,提倡清晰的结构。采取以下方法能够得到结构化的程序:自顶向
下;逐步细化;模块化设计;结构化编码。结构化程序便于编写、阅读、修改、维护,减少了程
序的出错率,提高了程序的可靠性,保证了程序的质量。
例1-1 写出求解10!的传统流程图、N-S图、伪代码三种算法以及C程序。
(1)传统流程图算法如图1-5所示。
(2)N-S图算法如图1-6所示。
(3)伪代码算法。 
begin 
1 => f 
2 => i 
while i <= 10; 
{ 
f * i => f 
8
C 语言程序设计

i + 1 => i 
} 
print f 
end 
图1-5 例1-1的传统流程图算法 
图1-6 例1-1的N-S图算法
(4)编写C程序(e1-1.c)。 
#include <stdio.h> 
int main ( ) 
{ 
int i, f; 
f=1; 
i=2; 
while (i<=10) 
{ 
f = f * i; 
i = i + 1; 
}
printf ( "%d\n", f); 
return 0; 
}
运行结果如下: 
3628800 
9 
第1 章 C 语言介绍

1.5 C程序的书写规范和编程风格
1.5.1 书写规范 
C语言允许在记号之间插入任意数量的空格符、换行符,添加空格和空行可以使程序更
便于阅读和理解。具体特点说明如下。
. 语句可以分开放在任意多行内。例如,下面的语句如果放在一行太长,可以分成
两行。 
printf ("Dirnensional weight (pounds): %d\n", 
(volume+ INCHES_ PER_POUND - 1) I INCHES_PER_POUND); 
. 记号间的空格使我们更容易区分记号。因此,在每个运算符的前后、每个逗号后边、
在圆括号和其他标点符号的两边都可以放个空格,例如: 
volume = height * length* width; 
. 缩进有助于轻松识别程序嵌套。例如,为了清晰地表示声明和语句都嵌套某个函数
中,应该对它们进行缩进。
. 空行可以把程序划分成逻辑单元,从而使读者更容易辨别程序的结构。
1.5.2 编程风格
良好的编程风格能够提高程序的阅读、调试、测试与维护,促进项目团队的合作与交流, 
因而我们提倡学习编程的开始就养成良好的编程习惯和编程风格。
(1)按照C程序的基本结构合理安排各部分的位置。C程序各部分的一般顺序依次为
文件信息部分、连接部分、全局声明部分、main函数部分、自定义函数部分。
(2)标识符的命名便于理解和记忆。用来命名变量、符号常量、函数、数组、类型等的字
符称为标识符。C语言规定标识符只能由字母、数字、下画线3种字符组成,且第1个字符
不能为数字。
(3)使用缩进、括号等使程序更便于阅读和维护。
(4)恰当地加入注释,不仅能增强程序的可读性,而且有助于理解程序的逻辑。
实  验
1.实验目的 
(1)学习安装和打开C程序集成环境软件及其基本操作。
10 
C 语言程序设计