第一题:
/*
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 ;
}
*/
/*
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 ;
}
*/
计算2的指数其实就是 1<<指数;
那直接用memcpy不是就行了?
0强制转换为结构指针,取其成员d的地址? 为什么会是12? 解释下.