当前位置:编程学习 > C/C++ >>

C语言学习趣事_经典面试题系列_1

这篇文章开始的时候发布于: 2011年06月15日, 22点32分。

     但是由于我本人C语言水平有限, 并且在发布代码的时候没有进行调试, 使得第一个面试题的Exp代码出现错误, 虽然思路上没有错误,

但是有网友跟帖及时纠正了我的错误, 在此对:menggucaoyuan  表示感谢。 感谢他让我明白了一个道理:实践是检验整理的唯一标准。

     在此对由我的随笔引起阅读者的误解表示抱歉。在以后的随笔中我将保证没有经过验证的代码不再往博客园上贴发。

  下面是我已经修正过的代码:


show sourceview sourceprint?01 #include<stdio.h> 

02   

03 void InvertStr(char *str) 

04 { 

05   long int i=0; 

06   char *chTemp; 

07   char *Temp;<BR><BR>   chTemp=str; 

08   

09     while( != *str)   

10      { 

11         str++; 

12         i=i+1; 

13       } 

14    //  printf(" %d ",i); 

15     i=i/2; 

16    // printf(" %d ",i); 

17    while(0 !=i) 

18      { 

19        str--; 

20        *Temp=*chTemp; 

21        *chTemp=*str; 

22        *str=*Temp; 

23        i--; 

24        chTemp++; 

25       } 

26     chTemp++; 

27     } 

28   

29  int main(int argc,char *argv[]) 

30  { 

31      char str1[]="abcdefg"; 

32      char *pstr=str1; 

33      printf("%s",pstr); 

34      InvertStr(pstr); 

35      printf("%s",pstr); 

36      getch(); 

37   

38  }


  


   嘻嘻,有段时间没有搞点有意思的C语言问题了, 今天我们来看一些比较有意思的面试题,欢迎大家来跟帖讨论问题。

   其实,我学习C语言的历史是已经很长了,大一的时候学C, 大学四年, 工作两年多,算起来学习C语言的历史有六年了,虽然自己学习C语言

时间够长,但是我自己的C语言水平一直徘徊在入门级的门外;说个值得自己王婆自卖自夸的事情,那就是大学C语言考试得了个96分,嘿嘿......

    下面进入这次的闲扯.............

面试题一:

     编写一个函数将一个字符串倒置,即将“abc”变为“cba”。

分析:

     这样的问题显然涉及到char型指针的运算。

Exp:

    void InvertStr(char *str)

    {

         long int i=0;    //估计这么长的字符串应该够用了,如果实在不行只能用float的数据来试验了。

        char *head;

        char *chTemp;

        if(NULL == str)

          {

               return 0;

          }

          head=str;

          chTemp=str;

         while( != *str)

             {

                  str++;

                  i=i+1;

               }

          while(0 != i)

            {

                str--;

                *chtemp=*str;

                 i--;

                chTemp++;

             }

          chTemp++;

         *chTemp=;

         str=head;

    }

面试题二:

      请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请给出该题的至少一个不同解法。

分析:

     假设数是:0000_0001; 当这个数被解释为无符号数的时候,如果对2求模,那么得到的结果是多少呢?

很显然得到的结果是1; 而如果是0000_0010,这个怎么样呢? 对2求模得到的是0; 但是如果我们往右进行

移位的话,那么结果是什么呢?

Exp:

实现一:

     unsigned short  CalSetBitNum(const unsigned char input)

     {

          short   i=0;

          short   j;

          unsigned char chTemp;

         chTemp=input;

           for(j=0 ;j<7;j++)

             {

                    i=i+ chTemp % 2;

                    chTemp=chTemp>>1; 

              }

            return  i ;

      }

实现二:可以利用按位与进行判定

unsigned short  CalSetBitNum(const unsigned char input)
     {

          short   i=0;

          short   j;

           short iTemp=input;

           for(j=0 ;j<7;j++)

             {

                    if((iTemp= iTemp >

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,