这部分学习的是数据类型的浮点数与字符这两个类型,主要关于它们的类型介绍、输入输出等的问题,另外还学习了类型转换的方法。
1. 浮点类型
float 32字长 有效数字:7
double 64字长 有效数字:15
2. 浮点数输入输出:
例1:double的输出
int main()
{
double a=1234.5678;
printf("%f,%e\n",a,a);
return 0;
}
运行结果如下:
由此可知%e与%f的区别在于:使用%e输出的结果是用科学计数法表示的数。
例2:double输出,小数位数指定
如需要对0.0016输出小数后面三位,代码如下:
int main()
{
double a=0.0016;
printf("%.3f\n",a);
return 0;
}
运行结果:
也就是在%f的%之后加” . ”以及小数位数,会以四舍五入的方式按照小数为位数的指定进行输出。
3. 浮点数范围
浮点数中有三种特殊的范围:
inf为正无穷
-inf为负无穷
nan表示不存在
4. 浮点数精度:
两个浮点数进行相等的判断通常是不成立的,要判断两个浮点数是否相等,需要的操作:
不能使用f1==f2而应该用fabs(f1-f2)<1e-12,只要求差小于某一精度既可。
例3:浮点数精度
int main()
{
float a,b,c;
a=1.345f;
b=1.123f;
c=a+b;
if(c==4.468)
printf("相等\n");
else
printf("不等 c=%f %.10f",c,c);
return 0;
}
运行结果为:
带小数的字面是double类型,如果要表示为float类型需要在小数后面加“f”
在规定了小数位数后,使用了四舍五入输出才会得到2.468,直接计算会有误差。
5. 浮点数类型选择
如果没有特别的需要,只要使用double既可。在64位上一次运算就是一个double。
6. 字符类型
char是一种整数,也是一种特殊数据类型:字符。
例4:字符类型
int main()
{
char a,b;
a=1;
b='1';
if(a==b)
printf("相等\n");
else
printf("不等\n");
printf("a=%d b=%d\n",a,b);
return 0;
}
运行结果:
1作为整数表示1,作为字符表示‘1’。每个字符在计算机中会对应一个表示,也就是ASCII码,字符1对于ASCII码中的49。
7. 字符输入输出
例5:字符输入输出
int main()
{
char c;
scanf("%c",&c);
printf("c=%d\n",c);
printf("c=%c\n",c);
return 0;
}
运行结果:
8. 字符对应ASCII码表
字符计算:
用两个字符进行计算实际是对其ASCII码表的表示进行计算,相加得到两个数在ASCII码表中位置的和,相减得到两个数在表中位置的距离。
大小写转换:
字母在ASCII表中顺序排列,大小写分开排列
a+’a’-‘A’可以将大写转为小写;a+’A’-‘a’可以将小写转为大写。
9. 逃逸字符
① \b用法是回退一格
如123\b输出为123,但是123\b4,则会输出124。
② \t是制表位
printf(“12\t34\n”);
printf(“1\t3\n”);
运行结果为:
10. 字符转化
自动类型转换:
当运算符两边出现不一样的类型时会进行自动类型转换,转化为范围更大的类型.
char > short > int > long >long long
int > float > double
对于printf来说,任何小于int的类型都会转化为ing,float会转化为double,所以printf浮点数时不需%lf;但是对于scanf不会,所以输出short类型时要用%hd。
强制类型转换:
一般当需要将类型往小的范围的类型转化的时候,就需要用到强制类型转换。
转换方式:(类型)值
如:(int)10.2
但是使用强制类型转换可能会有安全问题,如果超出转换类型的范围,会使数值发生改变。