1.3 C语言简介
1.3.1 如何学习C语言
学习提示
【了解】如何学习C语言
初学C语言的人,开始都会有一种感觉:知识点显得很零散,没有一定的系统性,每一个知识点就像是一个个孤立的小球。但随着学习的深入,他们就会发现:实际上,C语言中的每一个知识点与其他知识点有着密切的联系,其中有一条主线将所有的知识点串在一起。下面,我们就来介绍C语言中的这条主线。
C程序的基本单位是函数,也就是说一个C程序是由一个或若干个函数构成的。该内容将在第7章予以介绍。
为了保证某些特定的函数能够正常运行,需要用编辑预处理命令将一些头文件在程序一开始给出。这些内容将会在第10章予以介绍。
一个函数是由一条条语句构成的,为了实现一些特殊的要求,又需要用到一些具有特定功能的语句结构,如顺序、选择、循环等。这些内容会分别在第3、4、5章予以介绍。
常量、变量、表达式等都可以构成语句,因此,在第2章安排了关于常量、变量、表达式等方面的知识。
考虑到知识点的复杂程度以及初学者的阅读习惯,在不改变以上线索的基础上,我们对本书的结构进行了合理安排,大家可在学习的过程中慢慢体会。
1.3.2 C程序的构成
学习提示
【掌握】C程序的构成和书写格式
用 C语言编写的程序称为C程序。C程序的基本单位是函数,一个 C程序由一个或若干个函数构成;并且,程序中有且只能有一个主函数,即main函数。不论main函数在整个程序中的位置如何,C程序总是从main函数开始执行,其他函数由main函数直接或间接调用执行。
C程序主要有两种文件形式:头文件和源文件。头文件一般以“.h”为文件扩展名,通常被“include”(包含)在源程序文件的开头,所以也称为“包含文件”;源文件通常以“.c”为文件扩展名。
下面结合一个C程序例子来详细讲解C程序的构成。
【例1-1】一个简单的C程序,其功能是求键盘输入的两个数中较大的数。
程序代码
(1)头文件
程序第1行中的“stdio.h”是头文件。语句“#include stdio.h”是预处理命令,用于将各头文件包含到程序中,其后不能加分号“;”。
(2)主函数
●main是主函数名,其后的一对圆括号中间可以带参数,也可以是空的,但一对圆括号不能省略(在第9章中介绍了关于main函数的参数)。
●程序必须有且只能有一个主函数。无论主函数放在文件中什么位置(开头、中间或最后),程序运行总是从主函数开始,最后在主函数中结束。
●程序中除了 main函数外,还可以有若干个其他函数。其他函数是由主函数直接或间接调用来执行的。但其他函数不能反过来调用主函数。
(3)函数头和函数体
函数定义由两部分组成:函数头和函数体。
●函数头包括函数名、函数类型、函数参数名和参数类型。在例1-1中,int max(int x,int y)为函数头,max为函数名,函数类型为int,函数参数名为x,y,参数类型也为int型。
●用大括号“{}”括起来的部分称为函数体,左大括号“{”表示函数体的开始,右大括号“}”表示函数体的结束。
●函数体内是C语言的语句,一般包括数据说明语句和执行语句两部分。执行语句必须放在说明语句之后。“int z;”和“int a,b,c;”都是说明语句。说明语句又称定义语句,它后面的其他语句统称为执行语句。
(4)C程序主要由小写字母组成
习惯上,C程序主要由小写字母组成,也可以是大写字母,只是应该少用。一条C语言语句用分号“;”来结束,“;”是语句的一部分,不能缺少。
(5)注释语句
注释语句主要用于说明变量的含义和程序段的功能等,以提高程序的可读性,它不参与程序的运行。“/*……*/”是对程序的注释,可以出现在程序的任何位置,“/*”和“*/”必须成对出现。另外,C语言还有一种形式的注释,即使用“//”,不同的是,这种方式只能对单行进行注释,而且注释的内容必须跟在“//”的后面。例如,注释形式:
/*调用max函数*/
等价于:
//调用max函数
请注意
当一个程序只作为另一个程序的子程序的时候,那么该程序中可以没有主函数main,因为主函数只是一个函数的入口,如果没有主函数的话,只能说该程序不能单独执行。
1.3.3 C程序的书写格式
C程序的书写格式比较自由,但有以下几点需要注意。
●标识符的大小写是有区别的。例如,a和A表示两个不同的变量。
●C程序语句用分号“;”结束,分号是C语句的必要组成部分,但是在预处理命令、函数头、大括号“{”和“}”之后不能加分号。
●一行可以写多个语句,一个语句可以分写在多行。
●可以在程序的任何位置用“/*……*/”或“//”对程序或语句进行注释。
1.3.4 C程序的开发过程
学习提示
【掌握】C程序的开发过程
C程序开发的基本过程如图1-18所示。
图1-18 C程序的开发过程
(1)编辑
在VC6.0集成开发环境的源程序编辑窗口中,将C语言源程序通过键盘输入到计算机,并以文件的形式存储到磁盘中。源程序文件以“.c”作为扩展名。
(2)编译
使用VC6.0编译器将C语言源程序转换为目标程序,这一过程称为编译。在编译过程中,可能会发现源程序中的一些语法错误,这时需要重新利用编辑程序来修改源程序,然后再重新编译。源程序文件进行编译之后形成一个扩展名为“.obj”的二进制文件,称为目标文件。C语言中的每条可执行语句经过编译后最终都将被转换成二进制的机器指令。
(3)连接
经过编译后生成的目标程序是不能直接执行的,需要经过连接之后才能生成可执行程序。连接是将编译形成的目标文件“.obj”和库函数及其他目录文件连接,形成统一的可执行的二进制文件“.exe”。
(4)执行
经过编译、连接之后,源程序文件就生成了扩展名为“.exe”的可执行文件,执行该文件可以得到程序的运行结果。
真题演练
【例1】以下叙述中错误的是( )。
A)使用3种基本结构构成的程序只能解决简单问题
B)结构化程序由顺序、分支、循环3种基本结构组成
C)C语言是一种结构化程序设计语言
D)结构化程序设计提倡模块化的设计方法
【解析】使用顺序、选择(分支)、循环3种基本结构构成的程序可以解决所有问题,而不只是能解决简单问题,所以选项A错误。
【答案】A
【例2】以下叙述中错误的是( )。
A)在进行模块化程序设计的时候,应首先完成每个模块的编写、调试,再集中考虑主程序的算法
B)同一程序的各模块可由一组人员同时进行编写、调试,可提高编写程序的效率
C)模块化的程序设计是采用自顶向下、逐步细化的原则
D)程序的每个模块都可通过 3种基本结构实现
【解析】结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保证自顶向下、逐步细化、模块化设计、结构化编码。进行模块化设计时,首先设计框架,并定义和调试好各个模块之间的输入输出关系,然后完成各个模块的编写、调试后再集中编译。模块化的程序设计采用自顶向下、逐步细化的原则,因此选项A叙述错误,选项 C叙述正确。各个模块可以由不同人员同时进行编写、调试,可提高编写程序的效率,因此选项B叙述正确。结构化程序主要有3种基本控制结构(顺序结构、选择结构、循环结构),这3种基本结构可以解决任何复杂的问题,因此选项D叙述正确。
【答案】A
【例3】以下选项中叙述正确的是( )。
A)函数体必须由“{”开始
B)C程序必须由main语句开始
C)C程序中的注释可以嵌套
D)C程序中的注释必须在一行内完成
【解析】函数体是函数首部下面的大括号内的部分,所以函数体必须由“{”开始,因此选项 A正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从main函数开始执行的,不是main语句,因此选项B错误。C程序中允许两种注释:以“//”开头的单行注释;以“/*”开始,以“*/”结束的块式注释,因此选项D错误。函数可以嵌套,注释不能嵌套,因此选项C错误。
【答案】A