
出版社: 科学
原售价: 89.00
折扣价: 70.40
折扣购买: C程序设计与案例教程(十三五江苏省高等学校重点教材)
ISBN: 9787030704528
第1章 走进C语言世界
本章思维导图
学习任务
1.了解C语言的特点与应用领域;
2.掌握C程序的基本组成与书写规范;
3.初步掌握C程序设计的基本思想方法;
4.初步掌握C程序设计的算法;
5.掌握C程序的开发环境与调试步骤;
6.能读懂简单的C程序。
1.1 初识常春藤式的 C语言
1.1.1 范例:全球首个 C演示程序
在计算机发展史上,没有哪一种程序设计语言能像 C语言这样充满魅力。著名的计算机科学家 Brian W. Kernighan与 C语言开发者 Dennis M. Ritchie合著 The C Programme Language于 1978年出版,成为 C语言方面最权威的经典教材之一。该书将“ hello, world”(小写,中间用逗号分隔)作为开篇第一个程序,虽然之后几乎没流传下来这个最初的格式,但从此在学习一门新语言的时候用“ Hello World!”作为起步已成为计算机程序界的一个传统。
“Hello World!”程序如下:
#include
#include
void main() /*主函数 */
{ /*函数体开始 */
printf(\"Hello World! \"); /*输出一行问候语 Hello World! */
system(\"pause\"); /*显示运行结果可暂停,按任意键继续 */
} /*函数体结束 */
程序运行结果如图1-1所示。
【试一试】编写程序,使运行结果如下:
我爱你, C语言!
我走进了大学校园!!
我更加爱你,中国!!!
图1-1 “Hello World!”C语言演示程序的运行结果
1.1.2 C语言的前世今生 .
20世纪 60年代末至 70年代初,美国计算机科学学者 Kenneth L. Thompson在贝尔实验室工作期间,以 BCPL(basic combined programming language)为基础,设计出更接近硬件的 B语言(取 BCPL的首字母),并使用 B语言编写一个游戏 “ Space Travel”,他想使用当时空闲的一台机器 PDP-7玩这个游戏,但是这台机器没有操作系统,于是他用 B语言为 PDP-7开发了操作系统,随后与同在贝尔实验室的另一位高级研究员 Dennis M. Ritchie合作开发,该系统命名为 Unix。Dennis M. Ritchie也很想玩“Space Travel”,于是进一步改进 B语言,取 BCPL第二个字母作为新语言的名字,称为 C语言。1972年 C语言的诞生是程序设计语言发展过程中的一个重要里程碑,此后, C语言一直在系统编程、嵌入式编程等领域占据着主宰地位。其后新生的语言如 C++、Java、C#、Python等都借鉴了 C语言的思想与语法,并在各自领域大获成功。美国国家标准学会(ANSI)于 1983年专门成立 C语言标准委员会,完成 C语言的标准 C89、 C90以及后续出现 C99、C11标准。
1.C语言的应用领域
世界上编程语言有几百种,其中 C语言是一门通用的、模块化、程序化、高效性和可移植性的编程语言,不仅适合开发操作系统而且适合开发应用软件。例如, Linux、Windows、 macOS、Unix、Vxworks等操作系统的内核都用 C语言编写,一些应用软件如 WPS、Photoshop、 Media Player也用 C语言开发。伴随着嵌入和实时系统的兴起,人工智能(AI)、机器人、自动驾驶、智能电器等用到的芯片驱动以及应用程序绝大部分是用 C语言实现的。利用 C语言可以开发很多游戏,比如推箱子、贪吃蛇等。 C语言的应用领域如图1-2所示。
学会 C语言可以做到以一法通万法,这是它经久不衰的主要原因。
常春藤式的 C语言近 40年来一直位居 TIOBE排行榜前列,表1-1给出了 1986~2021年计算机编程语言 TIOBE排名前 10的语言。
图灵奖是计算机领域的国际最高奖项,被誉为“计算机界的诺贝尔奖”。 1983年, Unix设计者 Kenneth L. Thompson与 C语言开发者 Dennis M. Ritchie成为第十八届图灵奖共同获得者。
图1-2 C语言的应用领域
表1-1 计算机编程语言 TIOBE排名(1986~2021年)
2.C语言的特点
C语言按模块化方式组织程序,结构层次清晰,运行效率高,易于调试和维护。 C语言主要有 6方面的优点:
(1)C语言集低级语言和高级语言特点于一体。
C语言具有低级语言的特点:可以直接对计算机硬件进行操作,允许直接访问内存的物理地址,进行位(bit)一级的操作。例如,数组 int arr[5],经过编译以后变成了(基地址+偏移量)的方式。对于计算机来说,没有比加法更快的运算,没有任何一种方法比(基地址+偏移量)的存取法更快。
C语言具有高级语言的特点:程序的编写符合人们的思维习惯,书写形式自由,一行可以写一条或多条语句。
(2)C语言允许在编译之前使用预处理命令,提高编程效率。 C语句简练、紧凑,使用方便、灵活。
(3)C语言具有固定的关键字和灵活定义的标识符,以及丰富的运算符和数据类型。 C语言定义标识符时严格区分大小写字母,例如, pi 与 PI 是 2个不同的标识符;具有 32个关键字,如: int、char、float、for、do、case、switch 等;有 34种运算符,如:算术、赋值、逻辑、关系、强制类型转换等;有多种数据类型,如:整型、实型、字符型、数组、指针、结构体、共用体等,尤其是指针类型数据,使用十分灵活和多样化;还有 9种控制语句,如: if-else,switch()、while()、do-while()、for()、continue、break、goto(不提倡使用)、return。
(4)C语言是一种典型的结构化程序设计语言。 C语言具有三种基本结构:顺序结构、选择结构(分支结构)、循环结构(重复结构)。
(5)C语言是一种模块化程序设计语言。 C语言程序由一系列函数构成,由函数实现模块功能,模块间通过函数调用实现数据通信。
(6)C语言可移植性好,生成的目标代码质量高。由于 C语言本身不依赖于机器硬件,因此可以被广泛地移植到各种类型的计算机上。
C语言也有缺点,例如, C语言因其程序设计自由的特点,同时也意味着容错性差,出现的错误往往难以察觉,数组下标越界不报错,不检查常识性、逻辑性错误,操作硬件出错有时不报错,可能会造成难以预测的后果。
1.1.3 C程序基本结构
一个完整的 C程序有且仅有一个主函数 main()和若干个函数,特殊情况仅由一个 main()函数构成。
【例 1-1】用 C语言编程计算矩形的面积。
程序代码如下:
// 计算矩形的面积
#include
void main()
{
int length, width, area;
length=7;
width=3;
area= length * width;
printf(\"length=7, width=3\\n\" );
printf(\"area=%d\\n\",area);
}
解析:此程序仅由主函数 main()构成,使用了编译预处理命令 #include
#include命令一般放在程序的开头。 C语言提供两类函数:自定义函数和库函数,其中,用户在 C程序中自行编写的函数,称为自定义函数;以库的形式存放在系统中的,称为库函数。使用库函数时,要用编译预处理命令 #include将有关的“头文件”包含到用户源文件中,例如,使用标准输入 scanf()、输出 printf()库函数时,要用到 stdio.h头文件,该文件后缀中的 h是 head的缩写。 stdio是 standard input & output的缩写,它是以标准的输入输出设备作为输入输出对象。所有 C标准库头文件都应该位于编译器安装目录的“include”子目录下。
主函数 main()是程序的入口处,不论把 main()写在程序的开头、中间还是最后位置,一个 C程序总是从 main()开始执行,并在 main()结束时而结束。
主函数 main()的书写形式有以下几种:
main()
void main()
int main(void)
“main()”中括号 ()内可以不带任何参数,也可以用关键字 void明确表示不带参数。
若 main()之前的指定关键字为 void,表示主函数不给操作系统返回任何信息;若指定关键字为 int,则表示主函数返回一个整数值给操作系统,且程序的最后一行必须是语句 “return 0;”。
【读一读】C语言中的自定义函数与注释语句
用户自定义的函数通常由函数说明部分和函数体两部分组成。函数说明部分:包括函数名、函数类型、函数形式参数(形参)名、形参的类型。函数体:指函数说明部分下面的花括号 { }里的内容。如果一个函数内有多层花括号,则最外层的一对 { }为函数体的范围。函数体一般包括:
◆变量定义。如例 1-1中 main()函数体中的“ int length, width, area;”。
◆执行部分。由若干个语句组成。
为提高 C程序的可读性,对程序中的组成部分进行解释,称为注释。注释仅用来向用户提示或解释程序的意义。 C语言的注释符有 //和 /* */ 两种格式,通常用 //格式表示注释语句单独成为一行,用 /* */ 格式表示在一行语句的最右侧添加注释。
注释可出现在程序中的任何位置,通常出现在源程序的开头、函数的开头或程序的中间。程序编译时,不对注释作任何处理,所以可以用汉字或中英文字符表示。初学者要养成在程序适当的地方加注释的良好编程习惯。在调试程序中对暂不使用的语句也可用注释符括起来,使编译跳过不作处理,待调试结束后再去掉注释符。
【例1-2】编写程序,计算从键盘上输入的两个整数之和,要求调用自定义函数。程序代码如下:
#include
int main()
{ int add(int num1,int num2); /*声明被调用函数add()*/
int x,y,sum=0; /*定义变量x,y,sum为整型, 并为sum赋初值0*/
printf(\"请输入整数x与y的值:\");
scanf (\"%d%d\",&x,&y); /*从键盘上输入变量x、y的值*/
sum=add(x,y); /*调用函数add(),将返回值赋给sum*/
printf(\"x+y=%d\\n\",sum); /*输出x、y之和sum的值*/
return 0;
}
//计算两整数之和的函数
int add(int num1,int num2) /*定义函数add(),形式参数num1, num2为整型 */