首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 庆祝拿到offer,帖某著名通信外企笔试题,欢迎大家进来讨论! [已结帖,结帖人:pengpenghuo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengpenghuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-18 15:45:29 楼主
    #include <iostream>
    using namespace std;

    //1 题干是2BYTE对齐 问输出结果
    struct A
    {
    char a:4;
    int b; // int 是 2 bytes
    unsigned long c;
    };

    void main()
    {
    printf("%d ", sizeof(A)); // 我写的8  2+2+4
    }


    //2 填句 输出结果
    int* testFun (int *A)
    {
    A+=2;
    printf("%d ",*A);
    return A;
    }

    void main()
    {
    int* (*pFun) (int*); //要求填此句
    int A[] = {1,3,5,7,9,0};
    pFun = testFun;
    pFun(pFun(A));
    }// 5 9


    //3 找错
    #define MAX 255
    void main()
    {
    int A[MAX];
    for (int i=MAX; i>=0; --i)
    {
    A[i] = i;
    //printf("%d ",A[i]);
    }

    }// 我写的是开始A[255]就越界了


    //4 写结果和原因
    char* A(void)
    {
    char p[] = "hello world";
    return p;
    }

    char* B(void)
    {
    char* p = "hello world";
    return p;
    }

    void main()
    {
    char* a = NULL;
    char* b = NULL;
    a = A();
    b = B();
    printf("%s",a);
    printf("%s",b);
    }//这个题目有意思,我写的 "乱码hellow world"
    //这个题挺令人回味的,后来在林锐的 <高质量C++程序设计指南>中找到原题.原因是第一个函数字符数组分配在栈中.


    //5 输出结果
    #define MIN(a,b) ((a)>(b)?(b):(a)) //写出这句
    void main()
    {
    int a = 8;
    int b = 9;
    int least = MIN(a++,b);
    printf("%d ", least);
    }//这个题我做错了 哭~~ 应该是9  请高手来解剖


    //6 写结果
    int fun(unsigned int n, int p, int k)
    {
    unsigned int _t = 0;
    unsigned int _a = 1;
    for (int i=0; i <p; i++)
    {
    _t |= _a;
    _a < < 1;
    }
    _t < < k;
    n ^= _t;
    return n;
    }

    void main()
    {
    int result = fun(0b00010001,3,4);
    printf("%b ", result);
    }

    //此程序在VC下无法执行 因为C中没有0b这种表示方法 我写的答案是01100001
    //这个题我感觉是刁,网上有人骂它"贱",似乎也不为过.不过这题考察全面,细心,是道很好的题!
    //关键点是 _a < < 1; 无法移位

    //7 字符串倒置的程序找错
    void main()
    {
    char* scr = "hello, world";
    int len = strlen (scr);
    char* d = NULL;
    char* dest = (char*) malloc (len+1);
    char* s = scr[len];
    d = dest;

    while (len-- != 0)
    *d++ = *s--;
    *d = 0;

    printf("%s",dest);
    }

    //我的修改
    //char* s = &scr[len-1];  我修改时 & 忘记了 要扣分
    /*
    while (len-- != 1)
    *d++ = *s--;
    *d++ = *s;
    *d = 0;
    修改后的代码可以正确执行*/
    //这个题需要细心,否则很难看全

    //8 写代码
    //node* insert(node* ListA, node ItemA) 填函数体
    //我按照头 中 尾 3部分来写 <宝典>上有此题



    寒冬里找工作,实在不易,很幸运的是我在1个多月的时间里就比较顺利的完成了,也许我也该转运了吧.(今年运气太差)
    <宝典>看了2遍,林锐看了1/3.其实这2本书(请恕我管它们叫九阳神功和九阴真经)钻研清楚应该可以无敌.(觉得这个方法有益的给我点分吧 :) )
    感谢我的LP一直默默支持我,让我这么快从Visa rejection的挫败中站起来
    现在跳可能风险很大,去了会被裁吗? May God bless me! Tks for what you have done for me, what you're doing for me, and what you're gonna do for me. Amen
    10  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lsldd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 15:47:331楼 得分:0
    沙发
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xhs_lh04
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 15:50:192楼 得分:0
    恭喜
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fallening
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 15:54:073楼 得分:2
    C/C++ code
    #include <iostream> using namespace std; //1 题干是2BYTE对齐 问输出结果 struct A { char a:4; int b; // int 是 2 bytes unsigned long c; }; void main() { printf("%d ", sizeof(A)); // 我写的8 2+2+4 }


    强悍哦,为什么我用gcc或者icc编译,输出都是16呢?
    难道因为我用的是64位linux??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 15:58:174楼 得分:0
    恭喜
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangyao1986
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 15:59:565楼 得分:0
    我也是刚拿的offer
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dalixux
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:17:416楼 得分:2
    void main()
    {
    char* scr = "hello, world";
    int len = strlen (scr);
    char* d = NULL;
    char* dest = (char*) malloc (len+1);
    char* s = scr[len];
    d = dest;

    while (len-- != 0)
    *d++ = *s--;
    *d = 0;

    printf("%s",dest);
    }
    修改这一句char* s = &scr[len-1]后
    为什么还要修改其它的?VC6 修改后运行正确

    题目很不错。。。。。。你那通信外企叫什么 ?估计我也能去试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyy6210
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:30:257楼 得分:0
    先不看题,gxgx~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyy6210
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:31:188楼 得分:0
    宝典是哪个啊,林锐知道
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WingForce
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:34:079楼 得分:0
    引用 8 楼 yyy6210 的回复:
    宝典是哪个啊,林锐知道

    程序员面试宝典
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyy6210
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:39:2010楼 得分:0
    //5 输出结果
    #define MIN(a,b) ((a)>(b)?(b):(a)) //写出这句
    void main()
    {
    int a = 8;
    int b = 9;
    int least = MIN(a++,b);
    printf("%d ", least);
    }//这个题我做错了 哭~~ 应该是9  请高手来解剖

    ((a++)>b ? b:(a++))

    先判断大小,小,则后者为结果,此时a已经是9了,取之,  参考,不知道理解的对不对~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyy6210
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:40:0311楼 得分:0
    引用 9 楼 WingForce 的回复:
    引用 8 楼 yyy6210 的回复:
    宝典是哪个啊,林锐知道

    程序员面试宝典


    哪里有啊,我也想看看~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cyj626
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:46:3812楼 得分:0
    gx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyy6210
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 16:48:1613楼 得分:0
    while (len-- != 1)
    *d++ = *s--;
    *d++ = *s;
    *d = 0;

    为啥要改这个?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fetag
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 17:21:4914楼 得分:0
    不会是跳进我们这个火坑了吧,汗...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengpenghuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 17:24:5015楼 得分:0

    我当时演绎了一遍,修改为char* s = &scr[len-1]后

    while (len-- != 0) 会使s--越界. 所以我将0改为1  大家可以试试看 我没运行

    引用 13 楼 yyy6210 的回复:
    while (len-- != 1)
    *d++ = *s--;
    *d++ = *s;
    *d = 0;

    为啥要改这个?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wind_breez
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 17:52:2716楼 得分:0
    引用 3 楼 fallening 的回复:
    C/C++ code#include <iostream>usingnamespacestd;//1 题干是2BYTE对齐 问输出结果structA
    {chara:4;intb;//int 是 2 bytesunsignedlongc;
    };voidmain()
    {
    printf("%d",sizeof(A));//我写的8  2+2+4}

    强悍哦,为什么我用gcc或者icc编译,输出都是16呢?
    难道因为我用的是64位linux??

    linux下long,int的长度都是4个字节。这个题的结果得看编译器吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xkyx_cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-11-18 17:56:1617楼 得分:0
    gx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Non_Recursive
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 17:59:0518楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dalixux
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 18:09:1219楼 得分:0
    引用 15 楼 pengpenghuo 的回复:

    我当时演绎了一遍,修改为char* s = &scr[len-1]后

    while (len-- != 0) 会使s--越界. 所以我将0改为1  大家可以试试看 我没运行

    引用 13 楼 yyy6210 的回复:

    while (len-- != 1)
    *d++ = *s--;
    *d++ = *s;
    *d = 0;

    为啥要改这个?


    while (len-- != 1)
    *d++ = *s--;
    执行后 s应该是&scr[-1]
    *d++ = *s
    ANSI C规定不可以对数组首地址 前的地址解引用 我感觉 你可能改错了
    只修改char* s = &scr[len-1]的话 VC6运行正确。

    看了下题目  感觉 LZ运气很好  一般面试C的话 算法什么的都必考。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dalixux
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 19:48:3420楼 得分:0
    晕 看错叻
    while (len-- != 1)
    看成while (len-- != 0)

    失误  失误 手抖了一下
    回去看数据结构了  祝贺 LZ
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengpenghuo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 14:01:5921楼 得分:0
    额 有被BS的感觉 可能笔试是对C本身的考察 而且是嵌入式 所以只考了C本身和一个链表题


    看了下题目  感觉 LZ运气很好  一般面试C的话 算法什么的都必考。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • AK47123456789
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 15:24:5722楼 得分:0
    请高手详解一下第四题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • licry01
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 15:54:3023楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fengxuxing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 16:18:2324楼 得分:4
    C/C++ code
    char* A(void) { char p[] = "hello world"; //在栈中产生内存并将其"hello world"拷贝到p指向的数组中,返回时,数组内存被释放,如果没错,输出应该是不定的 return p; } char* B(void) { char* p = "hello world"; //此处的"hello world"在静态存储区中,永久存在,所以该是输出"hello world" return p; } void main() { char* a = NULL; char* b = NULL; a = A(); b = B(); printf("%s",a); printf("%s",b); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alexwang4
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 16:32:4425楼 得分:0
    无语了,我只想知道楼主是小本还是小硕.这个公司是什么公司?
    第6题答案是16吧.第4题因为数组名地址在栈里,返回时栈收回.static char a[]就可以了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 16:52:4126楼 得分:0
    #define MIN(a,b) ((a)>(b)?(b):(a)) //写出这句
    void main()
    {
    int a = 8;
    int b = 9;
    int least = MIN(a++,b);
    printf("%d ", least);
    }//这个题我做错了 哭~~ 应该是9  请高手来解剖
    这题没意思吧,跟编译器有关系
    别的题挺好玩的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 16:54:0927楼 得分:0
    引用 26 楼 lunarfan 的回复:
    #define MIN(a,b) ((a)>(b)?(b):(a)) //写出这句
    void main()
    {
    int a = 8;
    int b = 9;
    int least = MIN(a++,b);
    printf("%d ", least);
    }//这个题我做错了 哭~~ 应该是9  请高手来解剖
    这题没意思吧,跟编译器有关系
    别的题挺好玩的。

    看错题了。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 16:55:4928楼 得分:0
    #define MIN(a,b) ((a)>(b)?(b):(a)) //写出这句
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    int a = 8;
    int b = 9;
    int least = ((8)>(9)?(9):(9));
    printf("%d ", least);

    system("pause");
    return 0;
    }
    修改 删除 举报 引用 回复