C语言总结_03

21.printf()的返回值为打印字符的个数。
在这里插入图片描述
22.头文件写法:

#ifndef  __ADD_H__
#define  __ADD_H__
int  ADD(int x,int y);
#endif

23.递归:

//求阶乘
int  factorial(int n){
	if(n<=1)      //递归出口
		return 1;
	else
		return n*factorial(n-1);
}
//斐波那契数列:指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)。(后一个数为前两个数之和)
//求第n个斐波那契数
int  Fib(int n){
	if(n==0)
		return  0;
	else  if(n==1 || n==2)
		return  1;
	else
		return  Fib(n-1)+Fib(n-2);
}

//非递归形式
int Fib(int n){                   
	int a = 1, b = 1;                  
	int c = 1;                          
	while (n > 2){                         
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

24.在定义二维数组时,行下标可以省略,列下标不能省略。 如:int arr[][4];

25.数组作为函数参数时,在该函数内部不能计算数组的长度。

int bubble_sort(int arr[]){
	int len = sizeof(arr)/sizeof(arr[0]);  
	//因为传递的是数组的首元素地址,计算出的长度4/4=1 byte
	......
}

26.数组名:

int arr[10] = {0};
printf("%d\n",sizeof(arr));
//输出的结果是∶ 40 

1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。

2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

在这里插入图片描述
27.移位操作编译器默认算术移位(最高位补符号位)。

28.&:按位与 、|:按位或 、^:按位异或 (操作数必须是整数)

29.不使用临时变量交换两个数的值:

//加减法(可能会溢出)
void swap(int &x,int &y){
	x=x+y;
	y=x-y;
	x=x-y;
}

//异或
void swap(int &x,int &y){
	x=x^y;
	y=x^y;
	x=x^y;
}

30.求一个存储在内存中的整数(补码形式存储)的二进制形式中1的个数:

//模2除2(只能计算正整数)
void count_binary(int num){
	int count=0;
	while(num){
		if(num%2==1)
		count++;
		num/=2;
	}
}
//移位
void count_binary(int num){
	int count=0;
	for(int i=0;i<32;i++){
		if((num>>i)&1==1)
			count++;  
	}
}

//优化
void count_binary(int num){
	int count=0;
	while(num){
		count++;
		num=num&(num-1);
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值