本章介绍以下内容
- 关键字:int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary
- 运算符: sizeof()
- 函数:scanf(()
- 整数类型和浮点数类型的区别
- 如何书写整型和浮点型常数,如何声明它些类型的变量
- 如何使用printf()和scanf()函数读写不同类型的值
程序离不开数据。把数字、字母和文字输入计算机,就是希望它利用这些数据完成某些任务,例如,需要计算一份利息或显示一份葡萄洒商的排序列表。本章除了介绍如何读取数据外,还将教会读者如何操控数据。
C语言提供两大系列的多种数据类型。本章详细介绍两大数据类型:整数类型和浮点数类型,讲解这些数据类型是什么、如何声明它们、如何以及何时使用它们。除此之外,琮将介绍常量和变量的区别。读者很快就能看到第1个交互式程序。
3.1 示例程序
本章仍从一个简单的程序开始。如果发现有不熟悉的内容,别担心,我们稍后会详细解释。该程序的意图比较明了,请试着编译并运行程序清单3.1中的源代码。为了节省时间,在输入源代码时可省略注释。
3.1示例程序
#include <stdio.h>
int main (void)
{
float weight; /*你的体重*/
float value; /*相等重量的白金价值*/
printf("你的体重值多少黄金?\n");
printf("计算一下\n");
printf("输入你的体重(kg):");
/*获取用户的输入*/
scanf("%f",&weight);
/*假设黄金的价格是162.99/g*/
value = 162.99 * weight * 1000 ;
printf("你的体重值:¥%.2f。\n",value);
printf("如果黄金下跌的话,你将会不值钱了。\n");
printf("多吃点。\n");
return 0;
}
运行结果:
你的体重值多少黄金?
计算一下
输入你的体重(kg):52
你的体重值:¥8475480.00。
如果黄金下跌的话,你将会不值钱了。
多吃点。
3.2变量与常量数据
3.3数据:数据类型和关键字
int
long
short
unsigned
char
float
double
________________
signed
void
________________
_Bool
_Complex
_Imaginary
________________
3.3.1整数类型和浮点数类型
3.3.2整数
3.3.3浮点数
整数与浮点数区别
- 整数没有小数部分:浮点数可以有小数部分
- 浮点数可以表示比整数范围磊得多的数
- 对于一些算术运算(例如两个很大数相减),使用浮点数米娜桑损失更多的精度。
- 因为在任何区间内(比如1.0和2.0之间)都存在无穷多个实数,所以计算机浮点数不能表示区域内所有的值。浮点数往往只是实际值的近似。例如,7.0台能以浮点值6.999999存储。
- 浮点运行通常比整数运算慢。不过,已以开发出了专门处理浮点运算的微处理器,它可以缩小速度上的差别。
3.4数据类型
3.4.1 int类型
IBM PC兼容机有16位的字,因而采用16位来存储一个int值,取值范围为-32768到32767
一、声明int变量
两种声明方法
int enrs;
int hogs,cows,goats;
两种赋值方法
cows = 112;
scanf();
二、初始化变量
int hogs = 21;
int cows = 32,goats = 14;
int dogs,cats = 94;
三、int类型常量
21、32、14、94都是整数常量
四 、打印int值
使用printf()函数时,格式说明符的数目和要显示的值的数目一定要相同。
五、八进制和十六进制
六、显示八进数和十六进制数
3.4.2其它整数类型
一、声明其它整数类型
二、使用多种整数类型的原因
目前一般的情况是,long long 类型为64位,long类型为32位,short类型为16位,int类型为16位或32位(依机器的自然字大小而定)
signed
16位 short和int -32767~32767
32位 long 和int -2147483647~2147483647
unsigned
16位0~65535
32位0~4294967296
signed
64位long long -9223372036854775807~9223372036854775807
unsigned
64位 long long 0~18446744073709551615
整数溢出事例
三、long常量和long long常量
四、打印short、long、long long 和unsigned类型数
运行结果
无符号数3000000000和有符号数-1294967296在内存的表示方法是一样的。
3000000000
10110010110100000101111000000000
-1294967296
10110010110100000101111000000000
在传递函数参数时C自动将short类型的值转换为int类型。两个疑问
1、int类型被认为是计算机处理起来最方便有效的整数类型,所以在short类型不int类型长度不同的系统中,使用int类型值进行参数传递的速度更快。
2、可以使用h修饰符显示一个较长期的整数被截为short类型值的样子。输出的第三行就演示了这一点。把65537按照二进制格式写为一个32位的数字时,它应该是10000000000000001,在printf()中使用%hd说明符将将使它只显示后16位,即显示值1.
最后一行输出完显示了verybig变量的完整值,然后通过使用%ld说明符显示了存储在它的后32位中的值。