今天的面试题,大家讨论一下!
第一题:
/*
typedef struct _mf
{
int a ;
int b ;
char c ;
int d ;
}mf ;
在vc下默认设置时输出多少?
int main(int argc, char* argv[])
{
do
{
cout << &(((mf*)0)->d)<<endl ;
} while(0);
return 0;
}
*/
第二题
/*
class CA
{
int a ;
~CA(){}
};
class CB
{
int b ;
virtual ~CB(){}
};
int main()
{
cout << sizeof(CA)-sizeof(CB) ? 1 : 0 <<endl ;
}*/
/*
第三题
把Fun转为非递归
void Fun(int *n , int nn)
{
if(nn==0)
return ;
for(int i = 0 ; i<nn-1 ; ++i)
{
if(n[i]>n[i+1])
{//一下几行代码具体的记不起了
n[i] += n[i+1] ;
n[i+1] = n[i] - n[i+1] ;
n[i] -= n[i+1] ;
}
}
Fun(n+1 , nn-1) ;
}
一下是我的答案,不过他要求高效率,不知道还什么高效方法?
void Fun2(int *n , int nn)
{
for(int i=0 ; i<nn-1 ; ++i)
for(int j=i ; j<nn-1 ; ++j)
if(n[j]>n[j+1])
{
n[j] += n[j+1] ;
n[j+1] = n[j] - n[j+1] ;
n[j] -= n[j+1] ;
}
}
*/
第四题:
在c下实现两个数的交换,模拟c++的模板功能
一下是我的答案,不过他要求高效率,不知道还什么高效方法?
void Ex(void *a , void *b , int type_len)
{
char *pa = (char*)a ;
char *pb = (char*)b ;
for(int i=0 ; i<type_len ; ++i)
{
*(pa+i) += *(pb+i) ;
*(pb+i) = *(pa+i) - *(pb+i) ;
*(pa+i) = *(pa+i) - *(pb+i) ;
}
}
int main()
{
int a = 1 ;
int b = 2 ;
Ex((void*)&a , (void*)&b , sizeof(a)) ;
cout <<a<<" "<<b <<endl ;
}
*/
第五题:
输出一个整数的2的指数和表达式
一下是我的答案,不过他要求高效率,不知道还什么高效方法?
/*
void OutPutEx(int num)
{
int count ;
int result ;
while(num>0)
{
count = 0 ;
result = 1 ;
while(result<=num)
{
result *= 2 ;
++count ;
}
if(result>num)
{
result /= 2 ;
--count ;
}
num -= result ;
if(num!=0)
cout<<2<<"^"<<count<<"+" ;
else
cout<<2<<"^"<<count<<endl ;
}
}
int main()
{
int a = 13 ;
OutPutEx(a) ;
return 1 ;
}
*/
问题点数:0、回复次数:25Top
1 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-04-05 23:47:03 得分 0
upTop
2 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-04-05 23:50:05 得分 0
第五题:
输出一个整数的2的指数和表达式
取这个数的最低为,然后右一位,再取这个数的最低位,如此下去Top
3 楼cutenoob(cute )回复于 2006-04-05 23:57:51 得分 0
顶下....Top
4 楼quanbaoxiao(永不言败)回复于 2006-04-06 00:26:07 得分 0
第五题经sms88提示改进如下,不知道还有没有什么方法?
void OutPutEx(int num)
{
int count = 0 ;
int len = sizeof(num)*8 ;
while(--len)
{
if(num&1)
if(num>>1)
cout<<2<<"^"<<count<<"+" ;
else
cout<<2<<"^"<<count ;
num >>= 1 ;
++count ;
}
}
Top
5 楼fdimim(猿莫求愚√))回复于 2006-04-06 01:22:54 得分 0
第二题是通不过编译的Top
6 楼fdimim(猿莫求愚√))回复于 2006-04-06 01:30:52 得分 0
第四题既然知道内存地址和长度,用memcpy更快吗?Top
7 楼tianrolin(睡不醒还睡)回复于 2006-04-06 01:49:41 得分 0
To:fdimim(一百零一步||)
第二题在sizeof(CA)-sizeof(CB)? 1 : 0 外面加上一对括号就能通过编译了.
程序输出1,对虚函数的概念还比较模糊,期待强人给个解释。Top
8 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:11:44 得分 0
CB前面多了个虚拟函数地址指针Top
9 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:16:13 得分 0
第四题
if里面本来是用异或来做的。类似下面,但是具体不是很记得了。
n[j] ^= n[j+1] ;
n[j+1] ^= n[j] ;
n[j] = n[j+1] ;
我觉得if里面的代码应该影响不大,递归和非递归应该都是一样的直接copy过来就是了
第二个for应该是for(int j=i ; j<nn-1-1 ; ++j)Top
10 楼crescentg(我找不到改昵称的地方了,谁教教我呀)回复于 2006-04-06 09:52:48 得分 0
第一题
对齐的问题
typedef struct _mf
{
int a ; 4
int b ; 4
char c ; 4
int d ; 4
}mf ;
将地址0转换为mf指针
d
Top
11 楼crescentg(我找不到改昵称的地方了,谁教教我呀)回复于 2006-04-06 09:53:30 得分 0
&(((mf*)0)->d)输出d的地址
0向后偏移12个字节
结果0x0000000CTop
12 楼uniuei(学VC呢)回复于 2006-04-06 10:07:57 得分 0
不懂呀,为什么char会占4字节?Top
13 楼thinkinnight(逍遥)回复于 2006-04-06 10:10:53 得分 0
不懂呀,为什么char会占4字节?
----------------------------------
编译器会自动进行字节对齐
Top
14 楼ugg(逸学堂(exuetang.net))回复于 2006-04-06 10:21:35 得分 0
第一题:
12,地址标示应该是0x0CTop
15 楼tfq2002(天涯闲游)回复于 2006-04-06 10:24:51 得分 0
第五题:楼主只要把第一个while 改为if语句就很高效了
第一个while 将造成程序死循环Top
16 楼quanbaoxiao(永不言败)回复于 2006-04-06 10:52:54 得分 0
怎么会死循环呢?num是变的。
这种方法效率不高,还是用移位快。
void OutPutEx(int num)
{
int count = 0 ;
int len = sizeof(num)*8-1 ;
while(--len)
{
if(num&1)
if(num>>1)
cout<<2<<"^"<<count<<"+" ;
else
cout<<2<<"^"<<count ;
num >>= 1 ;
++count ;
}
}
Top
17 楼romanticlife(充满生活的味道)回复于 2006-04-06 12:33:00 得分 0
C++太有意思了。
学习
1Top
18 楼no111(哈里路亚)回复于 2006-04-06 16:14:17 得分 0
第三地莫非是排序??可是有问题啊,笔误?Top
19 楼iamwiner(烛泪)回复于 2006-04-06 18:20:14 得分 0
markTop
20 楼quanbaoxiao(永不言败)回复于 2006-04-06 21:09:53 得分 0
应该是排序,不过原来他是用异或来做的,我记得不是很清楚了,不知道用异或怎么交换两个数。但又好像不是排序来的。当时没注意看,而且那里也不用改的。Top
21 楼pepsi_fei(可乐)回复于 2006-04-06 22:37:29 得分 0
看了这么多高手的程序.获益匪浅.
不知道有没有人能介绍一些学c++的好书?
速成的和提高的.Top
22 楼judely(蓝山|西堤岛|卡布奇诺)回复于 2006-04-07 00:03:09 得分 0
学习`~~Top
23 楼threeleafzerg007(三叶虫)回复于 2006-04-07 01:55:56 得分 0
异或怎么交换两个数,
很简单
int a,b;
a = 1,b = 2;
a^=b;
b^=a;
a^=b;
交换好了Top
24 楼threeleafzerg007(三叶虫)回复于 2006-04-07 01:58:00 得分 0
第二题,原来是用递归实现冒泡排序Top
25 楼ErrorBox(天知道)回复于 2006-04-07 02:14:41 得分 0
学习中!Top




