C语言是一种编程语言,和其它语言一样,也定义了自己的语法和词汇。学习C语言,首先要学习C语言的词汇,再学习C语言的语法规则,然后由词汇构成语句,由语句构成源程序,源程序也称为源代码或代码(后面课程提到的源代码或代码,若无特殊说明均指源程序)。
图 1-3 C源程序主要构成元素
C源程序主要由语句、函数和注释构成。语句由表达式、变量和常量、运算符、分隔符、关键字构成;函数由函数头和函数体构成;注释由单条注释和多条注释构成。下面对这些元素逐一进行说明。
标识符
C语言的字为字母(大写A~Z或小写a~z)、数字(0~9)和下划线,除此以外不能包含其它字符和符号,C语言字的组合构成了C语言的词汇,在C语言中,词汇被称为标识符,用于给C语言的变量、常量、关键字、函数等命名,C语言要求标识符必须以字母或下划线开头,且在标识符内不能包含空白字符。
例如:
Name,_cell,address,page_number,i,temp,userName
符合C语言标识符的命名规则,是正确的标识符。
下面为不符合命名规则的标识符:
2023_movie,k&c,user name
在上面不合法的标识符中:标识符2023_movie使用数字作为标识符的开头,违反了标识符命名规则;标识符k&c包含了规则之外的字符‘&’;标识符user name包含了空格。
关键字
C语言内部定义了一些标识符被用于特定的用途,这些标识符称为C语言的关键字,编写源程序时,开发者自己命名的标识符不能和C语言关键字重名。
C90标准定义的关键字有32个,C99标准在C90基础上增加了5个关键字,C11标准在C99标准基础上又增加了7个关键字。
C语言常用的关键字见表1-1。
变量
变量一词来自于数学,是指值可以变化的量。在编程语言中,变量用来存储数据,存储的数据可以动态变化,即变量的值在程序运行过程中是可以变化的,变量可以被重新赋值,变量的名称是一个标识符。
变量的名称实际是计算机存储单元的地址,变量的值就是该存储单元存储的数据。当我们在源程序中定义变量后,编译器在编译过程中会为定义的变量分配存储单元,分配的存储单元空间与变量存储的数据类型有关。例如:存储int类型的变量在32位操作系统中会被分配4个字节的存储单元空间;存储double类型的变量会被分配8个字节的存储空间。
变量定义示例:
int num = 30; //定义了整数类型的num变量,变量的初始化值为30
double rate = 0.01; //定义了double类型的rate变量,变量的初始化值为0.01
定义的变量可以在程序中直接使用,通过变量的名称就可以对变量进行赋值和取值操作。例如:
double rate = 0.01; //定义rate变量
double interest; //声明interest变量
interest = 5000 * rate; // 5000 乘以rate的计算结果赋值给变量interest
上述代码定义了变量rate,声明了变量interest,在语句interest = 5000 * rate中使用了rate和interest。定义变量和声明变量存在区别,编译器会为定义的变量分配存储空间,但编译器不会为声明的变量分配存储空间,直至声明的变量被赋值时,才会分配存储空间。
常量
常量是变量的一种特例,常量也属于变量,常量被定义后其值不能被修改,因此只能定义常量,不能声明常量。在程序运行过程中,有些值需要保持不变。例如:在基于数学运算的程序中,圆周率是固定不变的值。类似圆周率等在程序运行过程中固定不变的值可以定义为常量,便于使用。C语言定义常量,需要在常量数据类型前面添加const关键字。
例如:
const double pi = 3.14;
上面的语句定义了常量pi,其值为3.14,pi在程序运行过程中不能被重新赋值。语句中的3.14是字面常量,字面常量由其表示就可以得知它的值和类型。
运算符
运算符是用于程序执行运算的符号,会针对一个或一个以上操作数进行运算。例如:3+5,其操作数是3和5,运算符是“+”。C语言运算符分为算术、关系、位运算等不同运算种类的运算符。C语言规定了符号“*”为乘法运算符,“/”为除法运算符,“=”为赋值运算符。其它运算符将在后面的课程详细讲述。
表达式
表达式是由变量、常量、运算符构成的组合。例如:num1+num2、age>18、180/6等。表达式内的变量或常量称为操作数,运算符号称为运算符。在一些复杂的运算中,简单的表达式可以组合为复杂的表达式,其操作数本身可能就是一个表达式。例如(num1+num2)*(x+y),其中的操作数(num1+num2)和(x+y)本身就是表达式,并用运算符*相乘。
表达式的计算结果必须是一个值,如果表达式是一个条件,就会产生逻辑值结果,即真或假。在其他情况下,值通常为计算的结果。
分隔符
在C语言中,分隔符有逗号、空白符、分号和冒号。逗号用来分隔多个变量或函数的参数;分号一般用在语句的结尾,表示一行语句的结束;空白符包括空格、制表符、换行符,通常用来在语句中占位(让代码阅读方便),没有实际作用;分号多用在循环语句中。
语句
语句是由表达式、关键字、标识符、运算符和分隔符构成的组合,多条语句构成了C语言的源程序。
例如语句:
const double pi = 3.14;
定义了变量pi,其中const、double是关键字,pi是变量,3.14是字面常量,“=”是赋值运算符,分号放在语句的结尾,表示一条语句的结束。
语句:
interest = 5000 * rate;
字面常量与变量rate乘积的结果赋值给变量interest,其中interest是变量, 5000 * rate表达式,分号放在语句的结尾,表示一条语句的结束。
关于C语言的语句,我们将在后面的课程详细讲述。
函数
函数是能够完成独立功能的代码块(代码块由多条C语句构成),每个函数都有一个名称,函数的名称是标识符,定义的函数可以在其它C语句中被调用,调用者可以把函数看成黑盒,不用考虑函数的内部结构和特性,只需传入参数和接收返回值就可以了。
函数的定义一般包括下面的内容:
“datatype”是函数返回的数据类型,若函数无返回值,可以使用关键字void表示该函数无返回值。“functionname”是函数的名称,函数名称的命名需要符合标识符命名规则。“parameters”表示传入函数的形参表,多个参数之间使用英文逗号分隔。“function_suite”是函数的代码。return是返回语句,如果函数没有返回值,返回语句可以省略。“expression”是返回的表达式、变量或字母常量。
形参表是传入函数的参数变量,可以传入多个参数变量,每个参数变量之间用英文逗号分隔,形参表的语法如下:
datatype para1,……,datatype paran
其中datatype是参数变量的数据类型,para1是参数变量的名称,参数变量可以在函数体内使用,但不能在函数体外使用。
注释
C程序代码也可以包含注释,对编写的代码进行说明,编译器在编译过程中会忽略这些注释。注释可以分为单行注释和多行注释。单行注释使用“//”,多行注释使用“/*”和“*/”。
单行注释:
#include <stdio.h>
int main()
{
//输出Hello World
printf("Hello World\n");
return 0;
}
多行注释:
/******************************************
作者:
创建日期:
功能描述
*/
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。