首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

三个C面试题!没有搞懂,该怎么解决

2012-03-16 
三个C面试题!!没有搞懂三个找错题试题1.#defineMAX255charpt[MAX+1]char

三个C面试题!!没有搞懂
============三个找错题===================
试题1.
#define   MAX   255
char   pt[MAX+1];

char   ch;
for(ch=0;ch <=MAX;ch++)
        pt[ch]=ch;
for(ch= 'A ';ch <= 'Z ';ch++)
        pt[ch]=ch+ 'a '- 'A ';
----------------------------
这个完全没有看懂错在那里


试题2.
char   ch;
if(ch&0xof!=0xo8)
{
}
============================================
我理解为,&是取地址符号吧,
他的意思应该是&&吧


试题3.
void   *fun(void   *p,int   size,char   ch)
{  
    char   *   pt=(char   *)p;
    while(--size)
    {
          if(*pt==ch)
              return   pt;
    }
    return   NULL;

}
======================================
我理解应该是返回值的问题
但具体问题我也不太确定


希望高手们指点



[解决办法]
试题1:ch最大值也就128,for(ch=0;ch <=MAX;ch++)这句就是循环了;
试题2:ch&0xof!=0xo8,按位与的话不可能出现结果为0x08的
因为0001 0000 与上任何一个数都不会出现xxxx 1xxx这种情况的;
试题3:
while(--size)
{
if(*pt==ch) //这句什么意义???,--size后这句又不会有变化的,是否写错了?
return pt;
}
要是pt为null,咋办
[解决办法]
试题2.
char ch;
if(ch&0xof!=0xo8)
{
}
================
这个是优先级的问题
!=优先级比按位与&高
会先执行0xof!=0xo8肯定不是想要的结果
多加一个括号就行了
if ((ch&0x0f)!=0x08)
[解决办法]
试题3. 如果是这样呢
void *fun(void *p,int size,char ch)
{
char * pt=(char *)p;
while(--size)
{
if(*pt==ch)
pt++;
return pt;
}
return NULL;

}

這樣題目還是不對。

首先pt++;位置放錯了

其次不應該返回pt.

而且--size使得查詢少了一次。
[解决办法]
第一题:
char ch;
在不同的编译器会解释成不同的类型(unsigned char, 或者有符号的),不管是哪种情况都不可能超过255的,因此第一题会出现死循环。避免死循环的方法就是定义成 int ch;

第二题:
if(ch&0xof != 0xo8) 类型是未定义的。
解决方法是if((char)ch&0x0f != (char)0x08);

第三题:
while(--size) //没有判断最后一个。
解决方法是while(size--)

[解决办法]
试题3.
void *fun(void *p,int size,char ch)
{
char * pt=(char *)p;
while(--size)
{
if(*pt==ch)
return pt;
}
return NULL;

}
======================================
不管这个题的意思,如果传入的size是一个负数,那么while循环就是一个无限循环,程序死定了.
[解决办法]
试题3 return返回的类型和函数要求的类型不一致
[解决办法]
char类型长度为一个字节(8bit),所以无论是不是unsigned char,都不会超过255.而第一题循环要结束,ch必须取到256。因此第一题是一个死循环。

热点排行