C语言学习002-数据

113 阅读5分钟

一、数据类型分类
----1、基本类型
--------1)整数类型:short int long
--------2)字符型:char
--------3)实型(浮点)
------------.单精度实型:float
------------.双精度实型:double

----2、构造类型
--------1)数组类型
--------2)结构类型:struct
--------3)联合类型:union
--------4)枚举类型:enum

----3、指针类型 char * int * int ** 等

二、关键字
1、数据类型的12个关键字:char short int long float double unsigned signed struct union eunm void
2、控制语句:if else switch case default for do while break continue goto return

3、存储类:auto extern register static const
4、其他:sizeof typedef volatile

三、数据类型 ----1、说明:
--------1)、常量:写死的数值 1.2 2 'a' 这种成为常量
--------2)、变量:名称由数字字母下划线组成,名字区分大小写
--------------特点:编译时分配内存空间, 可以通过名字和地址访问
--------3)、声明和定义不同,定义需要建立存储空间,声明只是说明一下 extern int a就是普通声明,定义是声明的特殊情况
----2、整型 int --------1)输出格式:%d 十进制整型; %o:8进制整型 %x :16进制整型,字母小写 %X:16进制整型,字母大写;%u:10进制无符号数
--------2)输入:scanf("%d",&a) 需要用&变量名的方式接收
--------3)所占字节数:short 2 、 int 4 、 long:win 4 ;linux 4(32位) 8(64位) 、long long 8 --------4)常量例子:10;10l:long型;10ll:long long 型;10u : unsigned int;10ul : unsigned long ; 10ull : unsigned long long

注意:打印格式:
%hd short型
%ld long型
%hu unsigned short
%u unsigned int
%lu unsigned long

%lf 双精度 double %e 双精度,科学计数法

有符号数和无符号数的区别:
有符号数第一位不是数的内容,是符号,正号或者负号 0表示正,1表示负,所有有符号和无符号取值范围是不同的,有符号的数取值范围绝对值比无符号的取值范围绝对值小,但是有符号的有正负两边,所有范围差不多的。只不过数字范围绝对值大小不同。

取值范围:
short -2^15 ~ 2^15-1 -32768 ~ 32767
int -2^31 ~ 2^31-1 -21亿多 ~ 21亿多 long -2^31 ~ 2^31-1

unsigned short 0 ~ 2^16-1 0 ~ 65535
unsigned int 0 ~2^32-1 0 ~ 42亿多 unsigned long 0 ~2^32-1

sizeof 不是函数,无需头文件,返回数据类型的字节大小,返回结果是unsigned int类型的
int a = 12; sizeof(a) 返回a占用的内存大小

3、字符型号:用char表示,表示一个字符,char本质是占一个字节的int
输出 用%d或者 %c格式就行,后面的参数可以是char也可以是数字 ,会自动根据前面的格式转为相应的输出

%c,'a'-32 输出的是A

字符的输入: 用%c, &变量名 就行

常用的几个字符ASCII码: 一共0-127个字符,这里只列举常用的几个
字符 0 ~ 9 对应ASCII码 48 ~ 57
大写字母 A-Z : 65- 90
小写字母a-z : 97-122

下面是完整的ASCII码:

ASCII值****控制字符****ASCII值****字符****ASCII值****字符****ASCII值****字符****
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124
29GS61=93]125}
30RS6294126`
31US63?95_127DEL

以上分为两种 0-31 为控制字符,非打印字符
32-126 为打印字符
127 为Del命令

转义字符: 不可打印:
\r 回车 \n 换行 等
可以打印的字符:
\' 单引号 ; \"双引号 ; \0 数字0 ; \\ 斜杠

4、实型(浮点)单精度的float和双精度的double
不以f结尾的小数是double的,float的数后面要带f: 3.14f;

科学写法: 3e3f = 3000 1e-3 = 0.001 e相当于10,后面是它的指数。

5、putchar输出一个字符 printf是输出字符串
putchar的用法:直接putchar(字符)

getchar读取一个字符,比scanf简单

直接 字符变量 = getchar();

【注意】输入时候遇到的bug:
在getchar后面再有一个getchar或者scanf后面接着一个getchar,这个紧接着的getchar会读取 上一次getchar或者scanf命令中键盘输入后的换行字符\r,也就是第二个getchar自动从缓存读取了10的字符,要想在getchar后或者scanf后实现手动输入字符,需要先用getchar获取掉缓存中剩余的换行字符。