C语言经典问题

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);
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值