c语言基本函数

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++)!='\0');
 
 return des;
 
}
 
//while((*des++=*source++));的解释:赋值表达式返回左操作数,所以在赋值'\0'后,循环停止。

6.计算字符串实际长度

strlen

int strlen(const char* str)
{
   assert( str != NULL );
   int len;
  whle(*str++ != ‘’)len++return len;         
}

 

7.sizeof()

返回的是变量声明后所占的内存数

原型:无

8.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---------

posted @ 2017-03-14 10:31  瘋耔  阅读(340)  评论(0编辑  收藏  举报
跳至侧栏