《21天学通C语言(第7版)》一2.2 程序的组成部分

2.2 程序的组成部分

21天学通C语言(第7版)
接下来,将逐行分析上面的程序示例。我们为程序清单中的每一行都添加了行号,以方便读者定位和查找正在分析和讨论的部分。

2.2.1 main()函数

main()函数位于程序清单2.1的第9~23行。在每个可执行的C程序中,main()函数必不可少。在最简单的情况下,main()函数由函数名main、其后的一对圆括号(其中包含void)和一对花括号({})组成。在大多数编译器中,省略圆括号中的void并不影响程序的运行。但是,ANSI标准规定,应该在main后的圆括号中写上void,以表示没有给main函数发送任何消息。

花括号内的语句组成了程序的主体。在一般情况下,程序从main()的第1条语句开始执行,到main()的最后一条语句结束。根据ANSI标准,main()中不能缺少return语句(第22行)。

2.2.2 #include和#define指令

include指令和#define指令分别位于程序清单2.1的第2行和第3行。#include指令命令C编译器,在编译时将包含文件的内容添加进程序中。包含文件(include file)是独立的磁盘文件,内含程序或编译器要使用的信息。这些包含文件(也称为头文件(header file))由编译器提供。一般情况下都不用修改这些文件中的内容,因此将其与源代码分离。所有包含文件的扩展名都是.h(如,stdio.h)。

使用#include指令,可以让编译器在编译过程中将指定的包含文件放入程序中。在程序清单2.1中,#include指令被解译为“添加stdio.h文件的内容”。几乎所有的C程序都要包含一个或多个包含文件。欲了解更多包含文件的相关内容,请参阅第22课。

define指令命令C编译器,在整个程序中用赋给指定项的值替换指定项。如果用#define在程序的顶部设置变量,不仅整个程序都能使用该项,而且在需要时可以很方便地更改该项。只需修改#define一行,便可替换所有该项的值,省去了在程序中逐一查找修改的麻烦。例如,假设你编写了一个工资单程序,用这种特殊的方法设置医疗保险(即,用#define设置HEALTH_INSURANCE的值),在保险费率发生变化时,只需修改该程序顶部(或头文件中)HEALTH_INSURANCE的值即可。这比逐行查找相关代码再逐一修改保险费率要简单得多。我们将在第3课详细介绍#define指令。

2.2.3 变量定义

变量定义位于程序清单2.1的第5行。变量是赋给内存中某个位置的名称,用于储存信息。在程序执行期间,程序使用变量储存各种不同类型的信息。在C语言中,必须先定义变量才能使用。变量定义告诉编译器变量的名称和待储存信息的类型。在上面的程序示例中,第5行int year1, year2;定义了两个变量——分别名为year1和year2,每个变量都储存一个整型值。第3课将详细介绍变量和变量定义的内容。

2.2.4 函数原型

函数原型位于程序清单2.1的第7行。函数原型(function prototype)出现在使用函数之前,将程序中所用函数的名称和参数告知编译器。函数原型与函数定义(function definition)不同,函数定义包含组成函数的实际语句(函数定义在2.2.6节中详述)。

2.2.5 程序语句

程序清单2.1的第12、13、14、17、19、20、22和28行都是程序语句。C程序的具体工作由它的语句来完成,如在屏幕上显示信息、读取键盘的输入、执行数学运算、调用函数、读取磁盘文件以及程序需要执行的其他操作。本书用大部分篇幅分析和讲解各种C语句。就现在而言,你只需记住:在源代码中C语句通常占一行,并以分号结尾。接下来,将详细讲解bigyear.c中的语句。

(1) pri ntf()语句

printf()语句(第12、13、19和20行)是在屏幕上显示信息的库函数。printf()语句可以显示简单的文本消息(如12和13行所示),也可以显示带有一个或多个变量值的消息(如第19行和第20行所示)。

(2) scanf()语句

scanf()语句(第14行)也是一个库函数。它读取从键盘输入的数据,并将数据赋给程序中的一个或多个变量。

程序中第17行的语句,调用calcYear()函数。也就是说,该语句执行calcYear()函数中包含的程序语句。此外,year1作为参数被发送给函数。执行完calcYear()中的语句后,calcYear()向程序返回一个值,该值被储存在year2变量中。

(3) return语句

程序清单2.1中的第22行和第28行都是return语句。其中,第28行的return语句属于calcYear()函数,该函数计算一个人到指定年龄时的年份,通过将#define定义的TARGET_AGE加上变量year1,并将结果返回调用calcYear()的程序。第22行的return语句,在程序结束前将0这个值返回操作系统。

2.2.6 函数定义

