- C语言初使用—数据类型
- 1、实型数据
- 实型也称为浮点型。实型常量也成为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式,
- 1)十进制数形式:由数码0~9和小数点组成
- 例:0.0、25.0、8.789、0.13、4.56、200.、-2665.454等均为合法的实数。注意,必须要有小数点。
- 2)指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。
- 其一般形式为:a E n(a为十进制数,n为十进制整数)
- 其一般形式为:a E n(a为十进制数,n为十进制整数)
- 说明:2.1E5是2.1乘以10的5次方。E后面的数值,代表是10的几次方。
- 标准C允许浮点数使用后缀。后缀为f或者F即表示该数为浮点数。如256f是等价与256F的
1.1实型数据的舍入误差
-
由于实型变量是由有限的存储单元组成的,因此能提供的有效数字也是有限的。如下例:
-
打印结果:a=12345678848.000000 b=12345678848.000000
-
说明:float a = 123456.189e5 这个取值范围超出float的范围,所以结果有误差。
-
2、字符型数据
-
字符型数据包括字符常量和字符变量。
-
2.1字符常量
-
字符常量是用单引号括起来的一个字符。
- 例如:‘a’、‘b’、‘c’、‘=’、‘+’、‘?’都是合法字符常量
-
在C语言中,字符常量有以下特点:
-
字符常量只能用单引号括起来,不能用双引号或其它符号
-
字符常量只能是单个字符,不能是字符串。
-
字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5是不同的,‘5’是字符常量,不能参与运算。
-
2.2字符变量
-
字符变量是用来存储字符常量,即单个字符。
-
字符变量的类型说明符是char。字符变量类型定义的格式和书写规则斗鱼整型变量形同。例如:
- char a,b;
-
2.3转义字符
-
转义字符是一种特殊的字符常量。转义字符以反斜线’’'开头,后跟一个或几个字符。转义字符具有特性的含义,不同于字符原有的意义,故称为转义字符。例如:\n就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符便于表示的控制代码。
-
常用的转义字符及其含义
-
字符型数据在内存中的存储形式及使用方法
-
每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
-
如X十进制的ASCII码是120,Y的十进制ASCII码是121。对字符变量a,b赋予’X’、'Y’值:
- a=‘X’ b=8
-
实际上是a,b两个单元内存放120和55的二进制代码。
-
例题:向字符变量赋值
-
打印结果:a=x,b=y a=120,b=121
-
原因:%c是以字符形式打印,%d是以十进制的整数格式打印
-
字符串常量
-
字符串常量是由一对双引号括起来的字符序列。例如:
-
“China”、“Hello World”、“$11111”等都是合法的字符串常量。
-
字符串常量和字符常量是不同的量。区别如下:
- 1)字符常量由单引号扣起来,字符串常量由双引号括起来。
- 2)字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。
- 3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
- 例:char a = ‘a’ 不能 char a = “a”
- 4)字符常量占一个字节的内存空间。字符串常量站的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"这是字符串结束的标志。
-
变量初赋值
-
在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法为变量提供初值。变量定义的同时给变量赋予初值的方法。这种方法统称为初始化。在变量定义中赋予初值的一般形式为:
-
类型说明符 变量l = 值l,变量2 = 值2;
-
各类数值型数据之间的混合运算
-
变量的数据类型是可以转换的,转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:
-
若参与运算量的类型不同,咋先转换成同一类型,然后进行运算。
-
转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转成long型后在进行运算。
-
所有的浮点运算都是以双精度进行的,即使仅包含float单精度量运算的表达式,也要先转换成double型,在做运算。
-
char型和short型参与运算时,必须先转换成Int型。
-
在赋值运算中,赋值号两边的数据类型不同时,赋值号有变量的类型将转换成左边量的类型,。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
-
int = long 右边的数据类型将会丢失一部分数据。
-
例题:PI为实型,s,r为整型。在执行s= rrPI语句时,r和PI都转换成double型计算,结果也为double型。但是由于s为整型,故赋值结果仍为整型,舍去了小数部分。
-
-
强制类型转换
-
强制类型是通过类型转换运算来实现的。
-
其一般形式为:
- (类型说明符)(表达式)
-
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
- 例如:(float)a 把a转换成float型
- (int )(x+y) 把x+y的结果转换成int型
-
-
在使用强制类型转换时应注意以下问题:
-
类型说明符和表达式都必须加括号(单个变量可以不加括号),如把 (int )(x+y)写成 (int )x+y
则成了把x转成int型之后再与y相加了。 -
无论是强制转换或者是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明对该变量定义的类型。
-
-
例题说明:f虽然强制转换为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5,删去了小数而f的值仍为5.75。
-
算数运算符和算数表达式
- 加法运算符 “+”:加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有结合性。
- 减法运算符 “-”:减法运算符为双目运算符,但"-"也可作负值运算符,此时为单目运算符,如-x,-5等具有左结合性。
- 乘法运算符"*":双目运算符,具有左结合性。
- 除法运算符"/":双目运算符具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果刚好为双精度实型。
-
算术运算符和算术表达式
-
运算符的优先级:C语言中,运算符的优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
-
运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与"-“号结合,执行x-y运算。然后在执行+z的运算。这种自左至右的结合方向就称为左结合性 。而自右至左的结合性成为 右结合性。最典型的右结合性运算符是赋值运算符。例如:x=y=z。由于”="的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中右不少为右结合性,应注意区别。
-
下面是C语言中所使用的运算符的优先级和结合性:
-
-
强制类型转换运算符
-
其一般形式为:(类型说明符)(表达式)
-
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
-
例如:(float)a 把a换转为实型 (int)(x+y) 把x+y的结果转换为整型
-
-
自增、自减运算符
- 自增 1 。自增 1 运算符:自增1 运算符为 “++”,其功能是使变量的值自增1。
- 自减 1 运算符标记为 “–” , 其功能使使变量自减1。
- 自增1,自减1运算符均为单目运算符,都具有结合性。可以有以下集中形式:
- ++ i i自增1后再参与其他运算。
- –i i自减后再参与其他运算。
- i++ i参与运算后,i的值再自增1。
- i-- i参与运算后,i的值再减1.
- 在理解和使用上容易出错的是i++和i–。特别是当他们出现在比较复杂的表达式或者语句,应该仔细。
-
复合的赋值运算符
-
在赋值符 “=” 之前加上其它二目运算符可构成复合赋值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=。
-
例如:
-
- 复合赋值法这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。
- 逗号运算符和逗号表达式
- 在C语言中逗号 “,”,也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般形式为:表达式1,表达式2 - 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
- 在C语言中逗号 “,”,也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
- 对逗号表达式说明两点:
- 1)逗号表达式一般行驶中的表达式1和表达式2也可以又是逗号表达式。
- 例如:表达式1,(表达式2,表达式3)
- 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:
- 表达式1,表达式2…表达式n。
- 整个逗号表达似乎的值等于表达式n的值。
- 2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。