第 1 章  C 语言概 述 【技能目标】熟悉C语言的编程环境,掌握程序调试的基本方法。 【知识目标】C语言是什么? 如何编写C语言的程序?C语言程序又如何执行? 通 过本章的学习来回答这些问题。本章涉及以下知识点。 (1)C语言的编程环境。 (2)算法及其描述 。 通过本章的学习,达到以下的目标 。 (1)了解C语言的特点。 (2)熟悉C语言的开发环境。 (3)掌握算法的基本概念及表示方法 。 【关键词】编辑(t),编码(d),连接(k),编译(e),解释(n) , edicodelincompilinterpretatioobjectprogram), modulastructureflowchar 目标程序(模块化(r),结构化(d),流程图(t), 高级语言(higherlanguage),汇编语言(asembly),机器语言(machinelanguage),调试 (debug)。 【项目任务】分析并描述一个简单的成绩管理系统。 【项目解析】为完成本次项目的要求,必须熟悉算法的描述方法,逐步提高分析问题 与解决问题能力。要注意几个方面:①了解成绩管理系统的目标任务;②选择合适的算 法描述工具;③掌握模块化、结构化的概念。 1 程序设计语言与C语言 1. 在开始学习程序设计时,初学者首先想到的问题可能是“什么是程序”什(“) 么是程序设 计语言”。本章首先讨论这方面的问题,以帮助读者在比较直观的基础上建立起对程序、 程序设计、程序设计语言的基本认识。而后将简单介绍本书讨论的程序设计语言———C 语言,并通过一个简单实例介绍C语言程序的一些基本情况和有关概念。 1.程序设计语言 1.1 程序一词源自生活,通常指完成某些事务的一种既定方式和过程。从表述方面看,可 以将程序看成对一系列动作的执行过程的描述。日常生活中也可以找到许多“程序”实 C 语言程序设计与项目实践(第 2 版) 例。例如,一个学生早上起床后的行为可以描述如下 : ①起床;②刷牙;③洗脸;④吃饭;⑤早自习。 日常生活中程序性活动的情况与计算机中的程序执行很相似,为了与计算机交流,同 样需要有与之交流的方式,需要一种意义清晰、计算机也能处理的描述方式。也就是说 , 需要有描述程序的合适语言。这种可供编写程序使用的语言就是程序设计语言,它是一 种人造语言,也常被称为编程语言。 语言是一套具有语法、词法规则的系统。计算机程序设计语言是计算机可以识别的 语言,用于描述解决问题的方法,供计算机阅读和执行。 要完成各种复杂的工作,计算机既要有强大的硬件系统,也要有相应的软件系统。软 件包含了使计算机运行所需的各种程序及其文档。计算机的工作是通过程序来控制的 , 计算机按照规定的程序要求运行。程序是指令的集合。编写程序就是将解决问题的方法 编写成由一条条指令组成的程序,输入计算机中,计算机执行这一指令序列,就完成了规 定的任务。 指令就是计算机可以识别的命令。不同的计算机硬件系统有不同的指令集合,一台 计算机硬件系统能识别的所有指令的集合,称为它的指令系统。 程序设计语言按语言级别分为机器语言、汇编语言和高级语言。 1. 机器语言 由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。它是面向机器 的语言,不同类型的机器其指令系统不同,机器语言也不同,程序具有不可移植性,代码可 读性差,编写程序复杂,但其执行的速度快。 2. 汇编语言 汇编语言可将机器指令用人们能读得懂的助记符来表示,如ADD AX,BX 、SUB AX,5等。每条指令对应于一条机器语言指令,由于采用了助记的符号 BX 、MOVAX, 名,这样,每条指令的意义较机器语言都更容易理解和把握了。汇编语言是面向机器的语 言,程序的可移植性差。汇编语言必须编译成机器语言后才能执行。汇编语言的翻译软 件称为汇编程序。 3. 高级语言 高级语言是面向问题的语言,其特点是在一定程度上与具体机器无关,程序中可以采 用具有一定含义的数据名和容易理解的执行语句,这使编写程序变得易学、易用、易维护。 高级语言程序翻译成机器语言后才能执行。如何将高级语言翻译成机器语言呢 ? 有以下 两种方式。 (1)编译方式。将编写好的源程序经编译软件进行编译、链接后,生成可执行文件 , 然后执行。这种方式的交互性差,程序执行的效率高,如 C 语言、FORTRAN 、Pascal语 言等 ( 。 2)解释方式。程序的运行是一边通过程序解释软件“翻译”,一边运行的。这种方 第 1 章  C 语言概述 式的交互性好,但执行效率低,如早期的BASIC 语言、FoxBASE 等。 1.2 C语言的发展与特点 1. 1.C语言的发展 C语言的原型是ALGOL60 语言(也称A语言)。 1963 年,剑桥大学将ALGOL60 语言发展成为CPL(combinedprogramminglanguage)语言。 1967 年,剑桥大学的MatinRichards对CPL 语言进行了简化,于是产生了BCPL 语言。 1970 年,美国贝尔实验室的KenThompson将BCPL 进行了修改,并为它起了一个 有趣的名字“B语言”。并且他用B语言写了第一个UNIX 操作系统。 而在1973 年,美国贝尔实验室的DennisMRitchie在B语言的基础上设计出了一种 新的语言,他取了BCPL 的第二个字母作为这种语言的名字,这就是C语言。 为了推广UNIX 操作系统,1977 年DennisMRitchie发表了不依赖于具体机器系统 的C语言编译文本《可移植的C语言编译程序》。 1978 年,BrianWKernighian和DennisMRitchie出版了名著TheCPging Lgg。他们二人通常简称为K&R,因此也有人称该书为K&R标准。(r) 但(o) 是(r) ,K&R(amm) 并没(a) 有(u) 定(a) 义(e) 一个完整的标准C语言,许多开发机构推出了自己的C语言版本,这些版本 之间的微小差别不时引起兼容性上的问题。后来,由美国国家标准学会ANSI(American nationalstandardinstitute)在各种C语言版本的基础上制定了一个C语言标准,于1983 年发表,通常称为ANSIC 。1987 年ANSI 又公布了新标准———87ANSIC 。目前广泛流 行的各种C编译系统都是以它为基础的。 1983 年,贝尔实验室的BjarneStroustrup推出了C++语言。C++语言进一步扩充和 完善了C语言,成为一种面向对象的程序设计语言。 2.C语言的特点 C语言是一种通用、灵活、结构化、标准化、使用广泛的编程语言,能完成用户的各种 任务,特别适合进行系统程序设计和对硬件进行操作的场合。它具有如下的特征。 (1)简洁紧凑、灵活方便。C语言一共只有32 个关键字,9种控制语句,程序书写自 由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起 来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的 工作单元。 (2)运算符丰富。C语言的运算符包含的范围很广泛,共有34 个运算符。C语言把 括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表 达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。 (3)数据结构丰富。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、 C 语言程序设计与项目实践(第 2 版) 结构体类型、共用体类型等,能用来实现各种复杂的数据类型的运算,并引入了指针概念, 使程序效率更高。另外,C语言具有强大的图形功能,支持多种显示器和驱动器,且计算 功能、逻辑判断功能强大。 (4)结构化编程。结构化编程的显著特点是代码及数据分离,即程序的各个部分除 了必要的信息交流外彼此独立。这种方式可使程序层次清晰,便于使用、维护以及调试。 C语言的函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全 结构化。 (5)语法限制不太严格、程序设计自由度大。一般的高级语言语法检查比较严,能够 检查出几乎所有的语法错误,而C语言允许程序编写者有较大的自由度。 (6)允许直接访问物理地址,直接操作硬件。这个特点使C语言既具有高级语言的 功能,又具有低级语言的许多功能,因此可以用来编写系统软件。 (7)程序执行效率高。C语言的目标代码一般只比汇编程序生成的目标代码效率低 10%~20% 。 (8)可移植性好。C语言有一个突出的优点就是适合于多种操作系统,如DOS 、 UNIX,也适用于多种机型。 当然,C语言也有自身的不足,例如,C语言的语法限制不太严格,对变量的类型约束 不严格,影响程序的安全性,对数的下标越界不做检查等。从应用的角度看,C语言比其 他高级语言较难掌握。 1.3 C程序的上机调试步骤和方法 1. 1. 编制并运行程序的步骤 C程序在计算机上的实现与其他高级语言程序一样,一般要经过编辑、编译、链接、运 行4个步骤,如图1-1所示。其基本步骤如下。 (1)编辑。编辑就是建立、修改C源程序并把它输入计算机的过程。C程序的源文 c, cpp 件以文本文件的形式保存,它的扩展名为.如果是C++则扩展名为.。 源文件的编辑可以用任何文字处理软件完成,一般用编译器本身集成的编辑器进行 编辑。 ob (2)编译(成目标程序文件.j)。C语言是以编译方式实现的高级语言,C程序的实 现必须经过编译程序对源文件进行编译,生成目标代码文件, oj。编译前 一般先要进行预处理,如进行宏代换,包含其他文件,等等。 它的扩展名为.b 编译程序把一个源程序翻译成目标程序的工作过程分为5个阶段:词法分析、语法 分析、语义检查和中间代码生成、代码优化和、目标代码生成。该阶段主要进行词法分析 和语法分析,又称源程序分析,分析过程中发现有语法错误,给出提示信息。 (3)链接(成可执行程序文件.e)。编译形成的目标代码还不能在计算机上直接运 ex 行,必须将其与库文件进行链接,这个过程由链接程序自动进行,链接后生成可执行文件, 它的扩展名为.x直至正确为止。 ee。如果链接出错同样需要返回到编辑步骤修改源程序, 第 1 章  C 语言概述 图1- 1 C 程序的实现过程 (4)运行(可执行程序文件)。链接成功后即可运行程序。 上述步骤中,第一步的编辑工作是最繁杂而又必须细致地由人工在计算机上完成,其 他步骤则相对简单,基本上由计算机自动完成。 程序运行后,可以根据运行结果判断程序是否还存在其他方面的错误。编译时产生 的错误属于语法错误,而运行时出现的错误一般是逻辑错误。出现逻辑错误时需要修改 原有算法,重新进行编辑、编译和链接,再运行程序。 2.VisualC+ + 2010 上机运行C语言程序步骤 VisualC+cc文件, + 2010 不能单独编译.pp 或者.这些文件必须依赖于某一个项目, 因此必须创建一个项目。 有很多种方法都可以创建项目,可以选择“文件”→“新建”→“项目”命令,也可以在工 具栏中单击“新建项目”按钮。这里在起始页上新建项目,如图1-2所示。 1)标题栏 VisualC++2010 主窗口的第一行就是标题栏。 标题栏的左边显示当前文件的文件名以及版本信息。 2)菜单栏 标题栏下面依次是菜单栏和工具栏。各菜单的功能如下。 (1)文件:用来创建、打开、保存项目文件,创建项目文件是必须做的第一步。 (2)编辑:用来编辑文件。 (3)视图:用来查看代码,显示其他窗口,打开或关闭工具栏。 (4)项目:用来添加类、新项和设置启动项(注意,该项只有在新建项目或打开项目 C语言程序设计与项目实践(第2版) 图1- 2 VisualC+ + 2010 起始页 时才会出现)。 (5)调试:用来设置项目的各项配置,编译、创建和执行应用程序,调试程序。 (6)工具:用来对工具栏、菜单以及集成开发环境进行定制。 (7)窗口:用来新建、拆分窗口和进行窗口布局。 (8)帮助:给出相关的帮助。 3)工具栏 工具栏和菜单栏的作用是一样的,只不过工具栏是把菜单栏中经常用到的功能选出 来并用图形表示,方便操作。VisualC+ + 2010 有多个工具栏,常用的有标准工具栏和文 本编辑器工具栏。图1-3所示的是标准工具栏。 图1- 3 标准工具栏 标准工具栏中的各个按钮从左到右功能分别如下。 (1)创建一个新项目。 (2)添加新项。 (3)打开一个已经保存的文件。 (4)保存当前文件。 (5)保存所有文件。 (6)剪切选定内容到剪贴板。 (7)复制选定内容到剪贴板。 (8)在当前位置粘贴剪贴板中的内容。 第 1 章  C 语言概述 (9)撤销上一次的操作。 (10)重做被撤销的操作。 (11)启动调试程序。 (12)配置解决方案。 (13)设置解决方案平台。 (14)在文件中查找。 文本编辑器工具栏按钮从左到右功能分别如下。 (1)显示对象成员列表。 (2)显示参数信息。 (3)显示快速信息。 (4)显示文字自动完成。 (5)注释选中行。 (6)取消对选中行的注释。 单击“新建项目”按钮后进入新建项目向导,界面如图1-4所示。 图1- 4 “新建项目”对话框 选择“Win32控制台应用程序”选项,输入项目名称helo,单击“浏览”按钮,选择项目 文件保存的位置,输入解决方案名称,单击“确定”按钮。是否为解决方案创建目录可暂时 不管,其主要区别在于解决方案是否和项目文件在同一目录。一个解决方案中可以有多 个项目。 接下来进入创建界面,如图1-5所示,在Win32应用程序向导的第一个界面直接单击 C语言程序设计与项目实践(第2版) “下一步”按钮即可。 图1- 5 Win32 控制台程序创建界面 在下个界面中勾选“空项目”复选框,这里不需要预编译头文件,如图1-6所示。单击 “完成”按钮,显示如图1-7所示的工作区,界面中的左窗格为“解决方案资源管理器” 窗格。 图1- 6 Win32 控制台程序设置 第1章 C语言概述 图1- 7 工作区 解决方案资源管理器包含外部依赖项、头文件、源文件和资源文件。 (1)展开“外部依赖项”选项,可以查看项目所包含的所有外部依赖项。 (2)展开“头文件”选项,可查看本项目包含的所有头文件,也可添加、删除头文件。 (3)展开“源文件”选项,可查看或编写源文件,也可添加、删除源文件。 文件 ( 。 4)展开“资源文件”选项,可查看本项目所包含的资源文件,也可添加、删除资源 选择项目helo中的“源文件”选项,右击,选择“添加”→“新建项”命令,如图1-8 所示。 图1- 8 添加新建项 在向导中选择“代码”→“C++文件(cpp)”选项,在“名称”对话框中输入Man,单击 “添加”按钮,如图1-9所示。 .i 这时已经成功添加了一个Main文件,如图1-10所示,该窗格的主要功能是供用户进 行源代码的编辑。 C语言程序设计与项目实践(第2版) 图1- 9 创建C++源程序文件 图1-10 编写C程序的源代码 源代码编辑窗格可以供用户编辑、修改源代码和文本文件,可以为文件中的关键字、 注释代码等不同文字赋以不同的颜色,使程序一目了然;还能够自动缩进和对齐;可以在 用户输入一个函数名后,自动显示函数相应的参数和变量等。 然后编译程序,选择要编译的源程序Main或直接调试运行,如图1-11 所示。 主界面下方的窗格为输出窗格,显示程序运行状态,如图1-12 所示。其作用是在编 译、链接时显示编译、链接信息。 10