我的C语言学习记录
第一次尝试用写博客的方法来记录自己的学习。希望自己以后能慢慢坚持下去
参考书目是《C语言入门经典》 作者:Ivor Horton
C语言-编程初步
标准库: 头文件(.h)标准输入/输出文件
main()函数: 每个程序必须有一个(每个程序从这个函数开始执行)
delay()函数: 延时函数
//或/*…*/: 注释
符号# :预处理指令
stdio.h : 输入输出函数的头文件,头文件的后缀 .h
limits.h: 每种类型的极限值
类型 | 最小值 | 最大值 |
---|---|---|
char | CHAR_MIN | CHAR_MAX |
short | SHRT_MIN | SHRT_MAX |
int | INT_MIN | INT_MAX |
long | LONG_MIN | LONG_MAX |
longlong | LLONG_MIN | LLONG_MAX |
float.h: 每种类型的极限值(浮点型)
类型 | 最小值 | 最大值 |
---|---|---|
float | FLT_MIN | FLT_MAX |
double | DBL_MIN | DBL_MAX |
long double | LDBL_MIN | LDBL_MAX |
stdbool.h 头文件
可以直接将bool用作类型名。存储0或1;
定义了符号true和false,分别对应1或0;非0也是true;
存储布尔值的变量:stdbool.h头文件_Bool()(变量值可以是0或1,ture或false)
数学函数
math.h(double类型)
函数名 | 说明 |
---|---|
floor(x) | 返回不大于x的最大整数 |
ceil(x) | 返回不小于x的最小整数 |
fabs(x) | 返回x的绝对值 |
log(x) | 返回x的自然对数(底为e) |
log10(x) | 返回x的对数(底为10) |
exp(x) | 返回e^x的值 |
sqrt(x) | 返回x的平方根 |
pow(x) | 返回x^y的值 |
给函数名的末尾添加f或l,就得到处理float和long double类型的函数。
main函数:每个程序必须有的函数
print()函数 :输出函数,末尾必须有分号
#define 宏替换名 宏替换体
转义序列 | 说明 |
---|---|
\n | 换行 |
\r | 回车键 |
\b | 退后一格 |
\f | 换页 |
\t | 水平制表符(空格) |
\v | 垂直制表符 |
\a | 发出鸣响 |
\? | 插入问号 |
\" | 插入双引号 |
\’ | 插入单引号 |
\\ | 插入反斜杠 |
\ddd | 表示1~3个八进制的数字 |
\xdd | 表示两个十六进制的数字 |
\ddd:输出字符为:八进制转换为十进制所对应得ASCII码字符。
\xdd:输出字符为:十六进制转换为十进制所对应得ASCII码字符。
三字母序列 | 转换 | 符号 |
---|---|---|
??= | 转换为 | # |
??( | 转换为 | [ |
??) | 转换为 | ] |
??/ | 转换为 | \ |
??< | 转换为 | { |
??> | 转换为 | } |
??’ | 转换为 | ^ |
??! | 转换为 | | |
??- | 转换为 | ~ |
一个字节(byte)有8位(bit),位只能是0或1
变量的命名:只能由字母,数字,下划线组成,但要以字母开头,区分大小写。
数据类型关键字: Int 整数型,存储整数值
转换说明符: %d:十进制
要想输出%字符,必须用转义序列%%
不能在字符串的中间换行,需要将字符串拆开成两行或多行时,一行上的每一段字符串必须有自己的一对双引号。
基本算术运算
- +加
- - 减
- * 乘
- / 除
- % 取模(余数):模数运算符结果和左操作数的符号相同。(应用 整数型运算符 才有意义)
带符号的整数类型:
类型 | 字节数 |
---|---|
signed char | 1字节=8位 |
short int | 2字节=16位 |
int | 4字节=32位 |
long int | 4字节=32位 |
long long int | 8字节=64位 |
无符号的整数类型:
类型 | 字节数 |
---|---|
unsigned char | 1字节=8位 |
unsigned short int | 2字节=16位 |
unsigned int | 4字节=32位 |
unsigned long int | 4字节=32位 |
unsigned long long int | 8字节=64位 |
将整数常量指定为long类型,应添加一个L
将整数常量指定为long long类型,应添加两个L
将整数常量指定为无符号类型,应添加一个U
要存储取值范围最大的整数,应添加ULL
二进制数:如果有n位,就可以表示2n个指数,0~2n-1
转换为十进制:1111=1*23 +1*22+1*21+1*20=15
十六进制:一个十六进制对应4位二进制(以0x开头,二进制从右边开始分为四个一组)
八进制:一个八进制数对应3位二进制(以0开头的整数常量,会被编译器看作八进制数)
浮点数: 数字E表示指数
浮点数变量:
类型 | 字节数 |
---|---|
float | 4字节=32位(精确到6到7位小数) |
double | 8字节=64位(精确到15位小数) |
long double | 12字节=96位(精确到18位小数) |
编写一个类型为float的常量,需要添加一个f
因为它(默认为double类型)
控制输出中的小数位数: 格式说明符%.xf:输出的小数点后有x位数。
控制字符宽度:%width.precision f:width值是一个整数,指定输出的总字符数(包括空格),即字段宽度。precision值也是一个整数,指定小数点后的位数。
指定字段宽度时,数值默认为右对齐,如果希望数值左对齐,只需在%后添加一个负号。
格式说明符
读取无符号整数值 | %u |
读取char类型的数值 | %c |
读取short类型的数值 | %hd |
读取int类型的数值 | %d |
读取long类型的数值 | %ld |
读取float类型的数值 | %f或%e |
读取double类型的数值 | %lf或le |
scanf_s相比于scanf更安全
scanf_s("%",&变量): 将键盘输入的值读取存到变量中,有时候需要指定字节数sizeof()
使用头文件#pragma warning(disable:4996)可使用scanf
如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔。
若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
scanf在使用输入字符时,需要在%c前加上空格,防止误操作,忽略空格输入,接受第一个非空格输入。
scanf在使用时,如果只有一个%d,输入的数据不能按空格,否则只会输入第一个数据。如果循环使用scanf时,存储数据会依次存储。
比如3 4 5,第一次存储3,第二次存储4,第三次存储5.
定义命名常量
#define X y:#define语句中标识符都是大写
在变量名前加上const关键字,可以固化变量的值。
sizeof运算符:可以确定给定的类型占据多少字节(结果是一个无符号整数,用%u输出它)
使用size_t变量存储sizeof运算符生成的值(stddef.h)
强制类型转换
1:(变量类型)变量名(在变量名称前加上转换的变量类型)
隐式类型转换的规则
long double>double>float>long long>long>int>short>signed char
字符类型
1:char
可以给char类型的变量指定字符常量,字符常量是一个放在单引号中的字符。
字符的输入输出
使用scanf()函数和格式说明符%c,可以从键盘上读取单个字符
用格式说明符%x替代%d,就可以把char类型变量的整数值输出为十六进制值
标准库ctype.h 头文件提供的toupper()和tolower()函数可以把字符转换为大写和小写。
枚举:enum 枚举类型{枚举常量}
赋值操作的op= 形式
lhs op= rhs;等价于lhs = lhs op (rhs)