- 控制语句
1、条件分支语句
if(){}
else if(){}
else {}
switch(){
case 1:printf();break; //一定要有break来截断代码,否则会继续执行后续的代码。
.......
default:..........break;
}
- 循环语句
for(初始条件;判断条件;步长)
{}
//开方函数 sqrt(a)
while(判断条件)当判断条件为真时,进入循环,为假时,跳出循环。ps while(1)表示一直循环。
do{
}while();
与for,while语句的区别在于该语句会先执行一次,再进行判断条件。
- 数据转换
- 中间变量法 缺点:占用内存
- 数轴法 缺点:int 有界 a+b的时候可能会超过界限。
{b=a-b;a=a-b;b=a+b;
}
3位操作法
&:与 1&1=1 0&1=0
|:或 1|1=1 1|0=1 0|0=0
^:异或 1^1=0 0^0=0 1^0=1
~:取反 包括符号位
ps -1 =1000 0001 取反码 1111 1110 取补码 1111 1111 ~取反 0000 0000
所以在将-1输入计算机后转换成补码后,再取反的值为0。
换位方法 a=a^b b=a^b a=a^b
如何快速计算一个二进制数中有多少个1
x&(x-1)
- 函数
- 函数定义:int/void(返回值类型:整数型/无返回值) name(int a(函数的参数:形参))
{函数的主体}
- 函数的申明:void name ();类似extern的作用
- 函数的调用:name(a) a:实参(实际处理的参数)
- 指针(ptr)
ps:指针也是变量(8字节) 里面存的是地址
int* 表示int型的指针
&:取地址符 ps: int* p=&a; 表示p指向a内存
*:取值符号 *p=10 ps:p;里存的是a的地址 加*->*p 才表示a,不能直接用p
- 宏函数
#define ABS(x) (x)<0?(-x):(x)
单目运算符:只需要一个参数的运算符 a++ ,a--
双目运算符:a+b 需要两个参数的运算符:+ - * %
三目运算符 __?__:___ 第一个是运算条件 判断是否成立 成立则允许:前的语句 不成立则允许:后的语句
ps:由于宏定义是文本替换,所以变量要加()
#define M(x,y,z) x*y+z
int a=1,b=2,c=3;
M(a+b,b+c,c+a)
M=a+b*b+c+c+a=12
因为不同文件里的宏定义可能重复,所以需要先确定是否有重复
#ifndef __name_H__
#define__name_H__ (如果没有这个宏定义,那么我定义一个....:条件编译,避免头文件重复包含)
#endif
printf(“%s\n”,__FILE__): 显示当前所在文件名
printf(“%s\n”,__func__); 显示当前所在函数名
printf(“%s\n”,__PATE__); 显示当前编译日期
printf(“%s\n”,__TIME__); 显示编译时间
printf(“%s\n”,__LENE__); 输出当前行数
写日志函数
void Write_Log(char* FileName,char* FuncName,int line,char *log)
{printf(FileName :%s, FuncName: %s, line: %s, log:%s,)
}
数组:一组相同类型数据类型的数据集合
int a[sum] sum:数组容量 0-n ps:a[10] 0-9 不能包括10
数组作为参数被传递时参数被传递时,会被弱化成指针
内存大小为8