美文网首页
C语言面试题-这些简单的你能很快的写出来吗?

C语言面试题-这些简单的你能很快的写出来吗?

作者: 嗯哼_9793 | 来源:发表于2019-01-17 15:26 被阅读0次

    在职场上,面试已经成了我们经常讨论的一个话题,但是当我们在求职面试的时候总是会遇到各种问题,在这里我就给大家讲解一些C语言的面试题!

    面试题一:

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

    分析:

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

    Exp:

        void InvertStr(char *str)

        {

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

            char *head;

            char *chTemp;

            if(NULL == str)

              {

                   return ;

              }

              head=str;

              chTemp=str;

             while('\0' != *str)

                 {

                      str++;

                      i=i+1;

                   }

              while(0 != i)

                {

                    str--;

                    *chtemp=*str;

                     i--;

                    chTemp++;

                 }

              chTemp++;

             *chTemp='\0';

             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 >>1) & (0x01) )

                                   i++; 

                  }

                return  i ;

          }

    其实第二种方法可以更简单,大家看看怎么个简单法?

    有的人可能会用第三种方法:进行与0相与。我认为这样严格来说不能算第三种方法,我认为那只是第二种方法的延伸而已。

    面试题三:

              请编写一个 C 函数,该函数将给定的一个字符串转换成整数。

    分析:

           将字符串转换成整数,那么我们需要进行的工作是将字符串一个字符一个字符的剥离出来,然后才能进行数据的转换,

    这个其实也和scanf函数一样,因为在scanf函数读入的是文本流,就是将读入的字符都认为是字符,即使输入的是123,同样也

    需要进行转换。

    Exp:

         我们姑且简单的将字符串认为会转化为正整数,负数的留给大家讨论吧。并且认为如果输入的字符串是“123”,那么输出的应该也是

    123(int型)。

         unsigned  int  StrToInt(const  char * source)

          {

              unsigned int i;

              unsigned int j;

              char *pTemp;

              if(NULL==source)

                  {

                    return 0;

                  }  

               while('\0' != *pTemp)

                 {

                  j= *pTemp - 48;

                  i=j+i*10;

                  pTemp++;

                  }

              return i;

          }

    面试题四:

          请编写一个 C 函数,该函数将给定的一个整数转换成字符串。

    分析:

          这个题目和上面的题目的问题刚好相反,因此可以借鉴上面题目的处理方法来进行处理。

          void IntToStr(const int source,char *target)

          {

              int i;

              int j;

              if(0==source)

                  *target=‘\0’;

              i=source;

              do 

              {

                  j=i % 10; 

                  *target=j+48; 

                  target++;

               }while(0 != (i=i/10) )

            InvertStr(target);

          }

        以后会不定期的对C的面试题进行解读,希望借此可以增加自己的见识,也能提高自己的C水平........

    (在学习C/C++或者想要学习C/C++可以加我们的学习交流QQ群:712263501群内有相关学习资料)

    相关文章

      网友评论

          本文标题:C语言面试题-这些简单的你能很快的写出来吗?

          本文链接:https://www.haomeiwen.com/subject/exuidqtx.html