首页
社区
课程
招聘
今年南大硕士研究生入学考试计算机专业课第一题
2006-1-18 11:20 10211

今年南大硕士研究生入学考试计算机专业课第一题

2006-1-18 11:20
10211
收藏
点赞7
打赏
分享
最新回复 (19)
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
riijj 7 2006-1-18 11:50
2
0
我初学 C++,我试答  

是不是因为 f( ) 和 g( ) 会改变 a 的值 ?

像 void f( int &a ) 和 void g( int &a )
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-1-18 14:17
3
0
楼上的正解,还有一种情况是重载了"+"号的时候
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
孙行者 2006-1-18 14:21
4
0
刚在云风的maillist里面也看见这个题目
感觉考研出这种题目很怪异,太偏了,呵呵
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2006-1-18 14:37
5
0
还有一种情况是f(a)和g(a)的返回值是字符串的时候,不过这也可以算是重载了加号吧,呵呵
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
ForEver 20 2006-1-19 09:11
6
0
f(a),g(a)不满足交换律的时候
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-1-19 13:26
7
0
越说越怪异了
1.f( ) 和 g( ) 会改变 a 的值
2.重载了"+"号
这两个答案还算合理
3.重载了"()"的时候
钻牛角尖...
4.f(a),g(a)不满足交换律的时候
无语ing...
再看下面三个:
5.题目中的C++不是标准C++的时候
6.当你的电脑出了问题的时候
7.当你看花眼的时候
吐血ing...纯恶搞了
雪    币: 202
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jrmd 2006-1-19 20:08
8
0
>>简答:在C++中,什么情况下f(a)+g(a)的值不等于g(a)+f(a)的值.

int f(int &a)
{
    a += 1 ;
    return a ;
}

int g(int a)
{
    return a ;
}

int a = 0 ;

此时( f(a) == g(a) ) ;

int a = 0 ;

而  ( g(a) != f(a) ) ;
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
prince 16 2006-1-20 09:51
9
0
想不出为何要考这种题?
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 1 2006-1-20 20:44
10
0
感觉这道题并不偏,而且出的很好.
我见过另一个很好的题是"使用C语言且不使用临时变量交换两个整数变量的值".
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-1-20 23:41
11
0
10楼的问题只要用
a ^= b ^= a ^= b;
就可以了
考考大家,如何不用逻辑运算符来完成这个问题?

答案1:(两个式子,比较整洁,而且很对称)
a += b -= a += b;
b = -b;

答案2(一个式子,有点乱,方法和答案1相同):
a -= (b = (a += b) - b);

不过就我个人来看,这类题仍有钻牛角尖之嫌
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 1 2006-1-21 00:03
12
0
最初由 thebutterfly 发布
10楼的问题只要用
a ^= b ^= a ^= b;
就可以了


我也想出一个易于理解的方法(也适用于浮点数):
a-=b=(a+=b)-b;
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-1-21 00:10
13
0
刚编辑完就看到楼主已经把我想的方法发了
把加减对调也是可以的
实际上这个问题如果不用异或不用加减也是可以做的,只要用或 且 非 凑出异或来就可以,凑出加减来也可以

讨论离题了,这个帖子可以锁了
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 16 2006-1-21 11:44
14
0
还有,a里用了++和--的时候
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
孙行者 2006-1-21 16:09
15
0
__asm
{
    push x
    push y
    pop  x
    pop  y
}
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 1 2006-1-22 01:00
16
0
最初由 孙行者 发布
__asm
{
push x
push y
pop x
........


我早想到有人想内嵌汇编来做,所以我也早就声明"使用C语言".
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
kyc 19 2006-1-22 08:52
17
0
最初由 dwing 发布
感觉这道题并不偏,而且出的很好.
我见过另一个很好的题是"使用C语言且不使用临时变量交换两个整数变量的值".

以前上C语言课的时候有这个习题,不过早忘了.
雪    币: 223
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pfzhao 2 2006-1-23 10:26
18
0
非线性函数时。
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
vlit 2006-1-25 15:28
19
0
在<<Pascal语言程序设计>>张长海 著 电子工业出版社
这本书的最后一章特地谈到了这个问题,书中把这个问题称做函数副作用。
例有函数:
Function f(u:real):real;
  Begin
    a := a * 2;
    f := 2 * u;
  End;
f(x) * a及a * f(x)不同
雪    币: 431
活跃值: (442)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
Vegeta 13 2006-1-31 11:35
20
0
C++不会,只会C。。。
游客
登录 | 注册 方可回帖
返回