C语言之变量与常量

  • 变量与常量

每种基本类型的数据都具有常量和变量两种表现形式。

一.常量

C语言中的常量有以下四种:

  • 整型常量
  • 实型常量
  • 字符型常量
  • 字符串常量

1.整型常量

如:

12345,1314,  520

C语言的整型常量可以用八进制、十进制和十六进制3种形式来表示,采用不同的前缀加以区分:

0表示八进制,如0214。

0x/0X表示十六进制,如0x214、0X214。

不加任何前缀,默认为是十进制,如214。

在整型常量后添加后缀“L”或“l”,表示长整型数,如:100L、25L、0Xae5l等;

用后缀“U”或“u”表示无符号整数,如:22U、87u等。

ps:对于后缀的不同,影响的只是存储空间,对计算结果并无影响。如:100L+25L与100+25其结果在数学上没有区别。c语言中,并没有二进制,但所有进制都要转化成二进制来处理。

ps:程序中出现的某种进制的整型常量究竟属于哪种类型,可根据其值所在的范围来确定。

比如,常量123在short 类型的取值范围内,那
么其类型就为short型。


注意:整型常量的数字之间不允许嵌入空格、逗号或非数字字符,例如,以下是不合法的数字:
13 14
52,0
$1111

2.实型常量

(1)十进制数形式
包括符号“+”与“-”,0~9以及小数点“.”如:-520.、.520、13.14


(2)指数形式(科学记数法)
包括尾数、e(或E)以及指数。如13.14e2


注意:
①在e (或E)前后必须要有数字。
②e(或E)前面的尾数可以表示成整数或小数。

③ e(或E)后面的指数必须为整数。

 

ps:在C程序中,实型常量默认为是double型,但可以通过添加后缀”F/f”来表示该实型常量为float型,如3.14f、12e-4F。且在实型常量中不得出现任何空白符号.

3.字符常量


用单引号界定起来的一个普通字符或转义字符,如: ‘a'、‘A’、‘\n等。
普通字符可以是字符集中任意一个字符。普通字符常量的值就是该字符的ASCII值。
转义字符是一种特殊的字符常量,以反斜线“\”开头,后跟一个或几个字符,主要用来表示那些无法输出的控制字符或者特殊字符。

e59db30c043e44d88e7661eb3c2215b1.jpg

 ps:

  1. 字符常量只能用单引号界定,不能用双引号或其他符号。
  2. 字符常量只能是单个字符,不能是非转义字符的若干字符序列。
  3. 数字被定义为字符型之后,其数值就发生了改变。如4和’4’代表不同的量,'4’是字符常量,而4是整型常量。

4.字符串常量


用一对双引号括起来的一个字符序列,如:"Hello "、“a"、“”、"$13.14”等。
存储:系统自动在字符串常量后面加上“\0”作为字符串结束标志
如字符串”china”在内存的存储情况为:

fe6d3bb5ca6a4a4ba5cf61fb63ef450a.jpg

 “\0”是一个ASCII值为0的不可显示字符,不引起任何控制操作。

字符常量与字符串常量的区别?

