第1章 概 述
基本知识点:C语言的特点、C语言标识符和C程序的组成等相关概念。
重 点:C程序的结构和C程序的执行过程。
难 点:C程序的编译过程。
知识点:C 语言的基本概念
要点归纳
1.C 语言的特点
C语言的特点可大致归纳如下:
● C语言短小精悍,基本组成部分精炼、简洁。C 语言一共只有32个标准关键字、45 个标准运算符以及9种控制语句。
● C语言运算符丰富,表达能力强。 C 语言具有高级语言和低级语言的双重特点,其 运算符包含的内容广泛,所生成的表达式简练、灵活,有利于提高编译效率和目标 代码的质量。
● C语言数据结构丰富,结构化好。 C 语言提供了编写结构化程序所需要的各种数据 结构和控制结构,这些丰富的数据结构和控制结构以及以函数调用为主的程序设计 风格,保证了利用C 语言所编写的程序能够具有良好的结构。
● C语言提供了某些接近汇编语言的功能,有利于编写系统软件。 C 语言提供的一些 运算和操作,能够实现汇编语言的一些功能,如它可以直接访问物理地址,并能进 行二进制位运算等,这为编写系统软件提供了方便条件。
● C语言程序可移植性好。在C 语言所提供的语句中,没有直接依赖于硬件的语句, 与硬件有关的操作,如数据的输入、输出等都是通过调用系统提供的库函数来实现 的,而这些库函数本身并不是C 语言的组成部分。因此,用C 语言编写的程序能够 很容易地从一种计算机环境移植到另一种计算机环境中。
2.C 语言标识符
在C语言中,标识符是一个名称,可以用作变量名、函数名和文件名等。C语言允许用 作标识符的字符有:
● 26个英文字母,包括大小写字母(共52个)。
● 数 字 0 , 1 , … , 9 。
● 下 划 线 ( _ ) 。
C 语言的标识符由满足如下条件的字符序列:
●只能由英文字母、数字和下划线组成。
● 长度为1~32。
●必须以英文字母或下划线开头。
C 语言的标识符可以分为以下三类:
● 关键字。 C 语言规定了一批标识符,它们在程序中都代表着固定的含义,不能另作 它用。例如,用来说明变量类型的标识符int 、float 等,它们不能再用作变量名或函 数名。
●预定义标识符。这些标识符在C 语言中也都有特定的含义,如C 语言提供的库函数 的名字(如printf) 和预编译处理命令(如 define) 等。因此为了避免误解,建议用 户不要把这些预定义标识符另作它用。
●用户标识符。由用户根据需要定义的标识符称为用户标识符。 一般用来给变量、函 数、数组或文件等命名。
有关标识符的注意事项如下:
● 在C 语言中,大小写字母有不同的含义,例如:num、Num 和 NUM 为三个不同的 标识符。
●在构造标识符时,应注意做到“见名知意”,即选有含意的英文单词(或汉语拼音) 作为标识符,以增加程序的可读性。如表示年可以用 year, 表示长度可用 length, 表示和可以用sum 等。
3.C 语言的风格
C 语言的风格概括如下:
● C语言严格区分英文字母大小写。
● C语言用“;”作为语句分隔符。
·C 语言中大括号“{”和“}”用于标识一个语句组,即构成一个复合语句,因此必 须配对使用。
·C 程序书写格式自由, 一行内可以写几个语句, 一个语句可以写在几行上。
●注释用来向用户提示或解释程序的意义, C 程序的注释部分应括在“1*”与“*/” 之间。在“/”和《*”之间不允许留有空格;注释部分允许出现在程序的任何位 置。程序编译时,忽略所有的注释符,对它们不做任何处理。
4.C 程序的组成
一 个C 程序的构成如下:
· 一 个C 源程序由函数构成(函数是C 程序的基本结构单位),其中至少包括一个主 函 数 (main 函 数 )
● C程序总是从main 函数开始执行的,直到main 函数结束。
·C 程序中可以包含常量、变量、运算和标识符。
5.C 程序的结构
C语言是一种结构化的程序设计语言。它提供了三种基本结构语句,结构化程序通常由 以下三种基本结构组成。
(1)顺序结构:一组按书写顺序执行的语句。这种结构的控制流顺次从一个处理过程 转向下一个处理过程。比如从一个语句a转向紧接着的下一个语句b, 从整体上看,a和b两个 语句的操作步骤之间就是一个顺序执行关系。
(2)选择结构:当执行到if语句、switch 语句时都可构成选择结构。当执行到这些语句 时,先计算条件,然后根据条件表达式值的真假,选择相应的处理执行。
(3)循环结构:当执行到while、for、do等语句时都可构成循环结构。当执行到这些语 句时,根据条件使一组语句重复执行多次或一次也不执行。循环结构常用的有两种形式:
● while 型循环结构:当条件为真时,反复执行循环体,直到条件为假。即先判断重 复执行的结构条件,后执行循环体。
● do-while型循环结构:反复执行循环体,直至条件为假时,结束重复操作。即先执 行循环体,后判断循环执行的结束条件。
任何goto结构都可以等价地转换成上述三种结构。
6. 结构化程序设计
C 程序由函数组成,从组织形式上看,函数亦称为模块,每个模块实现一个单一的功能, 这称为模块化程序设计。模块化程序设计的思想是,按照自顶向下的原则,把问题逐层分 解。先从总体出发,把问题分成若干个大块,每一大块代表一个大任务;在此基础上再对 每个大块细化,把大任务变成若干个小任务。这一过程叫做逐步求精,直到每个小任务都 能用基本结构(顺序、分支和循环三种结构之一)表示为止。在划分模块的过程中,应保 证模块的单入口、单出口、完整性和独立性,这种方法称为结构化程序设计。
从组织结构上看,一个C 程序可以由若干个源程序文件(分别进行编译的文件模块)组 成,一个源文件可以由若干个函数及全局变量声明部分组成, 一个函数由数据定义部分和 执行语句组成。
7.C 程序的开发过程
开发一个C程序的基本过程如下:
(1)编辑。选择适当的编辑程序,将C语言源程序通过键盘输入到计算机中,并以文件 的形式存入到磁盘中。如在Turbo C系统下,经过编辑后得到的源程序文件默认以.c为文件 扩展名;在Visual C++系统下,经过编辑后得到的源程序文件默认以.cpp为文件扩展名。
(2)编译。通过编辑程序将源程序输入到计算机后,需要经过C语言编译器将其生成目 标程序。在对源程序的编译过程中,可能会发现程序中的一些语法错误,这时就需要重新 利用编辑程序来修改源程序,然后再重新编译。经过编译后得到的目标文件都是以.obj为其 文件扩展名。
(3)连接。经过编译后生成的目标文件是不能直接执行的,它需要经过连接之后才能 生成可执行的代码。连接后所得到的可执行文件都是以.exe 为其文件扩展名。
(4)执行。经过编译、连接之后,源程序文件就生成可执行的文件,这时就可以执行了。 在DOS系统下,只要键入可执行的文件名,并按回车键后,就可执行文件了;在Windows下, 通过双击可执行的文件名,就可执行文件了。
其中,编译和连接两步是由语言编译系统自动完成的,程序员只需使用相应的菜单或 命令即可。
例题解析
1. 单项选择题
【例1-1-1】以下 不是C 语言的特点。
A. 运算符丰富 B. 数据结构丰富
C. 可以直接访问物理地址 D. 函数包含的语句数目没有限制
① 解 :D。
【例1-1-2】下列关于C 语言标识符的叙述中正确的是
A. 标识符中可以出现下划线和中划线(减号)
B. 标识符中不可以出现中划线,但可以出现下划线
C. 标识符中可以出现下划线,但不可以放在标识符的开头
D. 标识符中可以出现在下划线和数字,它们都可以放在标识符的开头
D 解:标识符中不能有中划线,可以有下划线,且可以放在标识符的开头,但数字不 能放在标识符的开头。本题答案为B。
【例1-1-3】以下可用作C 语言用户标识符的一组标识是 9
A.void,define,WORD B.a3-3,_ 123,if
C.For,_abc,Case D.2a,DO,sizeof
① 解:在选项A 中void是C 语言关键字,define是预编译符;在选项B中a3-3不是合法的 标识符,if是C语言关键字;在选项D中 2a不是合法的标识符,sizeof 是C语言关键字;只有 选项C中均是合法的标识符。本题答案为C。
【例1-1-4】以下面几组选项中,均为不合法的标识符是 o
A.A,P_0,do B.float,la0,_A
C.b-a,goto,int D._ 123,temp,INT
D 解:选项A中A和P_0 是合法的标识符,do 是关键字,不是合法的标识符;选项B中 la0 和 A是合法的标识符,float 是关键字,不是合法的标识符;选项C中均为不合法的标识 符,因为goto和int都是关键字,b-a 包含了不合法的字符“-”;选项D中均为合法的标识符(注 意 ,INT 不同于int, 后者是关键字,前者不是)。本题答案为C。
【例1-1-5】以下叙述错误是 o
A. 一个C源程序可由一个或多个函数组成。
B. 一个C源程序必须包含一个main函数。
C.C 源程序的基本组成单位是函数。
D. 在C 源程序中,注释说明只能位于一条语句的后面。
D 解:在C源程序中,注释说明可以放在任意位置上。本题答案为D。 【例1-1-6】一个C 语言程序是由_
A. 一个主程序和若干子程序组成 B. 函数组成
C. 若干过程组成 D. 若干子程序组成 D 解 :C 语言程序是由函数组成的。本题答案为B。
【例1-1-7】C 语言规定,在一个源程序中,main 函数的位置
A. 必须在最开始 B. 必须在系统调用的库函数的后面
C. 可以任意 D. 必须在最后
① 解:main函数可以放在任意位置,只是不能放在其他函数中间。本题答案为C。
【例1-1-8】以下 是C 程序的基本结构单位。
A. 文件 B. 语句 C. 函数 D. 表达式
D 解:文件是C 程序的基本编译单元;表达式是运算符和运算数等构成的一个序列, 其目的是用来说明一个计算过程;语句是C 程序的基本组成单位。只有函数才是C程序的基 本结构单位。本题答案为C。
【例1-1-9】一 个C 程序的执行是从 。
A. 本程序的main函数开始,到main函数结束
B. 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C. 本程序的main函数开始,到本程序文件的最后一个函数结束
D. 本程序文件的第一个函数开始,到本程序的main函数结束
D 解:C程序的执行从main函数开始,直到main函数结束,中间可以调用其他函数。 本题答案为A。
【例1 - 1 - 10】 以下叙述正确的是
A. 在C程序中,main函数必须位于程序的最前面 B.C 程序的每行中只能写一条语句
C. 结构化程序由顺序、选择和循环三种基本结构组成
D. 在对一个C程序进行编译的过程中,可发现注释中的拼写错误 解 :C。
2. 填空题
【例1-1-11】C 语言规定,标识符只能由_ ① 、 ② 、 ③ 三种字符组成,而 且,第 一 个字符必 须是①或 _ ② o
①解:本题答案为①字母、②下划线、③数字(①和②可以交换)。
【例1-1-12】一 个C 程序一般由若干函数构成,程序中至少应包含一个 。
① 解:本题答案为主函数或main函数。
【例1-1-13】一 个C 程序总是从_ 开始执行的。
解:本题答案为主函数或main函数。
【例1-1-14】程序的三种基本控制结构是 ① 结构、 ② 结构和 ③ 结构。
解 :本题答案为①顺序、②选择(或分支)、③循环(或重复)。
【例1-1-15】C 程序编译后生成 ① 程序,连接后生成 ② 程序。
① 解 :①目标(或 .obj)、②可 执 行 ( 或 .exe)。
3. 判断题
【例1-1-16】判断以下叙述的正确性。
(1)在执行C程序时不是从main函数开始的。
(2)C 程序书写格式限制严格, 一行内必须写一个语句。
(3)C 程序书写格式比较自由, 一个语句可以分别写在多行上。
(4)C 程序书写格式严格,要求一行内必须写一个语句,并要有行号。
(5) 一 个C程序可由一个或多个函数组成。
(6) 一 个C程序必须包含一个main函数。
(7)C 程序的基本组成单位是函数。
( 8 ) 在C程序中,注释说明只能位于一条语句的后面。
(9) 一 个C程序只有在编译、连接成.exe 程序时才能执行。
解 :( 1 ) 错 误 。 (2)错误。 (3)正确。
(4)错误。 (5)正确。 (6)正确。
(7)正确。 (8)错误。 (9)正确。
4. 简答题
【例1-1-17】C 程序的三种基本控制结构是什么?
D 解:C 程序的三种基本控制结构是顺序、选择(条件)和循环(重复)结构。顺序 结构是指语句从上往下顺序执行的结构;选择结构是指根据指定的条件确定执行多个语句 中的一个语句的结构;循环结构是指根据指定的条件确定是否重复执行一个语句的结构。 实际上用顺序结构和循环结构完全可以实现选择结构,因此,理论上最基本的控制结构只 有两种。
结构化程序设计中只能使用这三种基本控制结构。
【例1-1-18】举例说明程序的三种基本结构。
D 解:程序的三种基本结构为顺序结构、选择结构和循环结构。例如,
以下为顺序结构:
int x=10;
printf("8d\n",&x);
以下为选择结构:
if(x>0)
y=1;
else if(x==0)
y=0; else
y=-1;
以下为循环结构:
for(i=0;i<10;i++)S=s+i;
【例1-1-19】若 一 个C 程序中函数的调用关系如图1.1所示,说明该程序的执行过程。
① 解:将图1.1-称为程序结构图,因为它反映了程序中函数之间的调用关系,即结构 组成关系。在该程序中,先从main函数开始执行;在执行main函数时,需要调用f1(函数, 则转向f1()函数去执行,f1()函数执行完毕,又返回到main函数;然后main 又要调用f2()函数,
则转向f2()函数去执行,f2()函数执行完毕,又返回到main 函数;继续执行main 函数余下的 语句,当全部执行完毕,则退出整个程序的执行过程。
同样,在执行f1() 函数时,又先后调用f11() 、f12() 和f() 函数执行,最后都返回到f1()函 数。在执行f2()函数时,先后调用f()和f21()函数执行,最后都返回到f2()函数。整个程序的 执行过程如图1.2所示,图中的虚线表示程
【例1-1-20】C 编译程序的功能是什么?
D 解:C 编译程序的功能是对C 源程序进行语法检查,若无语法错误,再翻译成目标代 码,最后通过与标准库连接后形成可执行文件。
没有C编译程序,编写的C程序是无法运行的。目前常用的C编译程序有Turbo C 、Visual C++ 和Borland C++等。
💬 互动问答:你在学习指针时遇到过哪些困惑?欢迎在评论区留言讨论!如果觉得本文对你有帮助,别忘了点赞👍、收藏⭐并关注作者获取更多C语言干货!
关注作者:持续更新C语言/C++、数据结构、算法、嵌入式开发等技术干货,带你从入门到精通!
下一章节内容预告:
数据类型及其运算
基本知识点:C 语言的数据类型、常量和变量、运算符、表达式等相关概念。
重 点:各种类型的数据之间的相互转换。
难 点:在程序设计中正确利用各种数据类型和相关运算符解决实际问题。