一、数据类型分类
----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值**** | 字符**** | |
|---|---|---|---|---|---|---|---|---|
| 0 | NUT | 32 | (space) | 64 | @ | 96 | 、 | |
| 1 | SOH | 33 | ! | 65 | A | 97 | a | |
| 2 | STX | 34 | " | 66 | B | 98 | b | |
| 3 | ETX | 35 | # | 67 | C | 99 | c | |
| 4 | EOT | 36 | $ | 68 | D | 100 | d | |
| 5 | ENQ | 37 | % | 69 | E | 101 | e | |
| 6 | ACK | 38 | & | 70 | F | 102 | f | |
| 7 | BEL | 39 | , | 71 | G | 103 | g | |
| 8 | BS | 40 | ( | 72 | H | 104 | h | |
| 9 | HT | 41 | ) | 73 | I | 105 | i | |
| 10 | LF | 42 | * | 74 | J | 106 | j | |
| 11 | VT | 43 | + | 75 | K | 107 | k | |
| 12 | FF | 44 | , | 76 | L | 108 | l | |
| 13 | CR | 45 | - | 77 | M | 109 | m | |
| 14 | SO | 46 | . | 78 | N | 110 | n | |
| 15 | SI | 47 | / | 79 | O | 111 | o | |
| 16 | DLE | 48 | 0 | 80 | P | 112 | p | |
| 17 | DCI | 49 | 1 | 81 | Q | 113 | q | |
| 18 | DC2 | 50 | 2 | 82 | R | 114 | r | |
| 19 | DC3 | 51 | 3 | 83 | S | 115 | s | |
| 20 | DC4 | 52 | 4 | 84 | T | 116 | t | |
| 21 | NAK | 53 | 5 | 85 | U | 117 | u | |
| 22 | SYN | 54 | 6 | 86 | V | 118 | v | |
| 23 | TB | 55 | 7 | 87 | W | 119 | w | |
| 24 | CAN | 56 | 8 | 88 | X | 120 | x | |
| 25 | EM | 57 | 9 | 89 | Y | 121 | y | |
| 26 | SUB | 58 | : | 90 | Z | 122 | z | |
| 27 | ESC | 59 | ; | 91 | [ | 123 | { | |
| 28 | FS | 60 | < | 92 | / | 124 | ||
| 29 | GS | 61 | = | 93 | ] | 125 | } | |
| 30 | RS | 62 | 94 | 126 | ` | |||
| 31 | US | 63 | ? | 95 | _ | 127 | DEL | |
以上分为两种
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获取掉缓存中剩余的换行字符。