搜狗2011笔试题+答案解析

1、下面两段代码中for循环分别执行了多少次?

unsigned short i,j;

for(i=0, j=2; i!=j; i+=5, j+=7)

{}

unsigned short i,j;

for(i=3,j=7;i!=j;i+=3,j+=7)

2、下面程序应该输出多少?

char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };

char **cp[] = { c+3, c+2, c+1, c };

char ***cpp = cp;

 

int main(void)

{

         printf("%s", **++cpp);

         printf("%s", *--*++cpp+3);

         printf("%s", *cpp[-2]+3);

         printf("%s\n", cpp[-1][-1]+1);

         return 0;

}

3、已知程序代码如下:

struct S

{

       void func1(S &);

       void func2(const S&);

       void func3(S&) const;

       void func4(const S&) const;

};

下面哪些能正常执行()

A、makeS().func1(makeS())

B、makeS().func2(makeS())

C、makeS().func3(makeS())

D、makeS().func4(makeS())

4、下列代码的输出为多少?

int main(void)

{

      enum {a, b=5, c, d=4, e};

      enum {h,x, y, z, v=120, w, r=99,s,t};

      return 0;

}

a、c、e、h、x、y、z、w、s、t的值分别是多少?


5、一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:要求具有线性复杂度,不能使用除法运算符。

参考答案(欢迎讨论)

  1. 第一个执行了32767次,第二个执行了16383次。注意定义的数据类型是short,short为两字节16位,unsigned short=(0~65535),i==j当且仅当j已经超过32768(unsigned short的模)后才可以满足。因此可以列式:(0+5x)+65536=2+7x,得x=32767。第二个答案同理可得。
  2. 第一个是POINT,第二个是ER,第三个是ST,第四个是EW。注意+1的涵意,其实是越过一块地址,“块”的大小由指针维数决定的。
  3. makeS()应该是返回一个S的对象,他可能返回一个常对象,也可能返回一个普通的对象,只有D无论是常对象还是普通对象都不会出错,估计是想考这个逻辑吧
  4. a=0,c=6,e=5,h=0,x=1,y=2,z=3,w=121,s=100,t=101,枚举。第一个从0开始,后面的从前面一个数的下一个开始。
  5. 参考腾讯加分题的第一题,这里稍稍有些不同,因为没有要求空间复杂度,而这里又恰好只给了数组a。解决方法是定义一个数组b,将a中的元素拷贝到b中,然后就可以套用腾讯加分题的方法了(只是a与b的含义互换了)。

转载自:http://www.cnblogs.com/jerry19880126/archive/2012/08/13/2637095.html#2652270

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值