程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習趣事_經典面試題系列_1

C語言學習趣事_經典面試題系列_1

編輯:關於C語言

這篇文章開始的時候發布於: 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 >

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved