五、数据类型(3):浮点数与字符

1、浮点类型:double和float,它们是什么,如何输入输出?

 

2、浮点的范围和精度:浮点数能表示哪些数?

输出精度5

在%和f之间加上.n可以指定输出小数点后几位,这样的输出是做4舍5入的

printf("%.3f\n",-0.0049);
printf("%.30f\n",-0.0049);
printf("%.3f\n",-0.00049);

 

超过范围的浮点数

(1)printf 输出 inf 表示超过范围的浮点数:正负无穷大

(2)printf 输出 nan 表示不存在的浮点数

浮点运算的精度

(1)带小数点的字面量是 double 而非 float

(2)float 需要用 f 或 F后缀来表明身份

浮点数的内部表达

选择浮点类型

(1)如果没有特殊需要,只使用double

(2)现代CPU能直接对double 做硬件运算,性能不会比float 差,在64位的机器上,数据存储的速度也不比float 慢。

3、字符类型:char是整数也是字符

(1)用单引号表示的字符字面量

'a'
'1'

(2)''也是一个字符

(3)printf 和scanf 里用%c来输入输出字符

字符的输入输出

——如何输入‘1’这个字符给 char c ?

scanf("%c",&c);    //——>  1
scanf("%d",&i); c=i;     //——>  49

——‘1’的ASCII编码是49,所以当c==49时,它代表‘1’

printf("%i %c\n",c,c);
混合输入

——有何不同?

scanf("%d %c",&i,&c);    
scanf("%d%c",&i,&c);    
字符计算

(1)一个字符加一个数字得到ASCII码表中那个数之后的字符

char c='A';
c++;
printf("%c\n",c);

 

(2)两个字符的减,得到它们在表中的距离

int i='Z'-'A';
printf("%d\n",i);
 
大小写转换

(1)字母在ASCII表中是顺序排列的。

(2)大写字母和小写字母是分开排列的。

(3)‘a’-'A'可以得到两段之间的距离,于是

a+'a'-'A'  //可以把一个大写字母变成小写字母
a+'A'-'a'  //可以把一个小写字母变成大写字母

 

4、逃逸字符:反斜杠开头的字符是特殊的控制字符

——用来表达无法印出来的控制字符或特殊字

逻辑类型
#include<stdbool.h>

 

 之后就可以使用 bool 和 true、flase

bool的运算

(1)bool 实际上还是以int的手段实现的,所以可以当作int来计算。

(2)也只能当作int 来输入输出

5、类型转换:如何在不同类型之间做转换?

自动类型转换

——当运算符的两边出现不一致的类型时,会自动转换成较大的类型。

(1)大的意思是能表达的数的范围更大

(2)

char  ——> short  ——> int ——> long ——>long long

(3)

int ——> float ——> double

——对于printf ,任何小于int的类型会被转换成Int;float会被转换成double

——但是scanf不会,要输入short,需要%hd

 

强制类型转换

——要把一个量强制转换成另一个类型(通常是较小的类型),需要:

(类型) 值
int10.2
short32

——注意这时候的安全性,小的变量不总能表达大的量

short32768

只是从那个变量计算出了一个新类型的值,它并不改变那个变量,无论是值还是类型都不改变。

double a=1.0;
double b=2.0;
int i=(int) a/b;

——强制类型转换的优先级高于四则运算

int a=5;
int b=6;
double d=(double)(a/b);

 

posted @ 2018-05-13 23:02  Strugglinggirl  阅读(691)  评论(0编辑  收藏  举报