C语言编程题

1. 把一个字符串逆序。

char* Reverse(char* s)
{
    // p指向字符串头部
    char* p = s ;

    // q指向字符串尾部
    char* q = s ;
    while( *q )
        ++q ;
    q -- ;

    // 交换并移动指针,直到p和q交叉
    while(q > p)
    {
        char t = *p ;
        *p++ = *q ;
        *q-- = t ;
    }

    return s ;
}

2. 数组求和

如果n等于0,则数组的和等于0

如果n不等于0,则数组的和等于n-1个元素之和加上n-1元素的和。

// 数组求和
int sum(int*a, int n)
{
     return n ==0?0 : sum(a, n -1) + a[n -1];
}

 3. 计算一个字节(byte)里有多少为(bit)被置1

int b_check(char x)
{
        int i, counter=0;
        for(i=0; i<8; i++)
        {
                if(1==((x>>i)&1))
                        counter++;
        }
        return counter;
}

 4. 用C语言判断机器是大端模式还是小端模式

void IsBigEndian()
{
 short int a = 0x1122;//十六进制,一个数值占4位
 char b =  *(char *)&a;  //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)
 if( b == 0x11)//低字节存的是数据的高字节数据
 {
  //是大端模式
 }
 else
 {
  //是小端模式
 }
}

 

posted @ 2014-11-23 18:55  Achille·Swn  阅读(142)  评论(0编辑  收藏  举报