1.3 C语言程序设计的特点
本节将会通过介绍几个简单的C程序,从中分析C程序的结构特点,然后对C语言中的标识符和关键字进行简单的描述。希望可以通过本节的学习增加对C程序的形象化了解。
1.3.1 C程序实例
例1-5 通过代码1-1展示C程序的典型结构。
代码1-1
01 # include <stdio.h> /*包含一个标准库*/ 02 void main ( ) /*定义一个没有参数和没有返回值的main函数*/ 03 { /*main函数的内容用{ }括起来*/ 04 printf(“Hello,World ! \n”); /*调用库函数打印一行字符 \n表示换一行 */ 05 }
#include:以#开始的语句称为预处理语句,因为在编译器开始工作之前,先对这些命令进行预处理(就是将一些要用到的功能函数调用到你的程序中),然后将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码。并不是每个C程序都必须有该语句,但是,如果程序有该语句,就必须将它放在程序的开始处,位于其他语句之前。
<stdio.h>:以.h为扩展名的文件称为头文件,它可以是C程序中现成的标准库文件,也可以是自定义的库文件。标准库文件定义了任何程序内可以使用的函数,使得开发人员可以更轻松地执行日常任务。像stdio.h这个文件中包含了有关输入/输出语句的函数。
void main():main()函数是C程序处理的起点。main()函数可以返回一个值,也可以不返回值。如果某个函数没有返回值,那么在它的前面有一个前缀void。除了main()函数外,C程序还可以包含一个或多个自定义函数。
{ }:在函数定义的后面有一对大括号,即“{”、“}”。它表示函数的开始和结束。这对大括号的中间是函数的主体或构成函数的语句。大括号也可以用于将语句块括起来。
printf(“Hello,World ! \n”);:在屏幕上产生一行输出“Hello,World !”,并换行(\n)。函数主体中的每个语句都以分号结束。C程序中的一个语句可以跨越多行,并且用分号通知编译器该语句已结束。
以上结构是C程序的主要结构。除了以上元素外,在main()及用户定义的其他函数的主体中还有许多其他元素,如变量声明、变量初始化等。
例1-6 通过代码1-2实现求两个数之和。
代码1-2
01 #include<stdio.h> 02 int sum(int x,int y ); /*被调用函数声明*/ 03 main() /*主函数*/ 04 { 05 int a,b,sumnumber; /*声明变量*/ 06 a=100;b=200; /*变量初始化*/ 07 sumnumber=sum(a,b); /*调用sum函数,将得到的值赋给sumnumber*/ 08 printf(“sum is %d\n”,sumnumber); /*输出sumnumber的值*/ 09 } 10 int sum(int x,int y ) /*定义sum函数,返回值为整型,形参为整型*/ 11 { 12 int z; /*sum函数中的变量声明只作用本函数*/ 13 z=x=y; 14 return (z); /*将z的值返回到调用处*/ 15 }
代码1-2包括两个函数:主函数main()和被调用的函数sum()。sum()函数的作用是将变量x和y的和赋值给变量z。return语句将z的值返回给主函数main()。除了有与代码1-1中相同的必要的C语言要素,本程序还用到了变量声明、变量初始化、函数调用、实际参数和形式参数等概念。上面这段代码你可能看不懂,可以先不予以深究,在后面章节中将会详细描述。
1.3.2 C程序的结构特点
通过代码1-1和代码1-2,可以看到C程序的结构特点。
(1)C程序是由函数组成的。一个C程序至少包含一个main()函数,也可以包含一个main()函数和若干个其他函数。C程序的这种特点可以很容易地实现程序的模块化。
(2)函数由函数声明部分和函数体两个部分组成。
(3)C程序总是从main()函数开始执行的。不论main()函数在整个程序中的位置如何(可以在程序最前面,也可以在程序最后面,或者在一些函数前面,在另一些函数后面,但是千万不可以放到其他函数的内部)。
(4)C程序书写格式自由。一行可以写几个语句(以分号区分),一个语句可以分写在多行上。
(5)每个语句和数据定义后必须有一个分号。分号是C语句的必要组成部分。例如,c=a+b;分号不可少。
(6)C语言本身没有输入/输出语句。输入/输出的操作是由库函数scanf()和printf()等函数来完成的。
(7)可以用“/*……*/”对C程序中的任何部分做注释。一个好的源程序应当加上必要的注释,增加程序的可读性,方便其他人阅读你所编写的代码。
注意:如代码1-2的第2行所示,当main()函数中调用在它之后定义的函数,应该在main()函数之前对被调用函数进行声明。
1.3.3 C语言中的名字规则——标识符
标识符是用来标识程序中某个对象的名字的。在C语言中,标识符可用做以后将学到的变量名、符号名、函数名、数组名和文件名及一些具有专门含义的名字。
1.标识符的命名规则
任何程序都离不开标识符,也就是说,不可能有没有标识符的C程序。在代码1-2中,include、void、main、int、i等都是标识符。
合法的标识符是由字母、数字和下画线组成,并且第一个字符必须为下画线或字母。如area、PI、_sm、y123、S201s;像345a、cade-z、b.c、A&a这些就不是合法的标识符。
在C语言中大小写字母被认为两个不同的字符,因此area和Area是两个不同的字符。对于标识符的长度(即一个标识符允许的字符个数),一般的计算机系统规定取前8位有效。如果长于8个字符,多余的字符将不被识别。如:number123和number124都被认为是number12,不过有些系统允许较长的字符有效。
2.标识符的分类
C语言的标识符可以分为以下三类:
(1)关键字(不允许使用的名字)。
C语言中的标识符,在程序中都代表固定的含义,不能另作它用。如说明变量类型的标识符int、float及if语句中的if、else都有专门的用途,它们不能用做变量名或函数名。
(2)预定义标识符(不建议使用做变量)。
标识符在C语言中都有特定的含义,如函数名和预处理命令名;C语言中提供的库函数的名字printf和define等,C语言的语法是允许把这类标识符另作它用,不过这些标识符会失去系统规定的原意。
注意:为了避免误解,建议用户不要把这些预定义标识符另作他用。
(3)用户标识符。
由用户根据需要命名的标识符称为用户标识符。一般用来给变量、函数、数组或文件等命名。程序中的标识符除了遵循命名规则外,还应注意到名字的易懂性,最好能让使用者一见就能知道该标识符的意义。比如可以选用一些有相关含义的单词或拼音,如number1、red、yellow、green、work等,以增加可读性。如果标识符与关键字相同,程序在执行时系统将会给出错误信息。如果与预定义标识符相同则是不会报错的,不过该预定义标识符将会失去原定含义。这将会代替用户确定的含义,会引发一些运行时的错误。
3.关键字的定义
所谓关键字,就是已被C语言本身使用,不能作其他用途使用的字。例如,关键字不能用做变量名、函数名等。
由ANSI标准定义的C语言关键字共32个。
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
4.关键字的分类
根据关键字的不同作用,可以将关键字分为“数据类型”关键字和“流程控制”关键字两大类,如表1-2和表1-3所示。
表1-2 数据类型关键字
表1-3 流程控制关键字
注意:C语言的关键字都用小写字母书写,不能用大写字母书写。例如,关键字int不能写成INT。由于关键字有特定的用途,所以一定不能用于其他场合。
编写程序是一件实践性很强的事,不能纸上谈兵。就像学习驾驶机动车,只听教练员讲解示范,而不亲自上车操作,是永远学不会开车的。要想熟练使用这32个关键字,需要勤加练习,这是一个循序渐进、经验积累的过程。