第一个C语言程序:Hello World
作为练手的第一个C语言程序,我们让C语言在屏幕上显示一些文本。
从计算机获得信息有两种方式:一是看屏幕上的文字、图片、视频等,二是听从喇叭发出来的声音。其中最简单的是在屏幕上显示文本,它只需要一个语句。
例如,下面的代码会让屏幕显示出“Hello World!”:
更加专业的称呼:
puts 是 output string 的缩写,意思是“输出字符串”。
在C语言中,字符串需要用双引号
puts 在输出字符串的时候,需要将字符串放在
在汉语和英语中,分别使用
总结起来,上面的语句可以分为三个部分:
在C语言中,有的语句使用时不能带括号,有的语句必须带括号。带括号的称为函数(Function)。
C语言提供了很多功能,例如输入输出、获得日期时间、文件操作等,我们只需要一句简单的代码就能够使用。但是这些功能的底层都比较复杂,通常是软件和硬件的结合,还要要考虑很多细节和边界,如果将这些功能都交给程序员去完成,那将极大增加程序员的学习成本,降低编程效率。
好在C语言的开发者们为我们做了一件好事,他们已经编写了大量代码,将常见的基本功能都完成了,我们可以直接拿来使用。但是现在问题来了,那么多代码,如何从中找到自己需要的呢?一股脑将所有代码都拿来显然是非常不明智的。
这些代码,早已被分门别类地放在了不同的文件中,并且每一段代码都有唯一的名字。使用代码时,只要在对应的名字后面加上
函数的一个明显特征就是使用时必须带括号
如果函数需要处理多个数据,那么它们之间使用逗号
除了库函数,我们还可以编写自己的函数,拓展程序的功能。自己编写的函数称为自定义函数。自定义函数和库函数在编写和使用方式上完全相同,只是由不同的机构来编写。
示例中第 2~6 行代码就是我们自己编写的一个函数。main 是函数的名字,( ) 表明这是函数定义,{ } 之间的代码是函数要实现的功能。
函数可以接收待处理的数据,同样可以将处理结果告诉我们;使用
第2行代码中,int 是 integer 的简写,意为“整数”。它告诉我们,函数的返回值是整数。
需要注意的是,示例中的自定义函数必须命名为 main。C语言规定,一个程序必须有且只有一个 main 函数。main 被称为主函数,是程序的入口函数,程序运行时从 main 函数开始,直到 main 函数结束(遇到 return 或者执行到函数末尾时,函数才结束)。
也就是说,没有 main 函数程序将不知道从哪里开始执行,运行时会报错。
综上所述:第2~6行代码定义了主函数 main,它的返回值是整数 0,程序将从这里开始执行。main 函数的返回值在程序运行结束时由系统接收。
C语言开发者们编写了很多常用函数,并分门别类的放在了不同的文件,这些文件就称为头文件(header file)。每个头文件中都包含了若干个功能类似的函数,调用某个函数时,要引入对应的头文件,否则编译器找不到函数。
头文件以
较早的C语言标准库包含了15个头文件,stdio.h 和 stdlib.h 是最常用的两个:
对于上面的示例程序,我们不妨整理一下思路,从整体上再分析一遍:
1) 第1行引入头文件 stdio.h,这是编程中最常用的一个头文件。头文件不是必须要引入的,我们用到了 puts 函数,所以才引入 stdio.h。例如下面的代码完全正确:
2) 第2行开始定义主函数 main。main 是程序的入口函数,一个C程序必须有 main 函数,而且只能有一个。
3) 第4行调用 puts 函数向显示器输出字符串。
4) 第5行是 main 函数的返回值。程序运行正确一般返回 0。
不过上面的代码看起来枯燥无趣,不好区分各个语句,我们不妨来给它们加上颜色和行号,如下所示:
从计算机获得信息有两种方式:一是看屏幕上的文字、图片、视频等,二是听从喇叭发出来的声音。其中最简单的是在屏幕上显示文本,它只需要一个语句。
例如,下面的代码会让屏幕显示出“Hello World!”:
puts("Hello World!");这里有一个生疏的词汇
puts
,用来让计算机在屏幕上显示文字。更加专业的称呼:
- 在屏幕上显示文字叫做输出(Output);
- 每个文字都是一个字符(Character);
- 多个字符组合起来,就是一个字符序列,叫做字符串(String)。
puts 是 output string 的缩写,意思是“输出字符串”。
在C语言中,字符串需要用双引号
" "
包围起来,Hello World!
什么也不是,计算机不认识它,"Hello World!"
才是字符串。puts 在输出字符串的时候,需要将字符串放在
( )
内。在汉语和英语中,分别使用
。
和.
表示一句话的结束,而在C语言中,使用;
表示一个语句的结束。puts("Hello World!")
表达了完整的意思,是一个完整的语句,需要在最后加上;
,表示当前语句结束了。总结起来,上面的语句可以分为三个部分:
-
puts( )
命令计算机输出字符串; -
"Hello World!"
是要输出的内容; -
;
表示语句结束。
C语言程序的整体框架
puts 可以在显示器上输出内容,但是仅有 puts 是不够的,程序不能运行,还需要添加其他代码,构成一个完整的框架。完整的程序如下:#include <stdio.h> int main() { puts("Hello World!"); return 0; }接下来,让我们逐行分析一下这段代码。
函数的概念
先来看第 4 行代码,这行代码会在显示器上输出“Hello World!”。上面已经提到过,puts 后面要带( )
,字符串也要放在( )
中。在C语言中,有的语句使用时不能带括号,有的语句必须带括号。带括号的称为函数(Function)。
C语言提供了很多功能,例如输入输出、获得日期时间、文件操作等,我们只需要一句简单的代码就能够使用。但是这些功能的底层都比较复杂,通常是软件和硬件的结合,还要要考虑很多细节和边界,如果将这些功能都交给程序员去完成,那将极大增加程序员的学习成本,降低编程效率。
好在C语言的开发者们为我们做了一件好事,他们已经编写了大量代码,将常见的基本功能都完成了,我们可以直接拿来使用。但是现在问题来了,那么多代码,如何从中找到自己需要的呢?一股脑将所有代码都拿来显然是非常不明智的。
这些代码,早已被分门别类地放在了不同的文件中,并且每一段代码都有唯一的名字。使用代码时,只要在对应的名字后面加上
( )
就可以。这样的一段代码能够独立地完成某个功能,一次编写完成后可以重复使用,被称为函数(Function)。读者可以认为,函数就是一段可以重复使用的代码。函数的一个明显特征就是使用时必须带括号
( )
,必要的话,括号中还可以包含待处理的数据。例如puts("Hello World!")
就使用了一段具有输出功能的代码,这段代码的名字是 puts,"Hello World!" 是要交给这段代码处理的数据。使用函数在编程中有专业的称呼,叫做函数调用(Function Call)。如果函数需要处理多个数据,那么它们之间使用逗号
,
分隔,例如:
pow(10, 2);
该函数用来求10的2次方。需要注意的是,C语言中的函数和数学中的函数不是同一个概念,不要拿两者对比。函数的英文名称是 Function,它还有“功能”的意思。大陆将 Function 翻译为“函数”,而台湾地区翻译为“函式”,读者要注意区分。
自定义函数和main函数
C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一些列函数的集合,在磁盘上往往是一个文件夹。C语言自带的库称为标准库(Standard Library),其他公司或个人开发的库称为第三方库(Third-Party Library)。除了库函数,我们还可以编写自己的函数,拓展程序的功能。自己编写的函数称为自定义函数。自定义函数和库函数在编写和使用方式上完全相同,只是由不同的机构来编写。
示例中第 2~6 行代码就是我们自己编写的一个函数。main 是函数的名字,( ) 表明这是函数定义,{ } 之间的代码是函数要实现的功能。
函数可以接收待处理的数据,同样可以将处理结果告诉我们;使用
return
可以告知处理结果。示例中第5行代码表明,main 函数的处理结果是整数 0。return 可以翻译为“返回”,所以函数的处理结果被称为返回值(Return Value)。第2行代码中,int 是 integer 的简写,意为“整数”。它告诉我们,函数的返回值是整数。
需要注意的是,示例中的自定义函数必须命名为 main。C语言规定,一个程序必须有且只有一个 main 函数。main 被称为主函数,是程序的入口函数,程序运行时从 main 函数开始,直到 main 函数结束(遇到 return 或者执行到函数末尾时,函数才结束)。
也就是说,没有 main 函数程序将不知道从哪里开始执行,运行时会报错。
综上所述:第2~6行代码定义了主函数 main,它的返回值是整数 0,程序将从这里开始执行。main 函数的返回值在程序运行结束时由系统接收。
头文件的概念
还有最后一个问题,示例中第1行的#include <stdio.h>
是什么意思呢?C语言开发者们编写了很多常用函数,并分门别类的放在了不同的文件,这些文件就称为头文件(header file)。每个头文件中都包含了若干个功能类似的函数,调用某个函数时,要引入对应的头文件,否则编译器找不到函数。
实际上,头文件往往只包含函数的说明,也就是告诉我们函数怎么用,而函数本身保存在其他文件中,在链接时才会找到。对于初学者,可以暂时理解为头文件中包含了若干函数。引入头文件使用
#include
命令,并将文件名放在< >
中,#include 和 < > 之间可以有空格,也可以没有。头文件以
.h
为后缀,而C语言代码文件以.c
为后缀,它们都是文本文件,没有本质上的区别,#include 命令的作用也仅仅是将头文件中的文本复制到当前文件,然后和当前文件一起编译。你可以尝试将头文件中的内容复制到当前文件,那样也可以不引入头文件。.h
中代码的语法规则和.c
中是一样的,你也可以#include <xxx.c>,这是完全正确的。不过实际开发中没有人会这样做,这样看起来非常不专业,也不规范。较早的C语言标准库包含了15个头文件,stdio.h 和 stdlib.h 是最常用的两个:
- stdio 是 standard input output 的缩写,stdio.h 被称为“标准输入输出文件”,包含的函数大都和输入输出有关,puts() 就是其中之一。
- stdlib 是 standard library 的缩写,stdlib.h 被称为“标准库文件”,包含的函数比较杂乱,多是一些通用工具型函数。
梳理和总结
初学编程,有很多基本概念需要了解,本节就涉及到很多,建议大家把上面的内容多读几遍,必将有所收获。对于上面的示例程序,我们不妨整理一下思路,从整体上再分析一遍:
1) 第1行引入头文件 stdio.h,这是编程中最常用的一个头文件。头文件不是必须要引入的,我们用到了 puts 函数,所以才引入 stdio.h。例如下面的代码完全正确:
int main() { return 0; }我们没有调用任何函数,所以不必引入头文件。
2) 第2行开始定义主函数 main。main 是程序的入口函数,一个C程序必须有 main 函数,而且只能有一个。
3) 第4行调用 puts 函数向显示器输出字符串。
4) 第5行是 main 函数的返回值。程序运行正确一般返回 0。
最后
以上就是我们的第一个C语言程序,它非常简单,带领我们进入了C语言的大门。不过上面的代码看起来枯燥无趣,不好区分各个语句,我们不妨来给它们加上颜色和行号,如下所示:
#include <stdio.h> int main() { puts("Hello World!"); return 0; }颜色和行号是笔者自己加上去的,主要是为了让大家阅读方便,明显地区分各个语句,C语言本身没有对这些作要求,你可以随意设置各个字符的颜色,也可以没有颜色。