C语言面试题-这些简单的你能很快的写出来吗?
C語言面試題-這些簡單的你能很快的寫出來嗎?
在職場上,面試已經成了我們經常討論的一個話題,但是當我們在求職面試的時候總是會遇到各種問題,在這里我就給大家講解一些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(NULLsource)
{
return 0;
}
while(’\0’ != *pTemp)
{
j= pTemp - 48;
i=j+i10;
pTemp++;
}
return i;
}
面試題四:
請編寫一個 C 函數,該函數將給定的一個整數轉換成字符串。
分析:
這個題目和上面的題目的問題剛好相反,因此可以借鑒上面題目的處理方法來進行處理。
void IntToStr(const int source,char *target)
{
int i;
int j;
if(0source)
*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语言面试题-这些简单的你能很快的写出来吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015qq网名
- 下一篇: 各位大影迷,这部电影叫啥。我一直在找