1.4 C语言程序简介
学习C语言的目的就是根据实际问题设计C语言程序,那么,C语言程序是怎样构成的呢?为了了解C语言程序的构成,下面先来看几个例子。
【例1.1】 在屏幕上显示字符串“This is a C program.”。
程序如下:
1 #include <stdio.h> /* 文件包含*/ 2 void main() /* main是主函数的函数名,表示这是一个主函数*/ 3 { /* 函数体开始*/ 4 printf("This is a C program.\n"); 5 } /* 函数体结束*/
这是一个只由main函数构成的C语言程序,运行后,将在计算机屏幕上显示如下结果:
This is a C program.
为了更好地对C语言程序进行说明,本书将在程序的每行前都加上行号。注意,C语言程序事实上是没有行号的。
该程序的第1行是文件包含的预处理命令,将头文件“stdio.h”的内容包含到该程序中,由于该头文件中包含了输出函数的信息,因此在该程序中就可以调用输出函数了。第2行是主函数main的说明部分,void表示函数类型,说明该函数没有返回值,main是函数名。需要注意的是,在任何一个C语言程序中必须有main函数,而且只能有一个。第3~5行是main函数的函数体,函数体以第3行的左花括号“{”开始,以第5行的右花括号“}”结束。main函数的函数体只有一条语句,即第4 行,它是一个函数调用语句,调用了标准库函数printf,用于在屏幕上输出一个字符串“This is a C program.\n”,其中的“\n”是一个特殊的控制符——换行符,表示在输出最后一个字符“.”后换行,相当于按了回车键。
【例1.2】 求整数10、20的和。
程序如下:
1 #include <stdio.h> 2 void main() 3 { 4 int first,second,sum; /* 定义变量*/ 5 first=10; /* 给变量赋值*/ 6 second=20; 7 sum=first+second; /*求和,将first和second的值相加后赋给sum*/ 8 printf("sum=%d\n",sum); /* 输出sum的值*/ 9 }
这还是一个只有main函数的C语言程序,运行结果如下:
sum=30
该程序的第4行定义了3个整型变量,即在内存中开辟了3个用于存放整型数据的存储单元。第5行和第6行都是赋值语句,分别将整数10和20赋给整型变量first和second,即将10和20分别存入分配给first和second的内存单元中。第7行也是赋值语句,取整型变量first和second的值(即从分配给first和second的内存单元中分别取出10和20)相加后,把和赋给整型变量sum。第8行调用printf函数,输出sum的值。
【例1.3】 找出任意两个整数中较大的数。
程序如下:
1 #include <stdio.h> 2 int max(int x,int y) /* 定义max函数 */ 3 { return(x>y?x:y); /* 求出两数中的较大数并返回 */ 4 } /* max函数结束 */ 5 void main() 6 { int num1,num2,m; 7 printf("Input the first integer number: "); /* 提示输入第1个整数*/ 8 scanf("%d",&num1); /* 从键盘上输入第1个整数 */ 9 printf("Input the second integer number: "); /* 提示输入第2个整数 */ 10 scanf("%d",&num2); /* 输入第2个整数 */ 11 m=max(num1,num2); /* 调用max,计算两个数中的较大数 */ 12 printf("max=%d\n",m); /* 输出结果 */ 13 }
这是一个由main函数和max函数构成的C语言程序,运行情况如下:
Input the first integer number: 6 ↙(带下划线的是输入部分,“↙”代表回车。) Inputlt@span u=1> thelt@span u=1> secondlt@span u=1> integerlt@span u=1> number:lt@span u=1> 9 ↙ max=9
该程序包括两个函数,第2~4行构成max函数,第5~13行构成main函数。第2行是max函数的说明部分,包括函数类型(int)、函数名(max)、形式参数及其定义(int x, int y)。第3行是max函数的函数体,是一条return语句,用于返回给调用函数一个整型值,该值是条件表达式“x>y ? x : y”的结果,即如果x>y,则返回x的值,否则,返回y的值。第7行是输入提示,用于提示用户输入程序运行所需的数据,请读者注意体会和使用。第8行是函数调用语句,调用了标准库函数scanf(该函数和printf函数是系统提供的标准输入和输出函数),用于从键盘上输入一个整型数据赋给整型变量num1。第9行和第10行分别与第7行和第8行类似。第11行是一条赋值语句,赋值号“=”的右边调用了max函数,将max函数的返回值赋给赋值号“=”左边的整型变量m。第12行是函数调用语句,调用了标准库函数printf,输出m的值。
这3 个程序中出现了数字、字母及一些符号,它们都属于C语言的字符集。程序中的“int”、“return”等是C语言中固定的具有特殊意义的词,称为关键字。“first”、“second”、“sum”、“num1”、“num2”等是用户给变量起的名字,称为标识符。“>”、“+”、“=”等是C语言的运算符。“,”、“;”、“"”、“{”、“}”等是C语言的分隔符。
1.字符集
字符是组成语言的最基本的元素。在C语言程序中,只能使用C语言字符集中的字符,不能使用字符集以外的字符。
C语言的字符集(采用ANSI字符集)主要包括英文字母、阿拉伯数字和特殊字符3类:
① 大、小写英文字母(52个):A、B、C、…、Z、a、b、c、…、z
② 阿拉伯数字(10个):0、1、2、…、9
③ 特殊字符(29个):=+ - * /%# ^ & ~( )_[ ] { } :;,' " ? ● < > | ! 空格
2.标识符
标识符是程序员定义的单词,用于给程序中的一些实体命名,以便在程序中引用。如例1.2和例1.3中的“first”、“second”、“sum”、“num1”、“num2”、“m”等是标识变量的名字的标识符,而“max”是函数的名字的标识符。
一个优秀的程序员为标识符命名时一般会考虑标识符含义、用法等特征,而不采用毫无意义的字母及其组合。
3.关键字
关键字是C语言中规定的一批英文单词,它们被赋予特殊的含义,不能另作他用。C语言定义了32个关键字,如下:
auto break case char const
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef union unsigned void
volatile while
这些关键字将在后面逐步介绍。
4.运算符(操作符)
运算符用来对运算对象进行规定(系统预定义的)的运算,并得到一个结果值。运算符通常由1~2 个字符组成,如“+”表示加法运算,“=”表示赋值运算,“==”表示“相等”的判断等。有的运算符中的两个字符是分开的,比如“? :”表示条件运算(参见例1.3第3行)。
5.分隔符
分隔符用于分隔各个词法记号或程序正文,分隔符用于表示程序中一个实体的结束和另一个实体的开始。常用的分隔符如下:
( ){ } , : ; 空白
这些分隔符不表示任何操作,仅用于构造程序。
6.注释
注释是程序员对程序进行的注解和说明,这些内容纯粹是为了阅读程序而加的,编译程序在预处理时就给去掉了,编译时不产生任何代码。但在程序中加入注释是一个好习惯,值得提倡。因为随着程序越来越复杂,程序及程序中的函数、语句、标识符等所要表达的含义会越来越难以理解,或者容易忘记。
C语言只有一种注释,以“/*”开头,以“*/”结尾,中间可有任意多的字符,也可占任意行。在C++语言中,可以使用行注释,以“//”开始,至行尾结束。
7.程序的组成
从上面几个例子还可以看出:
(1)C语言程序是由函数构成的
一个C语言程序至少包含一个main函数(又称为主函数),也可以包含一个或多个其他函数。函数是C语言程序的基本单位。
(2)函数由函数说明和函数体两部分组成
① 函数说明
这部分主要包括函数类型、函数名、形式参数等。例如例1.3中的第1行:
int max(int x,int y)
其中,max是函数名;int是函数类型,表示函数要返回一个整型值;x、y是函数的形式参数,都是int类型的。
② 函数体
这部分由一对大括号“{ }”界定。函数体内也分为两部分,一部分是变量的声明,另一部分是为了完成该函数规定的功能所需要的一系列可执行语句。
(3)C语言程序从main函数开始执行,也随着main函数的结束而结束
其他函数只有被调用时才执行,并不按出现位置的先后顺序执行。
(4)C语言程序的书写应该遵循一定的规范
主要包括以下5条规范。
① C语言程序中的英文字母是区分大写的,如Sum和sum是不同的标识符。
② 表示各种名称的标识符一般使用小写字母,也可以使用大写字母,但关键字必须小写。
③ 每条语句都是以“;”结束的。一个程序行内一般只写一条语句,也可以写多条语句;而一条语句一般只写在一行上,也可以写在多行上。
④ 为了增强程序的可读性,在程序的任意位置,都可以用“/*……*/”插入注释内容。
⑤ 为了使程序结构清晰易读,程序的书写一般采用缩进的格式。