食用指南:背景为黄色的是特殊标注,比较重要。下滑线的是比较不重要的。
第一章:数据和C
关键字:int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary;_Complex、_Imagainary表示复数和虚数
运算符:sizeof()
函数:scanf()
1.int类型
int16_t、int32_t、int64_t等都在 stdint.h库里面
一般情况下——short占16位,long占32位,int占16或32位,longlong类型占64位
● 定义 123默认存储为int类型,如果超过int类型的最大值,会自动转换成long,若更大,自动转换成unsigned long -> long long
● 要把一个较小的常量当做long类型,需要在末尾加上l/L
● 无符号类型的溢出后从0重新开始,有符号的溢出从最大值得相反数从新开始。
● 打印short用%hd,打印long 类型用%ld,如果以十六进制或八进制输出,可以将d换成x或o
2.隐式转换和显式转换 short类型格式化输出时用%hd long类型格式化输出时用%lld
隐式转换:自动转换
显式转换:强制转换
float a = 2.00;
(int)a;
uint32_t的最大值可以用UINT32_MAX来表示,以此类推。
3.float类型float.h FLT_MAX:float类型的最大值(带小数点的和科学计数法的都是浮点型)
FLT_MIN:float类型的最小值
上溢:比最大值还要大 FLT_MAX*1000.0
下溢:比最小值所表示的小数还要多FLT_MIN/1000.0
INFINITY:最大/小值
NAN(NOT A NUMBER):无法确定的数
4.四舍五入
最近偶数舍入(银行家舍入):四舍六入,五后非0进1,五后皆零看奇偶(如果位尾数的整数部位是奇数,
向上舍入,使得变为偶数。如果位尾数的整数部位是偶数,保持不变)
5.float 和 double
● double的精度更高,占用内存更大,float精度低,但占用内存小。C语言写小数没有定义类型,默认为double类型。float和double的格式化输出都使用%f
● 科学计数法 :打印使用%e
3.1E+5代表3.1 * 10 ^5
3.1E-5代表3.1 * 10 ^-5
可以没有小数部分(2.E5),或没有整数部分(.3E5),但不能小数和整数部分都没有
6.十六进制和八进制
十六进制的前缀是0x,八进制的前缀是0,打印出十六进制数用%x,打印出八进制数用%o,打印出前缀需要在“%”后+“#”
7.char类型:占用一个字节;实际上的字符是以数值形式存储的。
第二章:字符串和格式化输入/输出
1.字符串:
● 没有专门用来储存字符串的数据类型,所以字符串都被保存在char类型数组中,以'\0'结尾
● scanf()只会读取字符串中的一个单词(遇到空格就停止);scanf读取字符串时不需要' & '。
● strlen():计算字符串的长度,直到空字符为止,但不计入空字符;在string.h库中
2.常量
● 常量的定义 #define NAME value 常量通常使用大写来表示
● const限定符,用以限定一个变量为只读 const int MONTHS = 12,MONTHS在程序中只读,不能被更改
3.输出/入
● sizeof()以字节为单位返回类型或值得大小,标准只规定了该值是无符号整数,在不同系统中可能会是不同的整数类型,为了更好地移植性,c语言将size_t定义为sizeof()返回的类型;打印时使用%z
● 标记:
○ -:待打印项作对齐
○ +:待打印项右对齐
○ 空格:有符号值为正,在值前面显示前导空格,若为负数,在值前面显示减号
● 修饰符 *:如果不想预先指定字符宽度,可以用*修饰符代替字符宽度,但还要用一个参数告诉函数,字段宽度为多少
printf("%*d", width, num);width代表字符宽度
scanf("%*d %*d %d",&n);跳过两整数,把第三个整数拷贝给n
第三章:运算符、表达式和语句
● 运算符优先级!=递增>逻辑运算符>算术运算符
● 递增前缀和递增后缀的区别:
int a = 1, b=2;
a_post = a++;
b_post = ++b;
printf("a_post = %d b_post = %d", a, b);
/*输出a_post = 1,b_post = 2,
后缀是先使用a的值后递增a,后缀是先递增b的值后使用b的值*/
递增和递减符号的优先级都很高,只有括号里面的优先级比他们高
y = 2;
n = 3;
m = (y + n++) * 6
代入y和n得m=( 2 + 3) * 6,n的值只有被使用后才会递增,n++代表先使用n,再递增。++n表示先递增,再使用n
第三章:循环
ctype.h用来处理字符的头文件
isalnum()数字,字母
isalpha()字母
isdigital()数字
islower()小写字母
isupper()大写字母
toupper()将小写字母转换成大写字母
tolower()将大写字母转换成小写字母