您的位置:首页 > 职场人生

《ASCE1885的IT笔试面试题》---0000 0002

2010-07-18 15:20 399 查看
据传是《中软国际2009校园招聘》笔试题(有改动by ASCE1885):
1)Swap two variables without using third variable?
解答:一开始容易陷入误区,认为交换必须通过移动变量来实现,因而少不了要用第三个变量,仔细想想,却有以下几种方法可以实现呢,基本思想是进行代数运算或逻辑上的变换(这里仅以基本内置类型int变量为例):
(1)简单的加法和减法运算:
函数形式:
void swap(int &a, int &b)
{
    a += b;
    b = a-b;
    a = a-b;    
}
宏定义:
#define swap(a, b) a+=b;b=a-b;a=a-b;
 
(2)异或方法,异或的特性是连续跟一个数异或两次得到的是它自身:
函数形式:
void swap(int &a, int &b)
{
         a = a^b;
         b = a^b;  //相当于a连续跟b异或两次,即是a
         a = a^b;  //相当于b连续跟a异或两次,即是b
}
宏定义:
#define swap(a,b) a=a^b;b=a^b;a=a^b;
 
(3)带乘除的方法,此方法效率较低,乘除嘛!
函数形式:
void swap(int &a, int &b)
{
         a = a+b;
         b = a - 2*b;
         a = (a-b)/2;
         b = a+b;
}
宏定义:
#define swap(a, b) a=a+b;b=a-2*b;a=(a-b)/2;b=a+b;
 
2)what is wrong with the call fopen(“C:/newdir/file.dat”, “r”)?
解答:应该改为:fopen("C://newdir//file.dat", "r");
 
3)what is wrong with the following code?
char *p;
*p = malloc(10);
解答:应改为:
char *p;
p = (char*)malloc(10);
 
4)will the following program execute?
void main()
{
         void* vptr = (void*)malloc(sizeof(void));
         vptr++;
}
解答:不会,编译通不过,sizeof不能跟void;同时标准C++禁止对void指针进行增减操作。
 
5)以下程序运行结果是什么?
#include<iostream>
int main()
{
    char a[] = "hello";
    char *p = a;
   
    std::cout<<sizeof(a)<<std::endl;
    std::cout<<sizeof(p)<<std::endl;
    std::cout<<strlen(a)<<std::endl;
    std::cout<<strlen(p)<<std::endl;
   
    system("pause");
    return 0;   
}
 
解答:6 4 5 5,当然是每行一个数了。
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