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

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

2006-1-18 11:20
10859

简答:在C++中,什么情况下f(a)+g(a)的值不等于g(a)+f(a)的值.
不少考生被唬住了


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
我初学 C++,我试答  

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

像 void f( int &a ) 和 void g( int &a )
2006-1-18 11:50
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
楼上的正解,还有一种情况是重载了"+"号的时候
2006-1-18 14:17
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
刚在云风的maillist里面也看见这个题目
感觉考研出这种题目很怪异,太偏了,呵呵
2006-1-18 14:21
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
5
还有一种情况是f(a)和g(a)的返回值是字符串的时候,不过这也可以算是重载了加号吧,呵呵
2006-1-18 14:37
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
6
f(a),g(a)不满足交换律的时候
2006-1-19 09:11
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
越说越怪异了
1.f( ) 和 g( ) 会改变 a 的值
2.重载了"+"号
这两个答案还算合理
3.重载了"()"的时候
钻牛角尖...
4.f(a),g(a)不满足交换律的时候
无语ing...
再看下面三个:
5.题目中的C++不是标准C++的时候
6.当你的电脑出了问题的时候
7.当你看花眼的时候
吐血ing...纯恶搞了
2006-1-19 13:26
0
雪    币: 202
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
>>简答:在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) ) ;
2006-1-19 20:08
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
9
想不出为何要考这种题?
2006-1-20 09:51
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
感觉这道题并不偏,而且出的很好.
我见过另一个很好的题是"使用C语言且不使用临时变量交换两个整数变量的值".
2006-1-20 20:44
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
11
10楼的问题只要用
a ^= b ^= a ^= b;
就可以了
考考大家,如何不用逻辑运算符来完成这个问题?

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

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

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


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

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


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

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