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