Printf
格式化输出(printf)(print format)
函数的原型 int printf(格式化字符串,表达式1,表达式2······),作用是显示格式串中的内容,并且在该字符串指定的位置插入要显示的值。
格式化字符串:1.普通字符-》直接输出。
2.转换说明-》以%开头的字符,表示一个占位符,会以表达式的值替换占位符。
(常见的转换说明:%d:以整数的形式解释这片内存空间,并十进制的方式输出;%f:以浮点数的形式解释这片内存空间并输出;)
输出转换说明作用:1.以何种方式解释内存区域。(编码)
2.以何种格式输出。
转换说明
格式:%m.pX(m,p代表整数,m和p是用来控制输出格式的。
m(minimal field width)代表最小字段宽度,表明要显示的最小字符数量;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZNPUQit-1648645570273)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315101608572.png)]
p(pression)精度,精度的含义依赖转换说明符
-
d 代表显示数字的最小个数(必要时会在前面补0),如果省略p,则默认为1
-
f代表小数点后面数字的个数(默认为6),如果p为0,则不显示小数点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXUZaa0P-1648645570275)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315102556685.png)]
X代表字母,X的主要作用是以何种方式解释内存空间);
printf函数的返回值就是显示字符的个数。可以通过取地址符进行查看。
Scanf
转换说明
格式:int scanf(格式串,表达式1,表达式2……)
scanf本质上是一个“模式匹配函数”,试图把输入字符与转换说明进行匹配。
scanf从左到右依次处理转换说明,如果成功则继续处理后面的字符串,如果失败则立即返回,返回值是处理转换说明转换成功的个数。
转换说明的作用:
-
表示匹配的规则。
-
表示将字符数据转换成对应的二进制数据。
scanf函数的格式串:普通字符,其他字符(精确匹配),空白字符(匹配任意多个空白字符,包括0个)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sq8CPMtY-1648645570276)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315112303699.png)]
注意事项
- scanf匹配%d,%f(进行数值匹配时),会匹配前面的空白字符。不会匹配后面的字符。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rz2VI71v-1648645570278)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315113427366.png)]
基本数据类型
基本数据类型分为:
-
整数类型
整数类型分为:
-
有符号整数 short,int,long(int),long long (int)
-
无符号整数 unsigned short(int),unsigned int,unsigned long(int),unsigned long long (int)
注意事项:
-
C语言没有明确规定各种整数类型的具体大小。可能根据机器的不同而不同。
-
C语言规定了各种类型的最小大小。(int 类型至少要占两个字节)
-
short<=int<=long<=long long
-
-
整数类型编码
无符号整数(以一个字节为例) 1001 0011=27+24+2+1=147
有符号整数(补码) 1001 0011=-27+24+2+1=-109
为什么有符号整数会采用补码形式?
- 利用加法器做减法运算
为什么采用补码的形式就能用加法器做减法运算?
模运算:
同余:x mod n =y mod n ->x≡y
等价类:
模运算定理1(替换原则):x≡x`(mod n)并且y≡y`(mod n),那么
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4clNmM9p-1648645570279)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315150316770.png)]
模运算定理2(结合性原则):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bPPlVIcB-1648645570280)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315150513311.png)]
模运算定理3(交换原则):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88wrexIK-1648645570280)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315150749147.png)]
模运算定理4(分配原则):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aw8kM2xr-1648645570281)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315150804276.png)]
64位机器上整数类型常见的取值范围
- | 字节 | 最小值 | 最大值 |
---|---|---|---|
short | 2 | -215 | 215-1=32767 |
unsigned short | 2 | 0 | 65535 |
int | 4 | 231 | 232 |
unsigned | 4 | 0 | 4294967295……(约43亿) |
long(>=4个字节) | 8 | -231/-263 | 231-1/-263-1 |
unsigned long | 8 | ||
long long (>=8个字节) | 8 | ||
unsigned long | 8 |
整数常量的表示方法
三种表示方式:
- 十进制。1234,465,789(不能以0开头)
- 八进制。以0开头,01234,05456
- 十六进制。以0x开头,0xADAA5
整数常量的数据类型:
十进制: int->long->long long ->error!
八进制、十六进制: int ->unsigned->long->unsigned long->long long ->unsigned long long ->error!
可以在整数常量的后面添加后缀,指定指数常量的类型:U(unsigned),L(long),LL(long long),LLU/ULL(unsigned long long )
读写整数
%u: 无符号十进制整数
%o:无符号八进制整数
%x:无符号十六进制整数
%d:有符号十进制整数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LjgtyvIc-1648645570282)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315155144983.png)]
读写短整数
在u,o,x,d前面添加h(short)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1kyivSf-1648645570282)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315155343322.png)]
读写长整数
在u,o,x,d前面添加l
读写长长整数
在u,o,x,d前面添加ll
-
浮点数类型
浮点数包含:
- float(4个字节)
浮点数编码规则(IEEE754标准)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gget2pRV-1648645570283)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315160819571.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wn4HnWh-1648645570283)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315161851179.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydg4GpVk-1648645570284)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315162837866.png)]
-
double(8个字节)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LBz5f16-1648645570285)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315163213077.png)]
浮点常量
浮点数常量有多种表示方法,要么包含小数点,要么包含字母e(E)。例如57.0,57,5.70e2,498e-3
浮点数常量默认是double类型,如果需要表示float类型,应该在浮点数常量后面添加字母f。
读写浮点数
%f: float
%lf: double(注意l不能大写,大写Lf代表long double类型)
-
long double(一般用于高精度的计算,一般情况下用不到)
-
字符类型(C语言把字符类型当作整数类型来处理)
char类型大小为一个字节,并且采用ASCII编码表示。ASCII编码用7位表示128个字符(最高位都为0)
\0 空字符;空格 32;‘0’ 48;‘A’ 65;‘a’ 97
C语言把字符类型当作小的整数类型来使用,因此可以对字符进行算数运算和比较运算。
不能直接输入的字符,可以通过转义序列进行输入
转义序列分为:
- 字符转义序列。\a(alert bell) \b(backspace) \f(form feed) \n(new line) \r(carriage return)\t(horizontal tab)\v(vertical tab) \\(back slash) ?(question mark) \’(single quote) \"(double quote)
- 数字转义序列:
- 八进制表示形式:以’\‘开头,后面最多3个八进制数字。\0,\101(A)
- 十六进制表示形式:以’\x‘开头,后面接十六进制数字。\x0,\x41(A)
字符处理函数
定义在头文件ctype.h里面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckRww0aM-1648645570285)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220315172434586.png)]
读写字符数据
-
scanf/printf 配合%c 来读写字符
注意事项:%c不会忽略前面的空白字符,如果想忽略前面的空白字符,可以在scanf中“ %c”
-
getchar()/putchar()
getchar()/putchar()的效率是高于scanf()/printf()。如果只是读写字符数据类型,建议使用getchar()/putchar()。
while(getchar()!='\n'){……} *读取这行剩余的字符*
-
布尔类型
C99定义了布尔类型,包含在<stdbool.h>头文件中。
bool类型本质上还是无符号整数类型,其中非0表示true,0表示false
注意事项:给bool类型变量赋值,非0会得到true,0会得到false;任何非0的值都会转化成1
()。如果只是读写字符数据类型,建议使用getchar()/putchar()。
while(getchar()!='\n'){……} *读取这行剩余的字符*
-
布尔类型
C99定义了布尔类型,包含在<stdbool.h>头文件中。
bool类型本质上还是无符号整数类型,其中非0表示true,0表示false
注意事项:给bool类型变量赋值,非0会得到true,0会得到false;任何非0的值都会转化成1