在職場上,面試已經(jīng)成了我們經(jīng)常討論的一個(gè)話題,但是當(dāng)我們在求職面試的時(shí)候總是會遇到各種問題,在這里我就給大家講解一些C語言的面試題胎署!
面試題一:
???? 編寫一個(gè)函數(shù)將一個(gè)字符串倒置,即將“abc”變?yōu)椤癱ba”窑滞。
分析:
???? 這樣的問題顯然涉及到char型指針的運(yùn)算琼牧。
Exp:
??? void InvertStr(char *str)
??? {
?????? ? long int i=0;??? //估計(jì)這么長的字符串應(yīng)該夠用了恢筝,如果實(shí)在不行只能用float的數(shù)據(jù)來試驗(yàn)了。
??????? 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;
??? }
面試題二:
????? 請編寫一個(gè)?C?函數(shù)巨坊,該函數(shù)給出一個(gè)字節(jié)中被置?1?的位的個(gè)數(shù)撬槽,并請給出該題的至少一個(gè)不同解法。
分析:
???? 假設(shè)數(shù)是:0000_0001; 當(dāng)這個(gè)數(shù)被解釋為無符號數(shù)的時(shí)候趾撵,如果對2求模侄柔,那么得到的結(jié)果是多少呢?
很顯然得到的結(jié)果是1占调; 而如果是0000_0010,這個(gè)怎么樣呢暂题? 對2求模得到的是0; 但是如果我們往右進(jìn)行
移位的話究珊,那么結(jié)果是什么呢薪者?
Exp:
實(shí)現(xiàn)一:
???? 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 取试;
??? ? }
實(shí)現(xiàn)二:可以利用按位與進(jìn)行判定
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 想括;
??? ? }
其實(shí)第二種方法可以更簡單陷谱,大家看看怎么個(gè)簡單法?
有的人可能會用第三種方法:進(jìn)行與0相與瑟蜈。我認(rèn)為這樣嚴(yán)格來說不能算第三種方法,我認(rèn)為那只是第二種方法的延伸而已渣窜。
面試題三:
????????? 請編寫一個(gè)?C?函數(shù)铺根,該函數(shù)將給定的一個(gè)字符串轉(zhuǎn)換成整數(shù)。
分析:
?????? 將字符串轉(zhuǎn)換成整數(shù)乔宿,那么我們需要進(jìn)行的工作是將字符串一個(gè)字符一個(gè)字符的剝離出來位迂,然后才能進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,
這個(gè)其實(shí)也和scanf函數(shù)一樣详瑞,因?yàn)樵趕canf函數(shù)讀入的是文本流掂林,就是將讀入的字符都認(rèn)為是字符,即使輸入的是123坝橡,同樣也
需要進(jìn)行轉(zhuǎn)換泻帮。
Exp:
???? 我們姑且簡單的將字符串認(rèn)為會轉(zhuǎn)化為正整數(shù),負(fù)數(shù)的留給大家討論吧计寇。并且認(rèn)為如果輸入的字符串是“123”锣杂,那么輸出的應(yīng)該也是
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;
????? }
面試題四:
??????請編寫一個(gè)?C?函數(shù)元莫,該函數(shù)將給定的一個(gè)整數(shù)轉(zhuǎn)換成字符串赖阻。
分析:
????? 這個(gè)題目和上面的題目的問題剛好相反,因此可以借鑒上面題目的處理方法來進(jìn)行處理踱蠢。
????? 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的面試題進(jìn)行解讀,希望借此可以增加自己的見識稼虎,也能提高自己的C水平........
(在學(xué)習(xí)C/C++或者想要學(xué)習(xí)C/C++可以加我們的學(xué)習(xí)交流QQ群:712263501群內(nèi)有相關(guān)學(xué)習(xí)資料)