首页 理论教育 C语言程序设计实践教程:变量及命名要求

C语言程序设计实践教程:变量及命名要求

时间:2023-11-01 理论教育 版权反馈
【摘要】:在程序运行过程中其值可以改变的量称为变量。变量名、函数名都是需要满足此要求。

C语言程序设计实践教程:变量及命名要求

在程序运行过程中其值可以改变的量称为变量。所有变量在使用前必须先定义。定义变量的同时可以赋初值。

变量赋值语句的格式如下:

变量名=表达式; //常量是表达式的特殊情况

例如:

int a=0, b=5+4; //定义整形变量a和b的同时给其赋初值

变量定义,一般放在函数体的开头部分。

1.变量的数据类型、值和地址

变量的数据类型决定了变量编码格式和行为。变量的值是在程序运行中动态变化的,但变量的地址,在其生命周期内却是不变的。除了可以通过变量名获取或修改变量的值外,也可以由变量的地址“间接获取”。

2.变量名命名规则

变量名是由字母、数字和下划线组成,且首字符不能是数字。变量名、函数名都是需要满足此要求。为方便使用,变量名称最好能见名识义,如变量的类型、用途。

以下变量名是合法的:

length、area_23、_foo、width、high

以下变量名是不合法的:

3.变量的初始化

定义变量后,与变量对应的内存区域的状态是不确定的,也就是说,其中存放的信息是“无效的”。因此,在使用变量前,首先要给其赋值,即初始化变量的值。

在程序中,可以在定义变量的同时对其初始化,或者先定义变量后对其初始化。例如:

说明:

(1)在C语言中,凡是没有被事先定义为变量的标识符,不能作为变量名使用,这就能够保证程序中变量名的正确性。

(2)每一个变量被指定为一个确定类型,在编译时系统能为其分配相应的存储单元

(3)每一个变量属于一个类型,在编译时系统据此检查该变量所进行的运算是否合法。

2.1.4.运算符和表达式

由常量、变量等组成操作数,操作数和运算符一起,就构成了表达式。表达式是C语句的主体。在学习表达式之前,要先了解每一种运算符的优先级、功能等特性。

1.运算符的优先级和结合性

运算符的优先级和结合性如表2-2所示。

表2-2 运算符的优先级和结合性

根据运算的功能,可分为:算术运算、关系运算、逻辑运算、位运算、赋值运算等。位运算的操作数必须是整数类型,主要用于硬件控制编程。关系运算和逻辑运算构成程序中的判断条件,实现程序的控制转移。算术运算和赋值运算用于操纵数据,保存运算结果。

在表2-2中,要理解运算的优先级和结合性。

(1)理解优先级

从表2-2可看出优先级的大致关系如下:

算术运算 > 关系运算 > 逻辑运算 > 赋值运算

(2)结合性

在表达式中,如果运算符的优先级相同,就要考虑结合性。

表达式:a = b = c = 10;

赋值运算符‘=’为右结合,所以该表达式等价于:

a = (b = (c = 10) );

表达式:a = b + c + 10;

加法运算符‘+’为左结合,所以该表达式等价于:

a = ((b + c) + 10);

2.表达式

一个表达式有一个值及其类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量可以看作是表达式的特例。在实际应用中,就要根据具体情况,写出正确的表达式。(www.xing528.com)

(1)左值

虽然和变量相同的是,表达式也有值和类型。但和变量不同的是,表达式没有“左值”,也就是说,不能被赋值(不能放在赋值运算符的左边)。所以,以下语句存在语法错误:

(a + b )++;

a+b = 1;

(2)表达式的类型

按照优先级和结合性对表达式进行解析时,每个子表达也具有“类型”和“值”信息。同一个运算符,根据操作数的类型不同,结果也会不同。例如,有如下三个表达式:

1/2 // 整数除法的结果为0

1.0/2.0 // 实数除法的结果为0.5

1.0/2 // 系统将精度低的整型转换为精度高的实型,然后做实数除法,结果为0.5

在C语言中,运算符‘/’即可表示整数除法,也用于表达实数的除法。由于数据编码不同,整数的除法和实数的除法,对应于不同的机器指令。因此,前两种表达式写法,两个操作数类型相同,并没什么异议,对第三个表达式,系统自动将精度低的整数2转换为精度高的实数2.0,然后做实数除法。

(3)关系运算和逻辑运算

在C语言中没有设计专门的数据类型用于表示逻辑值“真”和“假”,而是采用整数值1和0来表示。因此,关系运算和逻辑运算的结果都是整数类型,且只能为0或者1。

在第3章中,将进一步的讨论关系运算和逻辑运算。

2.1.5.几个需要注意的运算符

只有了解运算符的特性,才能恰当的应用在程序中,以下运算符初学者应特别留意:

1.自加、自减运算(++、――)前后缀形式的区别

假设有如下定义

int i, j;

作为一个单独的语句,以下语句的行为是等价的:

i++;

++i;

i = i+1;

i +=1;

作为一个子表达式,++i和i++是有区别的。如:

j = ++i; 表示先将变量i自加1,然后将自加后的值作为子表达式的值,赋值给变量j。等价于++i; j = i;

j = i++; 表示先将变量i的值作为子表达式的值赋值给变量j,然后变量i自加1。等价于j = i; ++i;

以下形式的表达式,不同的编译器解析过程是不同的。因此会产生二义性,应避免在程序中使用这样的语句。

j = i++ + i++;

可以解释为:j = i+i; i++; i++;

也可以解释为:t1 = i; i++; t2 = i; i++; j = t1+ t2;

2.三元运算? :

这是C语言中唯一的三元运算符。例如,以下语句将变量a和b中较大的值赋值到变量max中:

max = a>b ? a : b;

稍加变化,可以计算三个变量中的最大值:

max = a>b ?(a>c? a: c):(b>c? b:c);

3.sizeof( )

它是一个运算符,而不是函数。用于计算某个数据类型所占的存储空间大小(以字节为单位)。操作数可为类型名,也可以为一个表达式。例如:

printf("%d", sizeof(int)); //输出4[1]

printf("%d", sizeof(1/1.0)); //输出8

4.%运算

“取模”运算,要求两个操作数都必须为整数,如5%2的值是1。可用于判断一个数的奇偶性,是否为素数,求两个数的最大公约数,取一个整数的各个数位。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