第1关: 认识数据类型
任务描述:
程序=数据结构+算法。数据是程序的处理对象,C语言的数据类型主要包括: 整数型:char、short [int]、int、long [int]、long long [int]; 浮点型:float、 double、long double; 每种数据类型的数据在内存中所占的空间数量是不同的,通过sizeof()运算符可以计算,例如:sizeof(int)的值为4,表示int型数据在内存中占据4个字节。 请按顺序输出以上8种数据类型在内存中所占据的字节数。两个数据之间分隔1个空格。
输入样例:
输出样例:
1 2 4 8 8 4 8 16
开始你的任务吧,祝你成功!
相关知识-数据类型
1.程序=算法+数据结构
通过完成第一部分的任务,我们知道:程序处理的对象是数据,程序是指令的有序集合。你知道吗,图灵奖获得者瑞士计算机科学家尼克劳斯·威茨(Niklaus Wirth)有一句计算机领域人尽皆知的名言“算法+数据结构=程序”,他在1976年曾出版一本同名著作《Algorithms + Data Structures = Programs》。
图2-1 Niklaus Wirth和他的著作
2.数据类型
在C语言中,任何一个数据都必须属于一种数据类型。数据与操作构成程序的两个基本要素,数据类型可以看作是数据的“抽象”。 C语言为我们提供了丰富的数据类型,如图2-2所示。 C语言的数据类型总体上可以分为基本类型、构造类型、指针类型和空类型四类。在这一章中,我们只讨论基本类型中的整型、实型和字符型。其它的数据类型会在以后的章节中作详细介绍。
图2-2 C语言的数据类型 可以看出,每种数据类型都用一个固定单词(关键字或标识符)来表示。例如在前面我们已经知道关键字int用来表示整型。 每种类型的数据都占据固定大小的存储空间,所以它们都有自己的取值范围。各种数据类型的名称、占据的存储空间及取值范围如表2-1所示。
表2-1 C数据类型、大小与取值范围
类型 | 类型关键字 | 字节 | 位 | 取值范围 |
---|---|---|---|---|
字符型 | char | 1 | 8 | -128~+127 |
短整型 | short [int] | 2 | 16 | -32768~+32767 |
整型 | int | 4 | 32 | -2147483648~+2147483647 |
长整型 | long [int] | 4 | 32 | -2147483648~+2147483647 |
超长整型 | long long [int] | 8 | 64 | -9223372036854775808~+9223372036854775807 |
单精度实型 | float | 4 | 32 | 3.4E-38~3.4E+38 |
双精度实型 | double | 8 | 64 | 1.7E-308~1.7E+308 |
长双精度实型 | long double | 16 | 128 | 3.4E-4932~1.1E+4932 |
无符号字符型 | unsigned char | 1 | 8 | 0~255 |
无符号短整型 | unsigned short [int] | 2 | 16 | 0~65535 |
无符号整型 | unsigned [int] | 4 | 32 | 0~4294967295 |
无符号长整型 | unsigned long [int] | 4 | 32 | 0~4294967295 |
无符号超长整型 | unsigned long long [int] | 8 | 64 | 0~18446744073709551615 |
本关任务代码
#include<stdio.h>
int main(){
printf("%d %d %d %d %d %d %d %d",
sizeof(char),
sizeof(short int),
sizeof(int),
sizeof(long int),
sizeof(long long int),
sizeof(float),
sizeof(double),
sizeof(long double)
);
return 0;
}
相关知识-数据存储
1.所有数据都以二进制形式存储
计算机的硬件是由逻辑电路组成的,逻辑电路通常只能识别接通与断开(或者高电平和低电平)两个状态,这两种状态可以用数字0和1表示。因为只能识别0和1两个数据,所以在计算机内部采用二进制形式来表示一切数据,0和1被称为二进制的两个位(bit)。
2.存储单位
计算机的存储空间以字节(Byte)为基本单位,1个字节是由8个二进制位(bit)构成。存储空间的单位从小到大有:字节(B)、千字节(KB)、兆(MB)、吉(GB)、太(TB)、拍(PB)、艾(EB)、泽(ZB)、尧(YB)等。 1B(Byte字节)=8bit; 1KB (Kilo byte 千字节)=1024B,其中1024=210; 1MB (Mega byte 兆字节)=1024KB; 1GB (Giga byte 吉字节)=1024MB; 1TB (Tera byte 太字节)=1024GB; 1PB(Peta byte 拍字节)=1024TB; 1EB(Exa byte 艾字节)=1024PB; 1ZB (Zetta byte 泽字节)= 1024EB; 1YB (Yotta byte 尧字节)= 1024ZB。 小白弟弟,请你在PTA平台上正确提交以上代码,显示答案正确,说明在PTA平台当中long int类型数据的空间大小为8个字节。 然后,请小白弟弟在Dev-C++中执行以上代码,你会看到如下结果:
执行结果显示,long int类型在你的计算机上占据存储空间4个字节。这是为什么呢? 原来,在不同的操作系统和编译系统中,某个数据类型所占据的内存空间大小有可能是不同的,这取决于系统的不同设计,也就是说上面的代码在不同的计算机中、不同的操作系统下、不同的编译环境下,执行结果可能是不同的。
3.格式说明符%d
printf函数第一个参数中的“%d”,代表的是1个十进制整数的格式说明符(占位符),实际输出的值为后面对应的表达式的值。
4.C程序格式宽松
C语言程序的书写规范很宽松,一个语句可以写在多行,一行也可以写多个语句。
参考代码:
#include<stdio.h>
int main(){
printf("%d %d %d %d %d %d %d %d",
sizeof(char),
sizeof(short int),
sizeof(int),
sizeof( long int),
sizeof(long long int),
sizeof(float),
sizeof(double),
sizeof(long double)
);
return 0;
}
第2关:无符号整型
任务描述:
C语言每个整数类型都对应一种无符号类型,例如: unsigned char、unsigned short [int]、unsigned int、unsigned long [int]、unsigned long long [int]。 通过sizeof()运算符可以计算每种类型的数据在内存中所占的字节数量,例如:sizeof(unsigned int)的值为4,表示unsigned int型数据在内存中占据4个字节。 请按顺序输出以上5种数据类型在内存中所占据的字节数。两个数据之间分隔1个空格。
输入样例:
输出样例:
1 2 4 8 8
开始你的任务吧,祝你成功!
参考代码:
//请在此输入你的代码
#include<stdio.h>
int main(){
printf("%d %d %d %d %d",
sizeof(unsigned char),
sizeof(unsigned short int),
sizeof(unsigned int),
sizeof(unsigned long int),
sizeof(unsigned long long int)
);
return 0;
}