我的C语言之路2
2016-03-15 19:41
330 查看
对于C语言初学者来说,首先要接触的东西便是数据类型。
C语言要求在定义所有的变量时都要指定变量的类型,当然不仅仅是变量,常量也是区分类型的。
那么数据类型的意义是什么呢?与我们用大脑思考的数学不同,数学是抽象的,比如数字123,是整数;1/23,则是无限不循环小数,具有无穷的位数。而对于计算机来说,数据都存放在存储单元中,因为存储单元是由有限字节构成的有限空间,所以存放的数据位数也是有限的。因此为了方便我们对数据的整理,我们就要对存数单元进行安排,包括规定存储单元的长度以及数据的存储形式。
对于以下这段代码
#include<stdio.h>
int main()
{
int c;
printf("character: %c\ninteger: %d\nfloating point: %f\n", 'c', 34, 3.14);
system("pause");
return 0;
}
很好的说明了三种常量在C语言中的表示形式,字符常量(character)是有引号括起来的字符,如‘a’,‘c’等,整数常量(integer)34,以及浮点数常量(floating poing)3.14。
而对于枚举类型,我们给出以下代码:
#include<stdio.h>
enum OS_TYPE
{
WIN,LINUX,UNIX
};
int main()
{
enum OS_TYPE os_type;
printf("%d\n",WIN);
printf("%d\n", LINUX);
printf("%d\n", UNIX);
system("pause");
return 0;
}
输出结果为0,1,2
当然枚举常量的个数取决于你给出个数的多少。它有什么用处呢?我认为是方便助计。我们可以用0,1,2这些数字去替代枚举类型明,方便快捷。
如果这里我们把LINUX=7,那么输出结果则是0,7,8,这种枚举的规则可见一斑。
我还想总结一下关于单精度浮点型(float)与双精度浮点型(double)的知识点。
对于这段代码:
#include<stdio.h>
int main()
{
float f, c;
f = 64.3;
c = (f - 32)*(5.0/9)*(3.0/2);
printf("f=%f\nc=%f\n",f, c);
system("pause");
return 0;
}
我们可以看出给出了两个单精度浮点变量f,c。而在计算式(f - 32)*(5.0/9)*(3.0/2)的运算过程中,有三个多项式,这三个多项式我们都把数字用浮点型表示了,而所得的结果正是我们预期的结果。加入我们在输出这个计算式的时候不小心输错了发生了如下几种情况:(f - 32)*(5/9)*(3.0/2);(f - 32)*(5.0/9)*(3/2);(f - 32)*(5/9)*(3/2),那么结果会有什么变化呢?
在浮点型数据计算中,如果我们的表达式里的数字不是浮点型,而是整形,那么计算式的结果也按照整形来取。这里(f-32)的结果是浮点型,(5/9)的结果为整形,因为(5/9)小于1,则这个计算式的结果取整形位为0;(3/2)大于1,则这个计算式的结果取整形位为1。那么回到那三种情况,相当于:(f - 32)*0*(3.0/2);(f - 32)*(5.0/9)*1;(f - 32)*0*1,显而易见与正确答案大相径庭。那么今后我们在输入浮点型数据的时候就要小心这个问题。
对于双精度浮点型double,它扩大了能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。
还有许多其他的数据类型,我会在了解深入之后写出新的心得。
C语言要求在定义所有的变量时都要指定变量的类型,当然不仅仅是变量,常量也是区分类型的。
那么数据类型的意义是什么呢?与我们用大脑思考的数学不同,数学是抽象的,比如数字123,是整数;1/23,则是无限不循环小数,具有无穷的位数。而对于计算机来说,数据都存放在存储单元中,因为存储单元是由有限字节构成的有限空间,所以存放的数据位数也是有限的。因此为了方便我们对数据的整理,我们就要对存数单元进行安排,包括规定存储单元的长度以及数据的存储形式。
对于以下这段代码
#include<stdio.h>
int main()
{
int c;
printf("character: %c\ninteger: %d\nfloating point: %f\n", 'c', 34, 3.14);
system("pause");
return 0;
}
很好的说明了三种常量在C语言中的表示形式,字符常量(character)是有引号括起来的字符,如‘a’,‘c’等,整数常量(integer)34,以及浮点数常量(floating poing)3.14。
而对于枚举类型,我们给出以下代码:
#include<stdio.h>
enum OS_TYPE
{
WIN,LINUX,UNIX
};
int main()
{
enum OS_TYPE os_type;
printf("%d\n",WIN);
printf("%d\n", LINUX);
printf("%d\n", UNIX);
system("pause");
return 0;
}
输出结果为0,1,2
当然枚举常量的个数取决于你给出个数的多少。它有什么用处呢?我认为是方便助计。我们可以用0,1,2这些数字去替代枚举类型明,方便快捷。
如果这里我们把LINUX=7,那么输出结果则是0,7,8,这种枚举的规则可见一斑。
我还想总结一下关于单精度浮点型(float)与双精度浮点型(double)的知识点。
对于这段代码:
#include<stdio.h>
int main()
{
float f, c;
f = 64.3;
c = (f - 32)*(5.0/9)*(3.0/2);
printf("f=%f\nc=%f\n",f, c);
system("pause");
return 0;
}
我们可以看出给出了两个单精度浮点变量f,c。而在计算式(f - 32)*(5.0/9)*(3.0/2)的运算过程中,有三个多项式,这三个多项式我们都把数字用浮点型表示了,而所得的结果正是我们预期的结果。加入我们在输出这个计算式的时候不小心输错了发生了如下几种情况:(f - 32)*(5/9)*(3.0/2);(f - 32)*(5.0/9)*(3/2);(f - 32)*(5/9)*(3/2),那么结果会有什么变化呢?
在浮点型数据计算中,如果我们的表达式里的数字不是浮点型,而是整形,那么计算式的结果也按照整形来取。这里(f-32)的结果是浮点型,(5/9)的结果为整形,因为(5/9)小于1,则这个计算式的结果取整形位为0;(3/2)大于1,则这个计算式的结果取整形位为1。那么回到那三种情况,相当于:(f - 32)*0*(3.0/2);(f - 32)*(5.0/9)*1;(f - 32)*0*1,显而易见与正确答案大相径庭。那么今后我们在输入浮点型数据的时候就要小心这个问题。
对于双精度浮点型double,它扩大了能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。
还有许多其他的数据类型,我会在了解深入之后写出新的心得。
相关文章推荐
- OC语言—— add 与set 的区别
- 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他
- 简明python教程 --C++程序员的视角(八):标准库
- 【bzoj 3809】Gty的二逼妹子序列 题解&代码(c++)
- 简明python教程 --C++程序员的视角(七):异常
- 简明python教程 --C++程序员的视角(六):输入输出IO
- 简明python教程 --C++程序员的视角(五):面向对象的编程
- 简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考
- 简明python教程 --C++程序员的视角(三):模块
- 简明python教程 --C++程序员的视角(二):函数及作用域
- 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
- C++对C语言的非面向对象特性扩充(3)
- 蓝桥杯 往届试题(C++B组)
- C++ vector多维数组初始化及清零
- C++的发展,特点和源程序构成
- 第一次c++上级报告-2
- C++之命名空间(End Chapter)
- Effective C++第三遍
- C++运算符重载:怎样定义函数才“符合常理”
- c/c++内存机制(一)(转)