Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191215
  • 博文数量: 26
  • 博客积分: 2031
  • 博客等级: 大尉
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-10 22:13
文章分类

全部博文(26)

文章存档

2015年(1)

2013年(1)

2012年(1)

2011年(1)

2010年(17)

2009年(5)

我的朋友

分类: C/C++

2009-12-19 23:53:44

1. When computing the square root of 2 by one variant of Newton's method, you were surprised to find that the result printed was 1.5. What's the mistake?

#include

#define abs( x ) ((x) >= 0 ? (x) : -(x))



double sqrt( double y )

{

    double x = 1.0;             /* initial estimate */

    int error;

 

    if( y <= 0 ) return 0;      /* ensure positive value */

 

    while( abs( error = y - x * x ) > .0005 )

        x = x + error / (2*x);  /* adjust estimate */

 

    return x;

}

 

int main()

{

    printf( "sqrt(%d) = %8.3f\n", 2, sqrt(2) );

    return 0;

}

 


2. You want to calculate the 16 bits crc for first 3 members (serial_number,  data, and hw_id) of nvram. Instead, you get unexpected result. You know for sure that crc16()is correct. What is the mistake?

 

#include

#include

 

typedef unsigned short uint16;

typedef unsigned long uint32;

typedef unsigned char uint8;

 

uint16 crc16(char *p, int size); /* calculate 16 bits crc */

 

typedef struct

{

    uint32   serial_number;   /* 4 bytes serial number */

    uint8    data[16];     /* 16 bytes data */

    uint32   hw_id;    /* 4 bytes  hardware id*/

    uint16   crc16;           /* 2 bytes crc16 */

} nvram;

 

nvram nv;

 

int main()

{

     uint8  i;

 

     memset(&nv, 0x0,sizeof(nv));

    

 

     /* assign serial number */

     nv.serial_number = 0x11112222;

  

     /* assign data */

     for(i = 0; i < sizeof(nv.data); i++)

        nv.data[i] = i;

   

     /* assign hardware id */

     nv.hw_id= 0x00110005;

 

     /* calculate crc16 for serial_number, data, and hw_id */

     nv.crc16 = crc16((char *)&nv, sizeof(nv)-sizeof(nv.crc16));

     return 0;

 

}




3. The function, count_vowels(), which is intended to count the vowels in the input string. When running the program, it is taking a long time to do so. Can you spot the difficulty?

 

int count_vowels( char *s )

{

    int sum = 0;

    for(;;)

    {  

        switch( *s++ )

        {

        case'a':

        case'e':

        case'i':

        case'o':

        case'u':

        case'A':

        case'E':

        case'I':

        case'O':

        case'U':

            sum++;

            continue;

        default:  

            continue;

        case'\0':

            break;

        }

    }

    return sum;

}

 

int main(void)

{

      count_vowels("abcdefghijklmnop");

      return 0;

}




 

4. A programmer wrote the following function in an embedded system. Everything works fine until compiler's optimization option is turned on. What are the possible reasons ?

 

// io_reg is a memory-mapped IO register

char send_ack()

{

    extern char *io_reg;

 

    // Wait until the device is ready

    while( *io_reg == 0 );

   

    // write 'A', 'C', 'K' to the register

    *io_reg = 'A';

    *io_reg = 'C';

    *io_reg = 'K';

           

    // Read the status from the register

    // and return the status to caller

    return (*io_reg);

}


 

5. The programmer expected the test for equality to be true, instead, most compilers test this as not equal. Why?

#include

#include

int main()

{

    Const double three = 3.0;

    double x, y, z;

 

    x = 2 / three;

    y = 5 / three;

 

    z = 7 / three;

 

    if( x + y == z )

        printf("2/3 + 5/3 == 7/3 \n");

    else

        printf("2/3 + 5/3 != 7/3 \n");

   

    return 0;

}




 

6.  Why does this program say that the power, and LED is OFF, when we just turned it ON?

#include

 

typedef struct

{

    int power:1;

    int fan:1;

    int led:1;

} system;

 

static system s;

 

bool is_power_on()

{

    if( s.power > 0 )

        return true;

    else

        return false;

}

bool is_fan_on()

{

    if( s.fan > 0 )

        return true;

    else

        return false;

}

bool is_led_on()

{

    if( s.led > 0 )

        return true;

    else

        return false;

}  

int main()

{

    s.power = 1;

    s.fan= 0;

    s.led = 1;

 

    if( is_power_on() )

        printf( "power is ON\n" );

    else

        printf( "power is OFF\n" );

 

    if( is_fan_on() )

        printf( "fan is ON\n" );

    else

        printf( "fan is OFF\n" );

 

    if( is_led_on() )

        printf( "led is ON\n" );

    else

        printf( "led is OFF\n" );

   

    return 0;

}

阅读(1491) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

shawnrei2012-11-02 13:50:57

答案是什么啊?