目录
数据类型是按被说明数据的性质、表示形式、占据存储空间的多少及构造特点来划分的。
1.基本数据类型
- 主要特点:该数据类型的数不可以再分解为其他类型
- 数值类型的数据表示:定点数指不带指数部分的数称为定点数,如3.15,-10;浮点数指具有指数(阶码)部分的数称为浮点数,如2.8e+2, -0.341e-1
- 字符类型数据的表示:字符类型的数据在内存中以相应的ASCII码保存,字符数据可以等价为与其相应的ASCII码的整数,可以作为整数参与运算,如‘A’+32
- 枚举类型数据的表示:所谓的枚举是指将变量的类型一一列举出来,变量的值只限于列出来的值的范围内,他是ANSIC新标准所添加的数据类型
- 带符号和无符号数据的表示:存储整数时,一般以其最高位表示数的符号,0为证,1位负,且以补码形式存放;C语言中还允许使用无符号整数;字符型数据也分为有符号和无符号
- 不同的C编程环境,其数据类型的存储空间和取值范围不同,具体可以在编程环境下通过sizeof(类型)函数来查看类型的字节数,并计算出取值范围。如sizeof(float),可从测算出float类型占用的字节数
1.1 整型数据
一 . 整型常量
(1)八进制常数(0~9)
必须以0开头,八进制通常是无符号数
例如:015(十进制为13) 0101(十进制为65)
(2)十六进制常数(0~9,A~F或a~f)
前缀为0X或0x
例如:0X2A(十进制为42) 0XA0(十进制为160)
(3)十进制常数(0~9)
十进制整常数没有前缀
(4)整型常数的后缀
在32位字长的机器上,基本整型的长度也为32位,因此表示的数的范围也是有限定的,如果使用的数超过了上述范围,就必须用长整型来表示,长整型数是用后缀“L”或“l”来表示
长整数158L和基本整常数158在数值上并无区别,但对于158L因为是长整型量,C编译系统将为它分配4个字节储存空间,而对于158因为是基本整型,只分配2个字节的存储空间。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”
例如:358u 0x38Au 均为无符号常数
0XA5Lu表示十六进制无符号长整数A5,其十进制为165
二 . 整型变量
- 基本型(int):在内存中占4个字节,取值为基本整常数
- 短整量(short int或short):占2个字节
- 长整型(long int或long):占4个字节,取值为长整常数
- 无符号型(unsigned):无符号基本型,无符号短整型,无符号长整型
各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省略了符号位故不能表示负数
例如:int a, b, c;
long x,y;
unsigned p,q;
1.2 实型数据
一 . 实型(浮点型)常量
(1) 十进制数形式
由数码0~9和小数点组成,例如:0.0 , .24 , 5.789
(2) 指数形式
由十进制指数树加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成,其一般形式为a E n(a为十进制实型数,n为十进制整数)其值为a*10^n
例如:2.1E5(等于2.1*10^5) 3.7E-2(等于3.7*10^-2)
标准C允许浮点数省略整数部分,如:.356和0.356是等价的;也允许浮点数省略小数部分,如:356. 和356.0是等价的
例1.浮点数的使用。
#include<stdio.h>
main()
{
printf("%f\n%f\n",356.,.356);
}
输出结果:
例题分析:浮点数在输出时,都带有6位小数位0
二 . 实型变量
- 单精度型(float):在32位系统中C中单精度型占4个字节(32位)内存空间,数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。
- 双精度型(double):占8个字节(32位)内存空间,其数值取值范围为1.7E-308~1.7E+308,可以提供16位有效数字。
例如:float x, y;(x,y为单精度实型量)
double a, b, c; (a,b,c 为双精度实数)
例题2:实型常数的使用
#include <stdio.h>
main()
{
float a;
double b;
a=33333.33333;
b=33333.33333333333333;
printf("a=%f\nb=%f\n",a,b);
}
输出结果:
C语言中的浮点数表示是有限的,无法精确地表示某些小数。因此,当我们将33333.33333赋值给float类型的变量a时,它会被近似为33333.332031。同样地,当我们将33333.33333333333333赋值给double类型的变量b时,它会被近似为33333.333333。这是由于浮点数在计算机中的存储方式导致的。计算机使用二进制来表示浮点数,而二进制无法精确地表示某些十进制小数。因此,在进行浮点数运算时,可能会出现舍入误差,可以考虑使用其他编程语言或库。这里使用的是vscode
1.3字符型数据
一 . 字符常量
字符常量是用单引号括起来的一个字符,例如:’a’ ‘b’ ‘=’ ‘+’
字符常量的特点:
- 只能用单引号括起来
- 只能是单个字符不能是字符串
- 字符可以是ASCII字符集中任意字符
注意:5是整形常量,‘5’是字符常量
二 . 转义字符
转义字符是指用反斜杠“\”开头后面跟一个字母代表一个控制字符。
C语言中常用的转义字符:
\n | 换行 |
\t | 横向跳格(即跳到下一个输出区-占8列) |
\v | 竖向跳格 |
\b | 退格(不换行) |
\r | 回车 |
\f | 走纸换页 |
\\ | 反斜杠字符“\” |
\’ | 单引号字符 |
\ddd | 1到3位8进制数所代表的字符 |
\xhh | 1到2位16进制数多代表的字符 |
例题3:转义字符的使用。
#include <stdio.h>
main()
{
int a,b,c;
a=5,b=6,c=7;
printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c);
}
输出结果:
三 . 字符变量(char)
字符变量的取值是字符常量即单个字符(每个字符变量被分配到一个字节的内存空间),字符值是以ASCII码的形式存放在变量内存单元之中。可以把字符变量看成整型量,C语言允许把整型变量赋以字符值,也允许把字符变量赋予整型值。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。
例题4:字符变量的使用1
#include <stdio.h>
main()
{
char a,b;
a = 120;
b = 121;
printf("%c, %c\n%d, %d\n",a,b,a,b);
}
输出结果:
例题分析:
本程序中说明a,b为字符型,但在赋值语句中赋予整型值。从结果上看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为“c”时,对应输出的变量值为字符,格式符为“d”时对应输出的变量值为整数。
例题5:字符变量的使用2
#include <stdio.h>
main()
{
char a,b;
a = 'x';
b = 'y';
a = a-32;
b = b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
}
输出结果:
例题分析:
本例a,b被说明为字符变量并赋予字符值,C语言允许字符变量参与数值运算,即用ASCII码参与运算。由于大小写字母的ASCII码相差32,因此运算后把小写字母换成大写字母然后分别以整型和字符型输出。
四 . 字符串常量
字符串常量是一对双引号括起的字符序列,例如:“china”“C program”“$12.5”,注意字符串常量与字符常量不同,字符串占一个字节的内存空间,字符串常量占的内存字节数等于字符串中字节数加1,增加的一个字节中存放字符‘\0’(ASCII码为0),这是字符串结束的标志。例如:‘a’在内存中占一个字节,可表示为:a ;“a”在内存中占两个字节,可表示为:a | \0
五 . 字符常量
C语言中,可以用一个标识符来表示一个常量,称为字符常量,在使用前必须用宏定义命令先定义。
符号常量定义的一般形式:
#define 标识符 常量
其中#define也是一条预处理命令,也称为宏定义命令,功能是把该标识符定义为其后的常量值,习惯上符号常量的标识符用大写字母,变量标识符用小写字母
例题4:符号常量的使用
#include<stdio.h>
#define PI 3.14159
main()
{
float s,r;
r = 5;
s = PI*r*r;
printf("s=%f\n",s);
}
输出结果:
例题分析:
本程序在主函数之前由宏定义命令定义PI为3.14159,在程序中改值代替PI,注意符合常量不是变量,它所代替的值在整个作用域内不能再改变即不能用赋值语句重新赋值。
2.构造数据类型
一个构造类型的值可以分解成若干个“成员”或“元素”,每个“成员”都是一个基本数据类型或又是一个构造类型,构造类型有以下几种:数组类型、共用类型、结构类型和文件类型。
3.指针类型
指针的值用来表示某个量在存储器中的地址,虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量!
4.空类型
调用函数时通常应向调用者返回一个函数值,返回的函数值的数据类型应在函数定义及函数说明中给予说明,但是也有一类函数调用后不需要向调用者返回函数值,这种函数可以定义为“空类型”,其类型说明符为void。
234几大类后面会具体说明
笔记陆续更新中。。。