(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;
(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;
(3)存储形式不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效字符的ASCII码值外,还要存储一个结束标志\0’。

 

ps:常量又分为字面常量(直接常量)和符号常量

字面常量从其字面即可判断其值。

符号常量使用专门的符号来代表一个常量。

符号常量用于定义具有如下特点的数据:

  • >在程序中保持不变。
  • >在程序内部频繁使用。
  • >需要用比较简单的方式替代某些值。

二.变量

在程序运行过程中其值可以改变的量

作用:存储数据

程序设计使用变量来表达数据的存储。一个变量在内存中占据一定的存储单元,在该存储单元中存放变量的值。使用变量名可以引引用存储在内存中的数据,并随时根据需要显示数据或者执行数据操作。


本质:变量代表内存中具有特定属性的存储单元,变量名实际是符号化的内存地址。

1.变量的定义

在C语言中,要求对所用到的变量使用前必须先强制定义,即:先定义,后使用。

c68d76de74554040b9168801ab6bc5c4.jpg

注意:

  1. 多个变量名之间用逗号进行分隔,数据类型和变量名之间至少用一个空格进行间隔。
  2. 变量的定义语句通常放在函数体的开始部分,变量定义语句的位置直接影响变量的作用域。
  3. 若变量定义语句放在函数体内,则要集中放在函数的开始,不能与其他语句混放,否则不能通过编译。
  4. C程序的每个变量都有固定的类型,不允许在程序的同一处将同一变量定义为不同类型。

ps:

通常把下划线开始的标识符留给系统使用,故在编写普通程序时,应尽量避免使用该形式的标识符。

2.变量的赋值

变量名=表达式
如,love=520,表示把520赋给变量love。进行这个赋值操作后,无论love原来的值是什么,它所保存的数值就变成520。


要求:

  1. 给变量赋值应注意所赋值与被赋值变量的类型匹配问题。对于类型不一致的情况,C语言规定:在允许转换的情况下,所赋值将自动转换为被赋值变量的类型,然后再赋值,如果不能转换就是类型错误。
  2. 可以给同一个变量多次赋值,每进行一次赋值操作,系统都会用新数据代替变量中的原有数据,故变量的值是最后一次存放的值。

3.变量的初始化

在定义一个变量的同时赋给它初值。

如 int a=1,b=2;

注意:

 

  1. 可以对被定义的部分变量初始化。如,int a=1,b=2,c;
  2. 如果对几个变量初始化为同一个值,应写成:int a=5,b=5,c=5;不能写成:int a=b=c=5;
  3. 变量不一定要进行初始化,但使用变量之前应该赋给变量一个确定的值。

4.变量、变量名、变量类型、变量值、给变量赋值之间的关系

2307546d492d4e829b7ef5e186e87cf3.jpg

  • 变量——杯
  • 变量名——杯子的号码
  • 变量类型——所装的材料名称
  • 变量值——所装的东西多少
  • 给变量赋值——把某材料倒进杯子

5.思考探究

1.输出实(浮点)型变量的值。

02301aa2c1844bd1920cf1ea15d0df19.jpg

 81563f80ae124220b2642bbf9a6b1363.jpg

原因:

a是单精度浮点型,最多有7位有效位数,整数已占4位,故小数部分3位之后的均为无效数字。

b是双精度浮点型,有效位最多为16位,但“%f”默
认小数位数保留6位,其余部分四舍五入。

由此题,我们可以获得一些经验:由于实型变量是由有限的存储单元组成的,故能提供的有效数字总是有限的,其有效位以外的数字将被舍去,由此可能会产生一些误差。
由于实数存在舍入误差,使用时应注意:

  1. 不要试图用一个实数精确表示一个大整数,实数是不精确的。
  2. 实型数据一般不判相等,而是判接近或近似。
  3. 避免直接将一个很大的实数与一个很小的实数进行加减运算,否则会丢失“小数据”。

代码如下:

#include <stdio.h>
void main()
{
  float a;
  double b;
  a=6666.666666;
  b=6666.6666666666666666;
  printf("a=%f\nb=%f",a,b);
}

可以自行测试,感受一下。

2.字符变量的定义与使用。

e6f8876b5e7c4d13b286edcbb016ced9.jpg

8805c005e8a040a08a66f3809c7ee646.jpg

由此例可知:

在内存中字符数据的存储形式与整型数据类似,这就使得字符型数据和整型数据之间可以通用。即一个字符数据既可以字符形式输出,也可以整数形式输出。输出形式取决于函数printf()格式串中的格式符,当格式符为"%c"时,对应输出的变量值为字符,当格式符为"%d" 时,对应输出的变量值为整数。

代码如下:

#include <stdio.h>
void main()
{
  char a,b;
  a='a';
  b='b';
  printf("a=%c  b=%c\n",a,b);
  printf("a=%d  b=%d",a,b);
}

ps:C语言允许字符数据与整数相互赋值,还可以直接进行算术运算。由于字符型数据占1个字节,所以整型变量与字符型数据运算时,只有低字节参与运算。(具体途径,整型提升那篇详细说明了。)

3.数据溢出

8a8c39407216407baec7f6779b119dc9.jpg

 a7c5614a7d734a029ae9ee60a6c92a2d.jpg

应注意,字符数据只占一个字节,放0~255范围内的整数。

为什么会出现这种情况呢?

C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。(计算机是怎么得出这个错误结果的,在隐式类型转换那篇中的整型提升部分已经详细讲解了,这里不在赘述)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值