C语言总结
C语言
- 数据类型
- 常量与变量
- 常量
- 宏定义常量
- #define <名字> <值>
- #difine PI 3.14159
- #define .......\
- #define <名字> <值>
- 宏定义常量
- 常量
- 常量与变量
........
-
-
-
-
- 可定义无值的宏
- 预定义宏
- 像函数的宏
- #define cube(x) (x)*(x)*(x)
- 整个值要括号,每个参数都要括号
- 拓展
- nline
- # ## 定义
- const修饰
- const int N = 10000000
- 字符常量
- 静态本地变量
- static
- 函数内局部作用域(本地可访问)
- 特殊的全局变量
-
-
- 变量
- 储存于一个空间内,可以被改变的量
- 变量使用前必须初始化
- 全局变量与局部变量
- 全局变量
- extend
- 放头文件中声明
- 类型
- 整数型
- int
- 只能存储整数,向下取整
- int
- 浮点数
- double
- 双精度浮点数
- float
- 单精度浮点数
- 精度
- float 有效数位7
- double 有效数位15
- 浮点数误差
- 离散型数据
- inf nan
- 科学计数法
- double
- 字符型
- char
- 只能存储单个字符
- char
- 整数型
- 存储数据的本质
- 0 1 构成的数据存储大厦
- ASCII
- 字符其本质是 0 1,区别数字1和字符'1',计算机内所有东西的存储方式都是 0 1,字符可以和数字进行运算
- Byte B KB MB GB TB
- 1024
- 不同数据的本质
- 关于负数
- 补码
- -5对应带符号位负数5(10000101)→除符号位外所有位取反(11111010)→加00000001(11111011)所以-5的补码是11111011。
- 补码
- 数据大小
- sizeof()
-
- 运算符、表达式
- 运算符
- 数学运算符
- + - * / % =
- 逻辑运算符
- ! && || ... ? ... : ...
- 关系运算符
- > < >= <= == !=
- 复合运算符
- += -= *= /= %= ++ --
- 特殊字符
- 格式控制字符
- %d %c %f %lf %s %u %e %lE %lld %p %#p %o %x %g
- 注释
- // /*....*/
- 转义(逃逸)字符
- \n \t \b \r printf("你是真的/"狗/"");
- 格式控制字符
- 指针字符
- &
- 取地址
- *
- 取内容
- &
- 位运算字符
- >> << | ^ ~ &
- >>
- 左移,二进制数全部向左移动一位,移动后的最右边的空位用0补,相当与数值乘以二,移动n位就是n次幂
- <<
- 右移,二进制数全部向右移动一位,符号位不动,左边留下的空位用0补齐,相当于数值除以二
- |
- 有一位位1结果位1,否则位0
- 按位或,可以拼接两个数,可以使某一位或某些位位1
- &
- 两位都是1结果为1,否则为0
- 按位与,可以用来取数中的某一段,可以让某一位或某些位为0
- ~
- 把0变1 把1变0
- 按位取反
- ^
- 两位相同则结果位0,否则为1
- 按位异或,一个数被异或两次就相当于什么都没做
- >>
- >> << | ^ ~ &
- 编译预处理指令
- #
- 编译预处理不属于C语言的语句,所以不需要';'
- #include <>
- 插入文件内容
- 标准库空<>
- 自己写的头文件用“”
- 插入文件内容
- #
- 数学运算符
- 表达式
- 单个表达式
- 集合表达式
- if else 还有 循环 等后面只能跟一个表达式或者多个表达式的集合
- 运算符
- 输入输出
- 输出
- Hello world!
- 基本格式:printf("输出语句",格式控制对应的量);
- 每一个%所控制的数据类型会与 ',' 后面的量一一对应,按照每种变量自己的方式读取并输出
- 输出语句中除了'%'与'\'控制的特殊字符会变换输出,其它任何东西都会按照原样输出
- 返回值输出字符数
- 基本格式:printf("输出语句",格式控制对应的量);
- Hello world!
- 输入
- 数据输入方式
- 基本格式:scanf("%...", &...);
- 输入函数的双引号内是我们必须输入的东西(包括空格逗号等所有字符),除非题目特殊要求,否则不要多添加任何东西
- scanf()给函数赋值时,是将用户输入的值,交到某个内存地址里存储
- 缓冲区问题
- %c 与%s 【gets()等与输入字符相关的都要注意】会直接从缓冲区读取字符不会判断该字符是否可读,%d%lf等会判断数据是否符合读入要求,因此当我们使用%c%s时我不知道缓冲区内是否存在不要的字符时为了避免出错,我们可以在s和c前面加一个'space'(空格)(如:' %c'),或者在scanf()前加一个getchar(),也可以用setbuf(stdin, NULL)清空缓冲区。
- 返回值读入变量数
- 基本格式:scanf("%...", &...);
- 数据输入方式
- 变量的输入与输出
- 整型
- %d
- 十进制整数
- %d
- 字符
- %c
- ASCII码表中的字符
- %c
- 浮点数
- %f %lf
- %f单精度浮点数
- %lf双精度浮点数
- %f %lf
- 整型
- 控制输出域
- %+-0m.nlf
- 默认左对齐,加上 - 右对齐
- m域宽,代表输出数据最小所占空间数,一个字符一个空间,不足用空格补齐
- .n 是代表精度,保留几位小数
- 0 表示域宽内数字前的空格用0补齐
- + 数值前强制填充一个加号
- %*d
- printf("%*d",6,10); == printf("%6d",10);
- %[flags][width][.prec][hlL]type
- %+-0m.nlf
- 数据类型转换
- 两种数据类型运算时,转换为字节较大的数据类型
- 强制转换
- (类型)数据
- 输出
- 头文件
- #include <stdio.h>
- printf()
- 输入
- scanf()
- 输出
- 字符输入输出处理函数
- printf()
- #include <string.h>
- strlen()
- 字符串长度
- strcp()
- 字符串复制
- memset()
- 字符串初始化
- strcat()
- 字符串拼接
- strcmp()
- 字符串比较
- strlen()
- #include <math.h>
- pow()
- 次方
- sqrt()
- 根号
- pow()
- #include <stdlib.h>
- malloc()
- 内存申请
- malloc()
- 头文件内,只能放声明
- 标准头文件结构
- #include <stdio.h>
#ifdefine ....
#define.....
......
#endif
- 选择
- if
- 执行条件 —— 运算结果
- 非0即1,0为false1为true
- 执行条件 —— 运算结果
- if else
- if else 嵌套
- switch
- case break default
- if
- 循环
- while
- while(0/1){ ……}
- do while
- do{ ……} while(0/1)
- for
- for(变量初始化 ; 循环条件 ; 循环结束变量处理){ ……}
- 循环控制关键字
- break
- 终止循环
- continue
- 结束本次循环
- goto
- 强制跳转(基本不用)
- break
- 循环嵌套
- while
- 数组
- 连续空间内储存相同类型数据
- 定义方式
- 类型 名字[大小]
- 初始化
- arr[]={1,2,3,4,5,6,7,8,9};循环遍历赋值直接赋值
- 数组角标从0开始
- 字符数组
- char 型数组模拟字符串
- 字符串
- 以'\0' 结尾的字符数组,由于最后要用结束符,通常要将字符数组开得更大
- 字符串函数
- 字符输出与输入
- 输入
- getchar()
- gets()
- fgets()
- 输出
- putchar()
- puts()
- 输入
- 二维数组、高维数组
- arr[ ][ ][ ][ ][ ]……
- 初始化方式
- 直接初始化
- arr[] = {{............}{............} …………}
- 多重循环初始化
- 直接初始化
- 排序
- 冒泡排序
- 双重循环+交换
- 桶排序
- 制表
- sort/qsort
- 冒泡排序
- 函数
- 模块化程序的工具
- 函数类型
- 与数据类型相同
- 函数类型即是返回值类型
- 函数参数
- 形参与实参
- 函数执行时新开辟的变量,接收实参的数值,进行函数内的运算
- 实参,主函数内的变量的值
- 指针传参
- 传入地址,直接对实参进行操作
- 形参与实参
- 自定义函数——头文件函数
- 函数递归
- 设置递归结束条件
- 本函数内调用本函数
- 指针(灵魂)
- 运算符
- &取地址
- *取内容
- 访问指针所指的变量
- 指针 == 地址
- 解决函数多个返回值的问题
- 指针使用之前必须赋值
- 数组变量是特殊的指针
- 数组名 == 数组首地址
- 数组名相当于是一个常量指针,所以数组之间不可以被赋值
- *(p+n) == arr[n]
- 指针加减以单元长度进行,一个的单元为1
- 0地址
- 常用于初始化,做返回值
- NULL
- 运算符
- 结构体
- struct
- 结构体内可以放很多种类型的数据,当我们定义一个变量时,此变量就具有结构体的定义的多种类型,我们通过'.'访问
- struct Node{ int a; double b; char c; struct code;};
- 结构体数组
- 结构体也可以用来定义数组,其性质和普通数组相同