1.交换两个变量的值
int a = 10;
int b = 20;
(i)定义第三个变量作为中间变量 来完成交换过程
int c = 0;
c = a;
a = b;
b = c;
(ii)两个变量运用加法完成相互之间值的交换
a = a+b;//a =30;
b = a-b;//30-20 = 10;b= 10;
a = a-b;//30-10 = 20;a = 20;
(iii)运用位运算符^按位异或(二进制位相同时异或=0;不同异或=1)
a ^= b; //01010 ^ 10100 = 11110;
b ^= a;//10100 ^ 11110 = 01010 = 10;
a ^= b;//11110 ^ 01010 = 10100 = 20;
2.最大公约数和最小公倍数
以 72 64 和32 72为例,通过计算可以得知其最大共约数为8,最小公倍数为576为288;7264 = 4608,3272=2304;
(i)求余算法
72%64 = 8
64%8 = 0 ==》 8
32 72
32%72 = 32
72%32 = 8
32%8 == 0 ==》 8
(ii)‘减’ 算法
72-64=8
64-8=56
56-8=48
48-8=40
40-8=32
32-8=24
24-8=16
16-8=8
8-8 = 0 ==>8
72 - 32=40
40 - 32=8
32 - 8=24
24 - 8=16
16 - 8=8
8 - 8 =0 ==>8
另外,关于最小公倍数,因为最小公倍数=两数之积/最大公约数,所以最下公倍数可以引用其上。
3.一维数组和二维数组的初始化
(1)一位数组
数组名[数组长度] = {元素};
int a[5]=0; //错误使用。
int a[5]={1,2,3,4,5}; // 直接指定数组各个元素
int a[5]={1,2,3,4,5,6,7,8,9}; //元素个数>数组长度
int a[5]={1,2,3}; //元素个数<数组长度
int a[5]={0}; // 初始化0,规范用法
int a[5]={}; // 初始化0,不建议使用
int a[ ]={1,2,3,4,5}; //不指定长度,会根据给定元素个数定义数组长度
int a[9]={ [2] = 1,[6] = 3,[9] = 9}; //指定下标给对应位置赋值
(2)二维数组
数组名[二维长度][一维长度];
int a[3][4] = {{ 1,2,3,4},{4,5,6,7},{7,8,9,10}};//直接指定数组各个元素
int a[3][4] = {{0}};// 初始化0,规范用法
int a[3][4] = {{ }}; // 初始化0,规范用法
int a[3][4]= { }; // 初始化0,规范用法
int a[3][3] = {1,2,3,4,5,6,7,8,9}; ={{1,2,3},{4,5,6},{7,8,9}}
int a[3][3] = {1,2,3,4,5,6,7,8,9};
int a[3][3] == {{1,2},{4},{7,8}};
int a[3][4]= { [0][0]=1,[2][2]=3};//指定下标赋值元素
4.传参
一维数组传参:
func(数据类型 数组名[],size_t len)
size_t 表示数组长度不定
二维数组传参:
func(数据类型 数组名[][一维长度],size_t len)
一维长度必须加。
在调用时,实参都是 数组名。
5.变量修饰符 static
static:静态的
(1)static修饰局部变量、块变量
a.存储位置:局部变量的存储位置发生了变化,由栈区变为全局区
b.作用域:没有变化
c.生命周期:静态局部变量的生命周期为整个程序
静态局部变量的声明定义语句在整个程序中只执行一次
静态局部变量的值不会随着函数的调用而消失
(2)static修饰全局变量
c.作用域: 静态全局变量只能在本文件中访问(禁止了多文件编程使用该变量)
(3)static修饰函数
表示该函数只能在本文件中调用
内存中只有一份拷贝,节省内存
6.自增减
++ - -
int z = x++; // z=x; x=x+1;
int z = ++x; // x=x+1; z=x;
前加加(减减) 先自增(减),然后再运算
后加加(减减) 先运算,然后再自增(减)
int y = x++ + ++x;
x = x++ + ++x;
7.交换
a.交换两个变量的值
void swapInt(int *pa,int *pb){
int pm = *pa;
*pa = *pb;
*pb = pm;
}
b.交换两个字符指针的值,二级指针运用
void swapPoint(char **ps,char **ts){
char gs = **ps;
**ps = **ts;
**ts = gs;
}
c.交换两个字符串
void swapPointChar(char **ps,char **ts){//二级指针
char *gs = NULL;
gs = *ps;
*ps = *ts;
*ts = gs;
}
void swapChar(char *st1,char *st2){//一级指针
char ps[10]; //看情况改变数组长度
strcpy(st1,st2);
strcpy(st2,ps);
}