C语言学习笔记之(变量篇)

一、变量的介绍

变量是程序运行过程中其值可以改变的量。变量有三个属性,包括变量名、变量值和存储空间,如图所示。

二、变量的格式

只能以字母(A-z)或者数字(0-9)_为开头

如:aA_number2AAbc

下列为非法变量名:$a?A

但是给变量起名的时候尽量使用英文单词或者缩写起名,如num或者number

int a;				/*定义一个整型变量a*/
也可以同时定义多个变量,此时各变量名之间用逗号隔开,例如:
double r,l,s;			             /*定义三个双精度类型的变量r、l和s*/
在C语言中,对任何变量都必须“先定义,后使用”,只有在定义了变量的名字和数据类型之后,才能对变量进行各种运算。

三、给变量赋值

例如,定义一个整型变量a,并为其赋值0的方法如下:
int a;			/*定义一个整型变量a*/
a=0; 			/*为a赋值0*/
用户也可定义变量的同时为变量赋初值,这种形式称为变量的初始化。例如:
int a=0;			/*定义一个整型变量a并初始化为0*/

四、整型变量

1.短整型

我们定义的变量a和b都是有符号的短整型,其取值范围为-32768~32767,所以无法表示大于32767或者小于-32768的数,所以当a的值加1变成了32768后就发生了“溢出”。但运行时并不报错,它好像汽车里程表一样,达到最大值以后,又从最小值开始计数。所以32767加1后得到的结果不是32768,而是-32768。从这里可以看到:C语言的用法比较灵活,即使程序存在潜在问题,系统也不会给出“出错信息”,此时只能依靠程序员的经验来保证结果的正确。在这里,我们只需把变量b改成int型或者long型,就可以得到预期的结果了(32768)。

#include <stdio.h> 
int main()
{
	short a,b;			/*定义两个短整型变量a和b*/
	a=32767;			/*将值32767赋给变量a*/
	b=a+1;				/*将a的值加1后赋给变量b*/
	printf("a=%d,b=%d\n",a,b);	              /*输出a和b的值*/
	return 0;				/*函数返回值*/
}


#最后程序输出值为:
a=32767,b=-32768

修正代码

#include <stdio.h> 
int main()
{
	int/*或者是long int*/ a,b;			/*定义两个短整型变量a和b*/
	a=32767;			/*将值32767赋给变量a*/
	b=a+1;				/*将a的值加1后赋给变量b*/
	printf("a=%d,b=%d\n",a,b);	              /*输出a和b的值*/
	return 0;				/*函数返回值*/
}


#最后程序输出值为:
a=32767,b=32768

五、实型变量(浮点型)

整数类型并不适用于所有应用。有时需要变量能够存储带小数点的数,或者能够存储极大数或极小数。这类数可以用实型变量进行存储,实型变量也称为浮点型变量。实型变量根据精度可以分为单精度类型、双精度类型和长双精度类型等3种类型。具体的关键字表示和各类型的取值范围如表所示。

类型名称关 键 字字 节 数精 度取值范围(绝对值)
单精度型float46个数字0以及1.2×10-38~3.4×1038
双精度double815个数字0以及2.3×10-308~1.7×10308
长双精度long double815个数字0以及2.3×10-308~1.7×10308

1.单精度类型

单精度类型使用关键字float来进行定义变量,它在内存中占4个字节,提供6位有效数字,取值范围为-3.4×1038~-1.2×10-38、0以及1.2×10-38~3.4×1038。

列如以下代码:由于float型只接受6位有效数字,因此显示的数据中只有前6位是保证正确的,后面的数据将无法正确处理,显示的是编译器随机给出的数。为了扩展有效数字范围,可使用double类型或long double类型。

#include <stdio.h>
int main()
{
	float f;				/*定义单精度型变量f*/
	f=1234567.95789;		/*将值1234567.95789赋给变量f*/
	printf("f=%f\n",f);		              /*输出变量f的值*/
	return 0;				/*函数返回值0*/
}

#最后程序输出结果:
f=12345678.000000

修正代码

#include <stdio.h>
int main()
{
	double f;				/*定义单精度型变量f,这里的单精度float换成双精度double*/
	f=1234567.95789;		/*将值1234567.95789赋给变量f*/
	printf("f=%f\n",f);		              /*输出变量f的值*/
	return 0;				/*函数返回值0*/
}

#最后程序输出结果:
f=1234567.95789