今天的面试题,大家讨论一下!
第一题:
/*
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、回复次数:18Top
1 楼cunsh(村少)回复于 2006-04-05 23:41:29 得分 0
markTop
2 楼ares0906(bupt_ares)回复于 2006-04-06 01:25:34 得分 0
第一题9
第二题1Top
3 楼cattlenzq(吃狼的豆腐(不要给分了,散起来真麻烦!))回复于 2006-04-06 01:32:38 得分 0
第一题是 12 因为输出的是类内偏移地址,VC下4字节对其,所以 b+c+d=12
第二题中间是 ‘-’?那就是不相等,因为有vptr,在vc下两个差了4
第三题不知道题到底对不先扔那
第四题我能想起来的最快的,或者换成宏定义能更快一点,不过太难认
#include <memory.h>
#include <stdio.h>
void change(void* a,void *b,int type_len)
{
void* tmp=malloc(type_len);
memcpy(tmp,a,type_len);
memcpy(a,b,type_len);
memcpy(b,tmp,type_len);
}
int main()
{
int x=1;
int y=4;
change((void*)&x,(void*)&y,sizeof(int));
printf("x=%d, y=%d",x,y);
}
第五题 32位机子可以这样写(输出的时候‘+’整的我吐血。。。)
#include<iostream>
using namespace std;
void OutPutEx(int num)
{
cout<<num<<"=";
int count=15;
bool first=true;
do
{
if(num&0x8000)
{
if(first)
first=false;
else
cout<<'+';
cout<<2<<'^'<<count;
}
--count;
}while(num<<=1);
}
int main()
{
int a;
cin>>a;
OutPutEx(a) ;
return 0;
}Top
4 楼L_BOY()回复于 2006-04-06 01:40:54 得分 0
第一题我运行结果是0000000c
不知道是为什么Top
5 楼L_BOY()回复于 2006-04-06 01:59:39 得分 0
每三题下面一段代码就是将n[j]与n[j+1]交换
n[j] += n[j+1] ;
n[j+1] = n[j] - n[j+1] ;
n[j] -= n[j+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])
{
int temp = n[j];
n[j] = n[j+1] ;
n[j+1] = temp;
}
}
Top
6 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:15:38 得分 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
7 楼citywanderer2005(流浪狗)回复于 2006-04-06 09:53:50 得分 0
第三题楼主用的是冒泡排序,难道他要你用别的排序方法?Top
8 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:59:33 得分 0
他要求考虑效率,不过我只能写出冒泡,但其效率不高Top
9 楼yayageyaya(牙牙个牙呀)回复于 2006-04-06 10:54:13 得分 0
第一题这一句没懂
什么意思啊?
&(((mf*)0)->d)Top
10 楼f9941220(无虚)回复于 2006-04-06 11:14:49 得分 0
第一题:答案12
分析:
typedef struct _mf
{
int a ;
int b ;
char c ;
int d ;
}mf;
0转换为mf结构,地址((mf*)0)->a的0x0000
b的地址+4
c的地址+4
d的地址+4(考虑对齐方式)
4+4+4=12
Top
11 楼LiHubei(lhb)回复于 2006-04-06 11:31:48 得分 0
markTop
12 楼cattlenzq(吃狼的豆腐(不要给分了,散起来真麻烦!))回复于 2006-04-06 13:05:12 得分 0
to :L_BOY()
第一题我运行结果是0000000c
不知道是为什么
—————————————
c 就是10进制的12啊Top
13 楼cattlenzq(吃狼的豆腐(不要给分了,散起来真麻烦!))回复于 2006-04-06 13:20:09 得分 0
第三题主要是化非递归,所以感觉其他方面不能改,所以效率不会提升很厉害,把数组从小到大排序,方法还是很多的,STL里面实现应该算比较有效率的了吧Top
14 楼quanbaoxiao(永不言败)回复于 2006-04-06 21:07:44 得分 0
顶一个Top
15 楼cg5353(努力学习中)回复于 2006-04-07 17:21:15 得分 0
第四题的result *= 2 ;可以换成result << 1;Top
16 楼oo(为了名副其实,努力学习oo技术ing)回复于 2006-04-07 17:32:07 得分 0
第四题:
在c下实现两个数的交换,模拟c++的模板功能
#define swap(type,a,b) \
{ type tmp; tmp=a;a=b;b=tmp;}Top
17 楼steepriver()回复于 2006-04-07 17:41:50 得分 0
顶Top
18 楼stonepeter(笨笨石头.NET_从公务员转身成为了程序员)回复于 2006-04-11 16:23:52 得分 0
建议楼主把结果整理一下,然后结贴吧Top




