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

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

lua语言 面试题_计算机


面试题一:

编写一个函数将一个字符串倒置,即将“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水平…