1. 用宏定义写出swap(x,y)
#define swap(x, y) x = x + y; y = x - y; x = x - y;
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
例子:
1,2,3,4,5,6,7,7,8,9
1,2,3,4,5,6,7,8,9,10
那么7就是a[6],找到a[6]的位置,
也就是:10 - (10-7)-1;
int *do_dup(int a[],int N) //未经调试 { int sum = 0; int sum2; for(int i=0;i<N;++i) { Sum+=a[i]; } Sum2 = (1+N)*N/2; Return &a[N-(sum2-sum)-1]; }
3.判断2的整数次幂:
int fuc(int i) { return ((i > 0) && ((i & (i - 1)) == 0));//2的n次幂肯定是大于0的 }
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001
unsigned int intvert(unsigned int x,int p,int n) //假定p=4,n=3 { unsigned int _t = 0; unsigned int _a = 1; for(int i = 0; i < n; ++i)//循环的目的主要是-t { _t |= _a; //位或 _a = _a << 1; //其实这样的写法还是很经典的;! } _t = _t << p; //转换后_t变为1110000 x ^= _t; /异或,将原来的位取反 return x; }
5.strcpy
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
// //C语言标准库函数strcpy的一种典型的工业级的最简实现。 //返回值:目标串的地址。 //对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。 //参数:des为目标字符串,source为原字符串。 #include <assert.h> //assert where .h #include <stddef.h> //NULL where .h char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) && (source != NULL)); while((*r++ = *source++)!='