程序清单2.1中的函数定义在第26~29行。该程序中涉及了两种类型的函数(库函数和用户自定义函数)。printf()和scanf()函数是库函数,第26~29行的calcYear()函数是用户自定义函数。顾名思义,用户自定义函数由程序员在程序开发过程中编写。calcYear()函数将创建的TARGET_AGE与年份相加,并将结果(另一个不同的年份)返回调用该函数的程序。在第5课中,你将学到正确使用函数是养成良好的C程序设计习惯的关键。

这里要提醒读者注意,在真正的C程序中,可能不会用函数完成诸如计算两个数加法这样简单的任务。程序清单2.1这样做只是为了演示,方便读者理解函数。

2.2.7 程序的注释

程序清单2.1中的第1、11、16和25行都是程序的注释。程序中以/开始、以/结尾的部分,或者以//开始的单独一行都称为注释(comment)。编译器会忽略所有的注释,无论你在注释中写任何内容,都不会影响程序的运行。第1种风格的注释可写成一行或多行(跨行)下面有3个示例:

/* 该注释独占一行 */
int a,b,c; /* 该注释占一行的一部分 */
/* 该注释
跨越
多行 */

注释不能套嵌。把一条注释放入另一条注释中称为嵌套(nested)注释。大多数编译器都不允许下面这样的注释:

/*
/* 套嵌注释 */
*/

然而,某些编译器也允许套嵌注释,虽然这看上去很不错,但是请不要这样做。因为C语言的优势之一是可移植性,使用嵌套注释这样的特性可能会影响代码的可移植性。除此之外,嵌套注释还可能导致一些难以发现的问题。

