谢谢大家帮忙,我也在考虑中,交流下吧,每题30分:]来者有分
1.
反转一个字符
写一个函数,反转一个无符号字符变量x(unsigned char x ),并且把结果保存在无符号字符变量y中.
这种反转处理应该是这样的:
                     x = 10101010 (二进制) 
                     x 反转后 = 01010101 (二进制) (本人想用除法试试看)
2
反转一个链表
写一个程序,反转一个链表.
链表中的元素,数据结构如下:
typedef struct {
int value; 
ELEMENT *next; 
} ELEMENT; 
现在,我们得到一个有限长度的链表,和三个指针 P1, P2, P3,它们都指向链表的头.你只能使用这三个指针去反转这个链表,而不能申请任何更多的内存.3 
如何修改下面的程序,以避免在特定类型的计算机体系结构中引起严重的运行时问题.??    void main () ???
    { 
        union u { 
            unsigned long ip_addr; 
            unsigned char ip[4]; 
        } ip; 
        int i; 
        ip.ip_addr = 0x12345678; 
        *(unsigned short *)(&(ip.ip[1])) = 0x6789; 
        printf ("ip = %d", ip.ip[0]); 
        for (i = 1; i < 4; ++i) { 
            printf (".%d", ip.ip[i]); 
        } 
        printf ("\n"); 
    } 
(本人不明白:{,会有题中所述情况发生?)

解决方案 »

  1.   

    哪来的题目? 呵呵, 不会是你的作业吧?我不要答了, 只告诉你 第三题会出现数据未对齐问题, 有些 CPU 上, 确实会产生运行时问题
      

  2.   

    在alpha cpu上 会出现数据未对齐问题;使用Algin宏(好像写错了,查一下MSDN)即可
      

  3.   

    第二题:(假设有3个或3个以上的结点)
      p2 = p1->next;       // p2 指向节点2
      p3 = p1->next->next; // p3 指向节点3
      p1->next = NULL;
    do{
      p2->next = p1;
      p1 = p2;
      p2 = p3;
      p3 = p3->next;
    }while(p3);
    p3->next = p2;
      

  4.   

    有个笨办法,但是能得到正确的结果:
    void main()
    {
      unsigned char x='A';
    unsigned char y=0; for(int i=7; i>=0;i--)
    {
    unsigned char temp = x;
    temp &= 1;
    temp <<= i;
    y += temp;
    x >>= 1;
    } printf("%d", y);
    }输出130,二进制就是1000 0010(A 的二进制表示是 0100 0001)