第2种风格的注释以双斜杠(//)开始,只用于单行注释。双斜杠告诉编译器忽略从双斜杠后面至本行结尾的内容。

// 这一整行都是注释
int x; // 注释开始于双斜杠

许多新手程序员都认为给程序加注释浪费时间,完全没必要加注释。这样想完全不对!在你写代码时,当然很清楚程序完成什么操作。然而,随着程序越来越大、越来越复杂,或者你要修改半年前编写的程序,就能体现注释的价值所在。现在就养成好习惯,用注释来说明程序设计的结构和操作。可以依自己喜好选择任意一种风格的注释。本书的程序中会用到这两种风格的注释。

2.2.8 使用花括号

程序清单2.1中的花括号位于第10、23、27和29行。使用花括号({})将组成每个C程序(包括main()函数)的代码行都括起来。用花括号括起来的一条或多条语句称为块(block)。学到本书后面的课程,你会发现C语言中的块有许多用途。

2.2.9 运行程序

花时间输入、编译并运行bigyear.c(程序清单2.1)。不要放过任何一个练习使用编辑器和编译器的机会。回顾第1课中学过的步骤1。

1.确保编程的目录正确。

2.打开编辑器。

3.对照程序清单2.1正确输入bigyear.c源代码,但不要输入左侧的行号和冒号。

4.保存程序文件。

5.输入编译器相应的命令编译并链接该程序。如果未显示任何错误消息,便可点击C环境中相应的按钮运行程序。

6.如果出现错误消息,返回第2步并更正错误。

2.2.10 补充说明

计算机运行快速且准确,但它的确只会“照本宣科”。计算机非常呆板、缺乏想象力,对最简单的拼写错误也无能为力。它只按照你输入的内容执行,完全无视这些内容的含义!

C语言的源代码也是如此。程序中一个简单的拼写错误会导致C编译器停止工作,甚至崩溃。幸运地是,虽然编译器尚未智能到可以纠正你的小错误(人人都会犯错!),但是,它能轻易地识别这些错误并报错(第1课中介绍了编译器如何报告错误消息和如何解译它们)。

时间: 2024-08-28 23:24:04

《21天学通C语言(第7版)》一2.2 程序的组成部分的相关文章

《21天学通Java(第6版)》—— 2.3 注释

2.3 注释 21天学通Java(第6版)为提高程序的可读性,最有效的方式之一是使用注释.注释是程序中文本,说明了代码的作用.Java编译器在生成Java源代码文件的可执行版本时忽略注释,因此使用注释不会带来任何危害. 在Java程序中,可以使用3种不同的注释. 单行注释以两个斜杠(//)打头.从这些斜杠到行尾的所有内容都是注释,Java编译器将忽略它们,如下面的语句所示: 从这些斜杠到行尾的所有内容都被忽略,因此在编译器看来,上述代码行与下面的代码等效: 多行注释以/打头,以/结束.这两个分界

《21天学通C语言(第6版•修订版)》一导读

前 言 21天学通C语言(第6版•修订版) 本书旨在引导读者在21天内学通C语言编程.虽然有来自诸如C++.Java和C#的激烈竞争,但很多初学编程者还是会选择C语言.正如第1天课程介绍的原因,选择C语言可确保您不会误入"歧途". 将本书作为自学C语言的教材是一个明智的决定.虽然市面上有很多有关C语言的图书,但本书介绍C语言的方式最为合理,也让读者学习起来最为容易.本书的前五版都登上了畅销书排行榜,这一事实表明我们的观点得到了读者的认同.本书是按读者每天阅读一章的方式编写的.读者不需要

《21天学通C语言(第6版•修订版)》一1.2 为何要使用C语言

1.2 为何要使用C语言 21天学通C语言(第6版•修订版) 在当前的计算机编程领域中,有大量的高级语言可供选择,如C.Perl.BASIC.Java和C#.这些都是非常卓越的语言,适合用于完成大部分编程任务.虽然如此,但基于以下几个原因,很多计算机专业人员认为C语言是其中最佳的: C语言功能强大.灵活.使用C语言能够完成的工作只受限于您的想象力,语言本身不会给您带来任何约束.C语言可用于完成操作系统.字处理器.图形.电子表格等项目,甚至可用于编写其他语言的编译器. C语言很流行,是专业程序员的

《21天学通C语言(第7版)》一导读

前言 21天学通C语言(第7版) 从书名便可看出,通过学习本书,你可以自学C程序设计语言.在众多语言(如C++.JAVA和C#)中,C仍然是学习程序设计语言的首选.第1课中将详细介绍其中的原因.选择C作为程序设计语言是明智之举. 与市面上其他C语言的书籍相比,本书的讲解逻辑更清晰,初学者更容易理解.之前的6个版本一直在畅销书排行榜上遥遥领先,广受读者赞誉!本书为读者量身定制,每天只需花一小时便可学完一课内容.读者不需要有任何编程经验,当然,如果有其他语言的基础(如BASIC),学起来会更快.本书

《21天学通C语言(第7版)》一6.2 控制程序的执行

6.2 控制程序的执行 21天学通C语言(第7版) C程序默认的执行顺序是自上而下.从main()函数的起始位置开始,逐条执行语句,直至main()函数的末尾.然而,在实际的C程序中,很少严格按这样的顺序执行.C语言提供了各种程序控制语句,方便程序员控制程序的执行顺序.第4课介绍了一种程序控制语句--if语句,接下来介绍另外3种有用的控制语句: for语句: while语句: do...while语句. 6.2.1 for语句 for语句是由一条或多条语句组成的块.for语句有时也被称为for循

《21天学通C语言(第7版)》一2.6 课后研习

2.6 课后研习 21天学通C语言(第7版) 课后研习包含小测验和练习题.小测验帮助读者理解和巩固本课所学概念,练习题有助于读者将理论知识与实践相结合. 2.6.1 小测验 1.在C语言中,用花括号括起来的一组语句叫作什么? 2.每个C程序都必不可少的部分是什么? 3.如何在程序中添加注释?为什么要添加注释? 4.什么是函数? 5.C语言提供了哪两种类型的函数?它们有什么区别? 6.#include指令的有什么用途? 7.注释是否可以嵌套? 8.注释是否能超过一行? 9.包含文件的另一个名称是?

《21天学通C语言(第6版•修订版)》一第1章 C语言概览1.1 C语言简史

第1章 C语言概览 21天学通C语言(第6版•修订版) 欢迎阅读<21天学通C语言>第6版.今天的课程将带领读者开始向精通C语言的程序员进发.今天您将学习以下内容: 为什么说C语言是一种不错的编程语言. 程序开发周期中的各个步骤. 编写.编译并运行您的第一个C语言程序. 由编译器和链接程序所生成的错误消息. 1.1 C语言简史 21天学通C语言(第6版•修订版) 读者可能想知道C语言的起源,为何叫C语言.C语言是由贝尔实验室的Dennis Ritchie于1972年开发的.开发它并非为了消遣,

《21天学通C语言(第6版•修订版)》一1.8 作业

1.8 作业 21天学通C语言(第6版•修订版) 下面的小测验帮助您巩固所学的知识,练习则让您实际应用所学的知识.在阅读下一课时之前,应尽可能理解这些小测验和练习的答案,答案见附录F. 1.8.1 小测验 1.指出C是首选编程语言的三个原因. 2.编译器的功能是什么? 3.程序开发周期中包含哪些步骤? 4.使用您自己的编译器编译程序program1.c时,应执行什么命令? 5.在您的编译器中,完成编译和链接工作只需一个命令,还是需要分别执行命令? 6.C语言源代码文件应使用什么扩展名? 7.FI

《21天学通C语言(第6版•修订版)》一1.7 问与答

1.7 问与答 21天学通C语言(第6版•修订版)问:如果要将自己编写的程序提供给别人,应提供哪些文件? 答:C语言的优点之一是,它是一种编译型语言.这意味着对源代码进行编译后,将得到一个可执行程序--一个独立的程序.将hello提供给所有有计算机的朋友是完全可能的,您只须将可执行程序hello.exe提供给他们即可.他们不需要源代码文件hello.c和目标文件hello.obj,也不需要C编译器.但获得可执行程序的人必须拥有和您同类型的机器,如PC.Macintosh.Linux机器等. 问: