记录一下,(–i)+(–i),问问学校的老师,如果这样的提目怎么答

翟二喜

题目:


int main ()
{
? ? int i=2;
? ? printf("%d\n",(--i)+(--i));
? ? printf("%d\n",i) ;
? ? return 0;
}


答案:呃…………


实测:


F:\project\testprj>bcc32 test.c
Borland C++ 5.6.4 for Win32 Copyright (c) 1993, 2002 Borland
test.c:
Turbo Incremental Link 5.64 Copyright (c) 1997-2002 Borland

F:\project\testprj>test.exe
1
0

-------------------------------
F:\project\testprj>gcc test.c

F:\project\testprj>a.exe
0
0

-------------------------------
F:\project\testprj>cl test.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

test.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:test.exe
test.obj

F:\project\testprj>test.exe
0
0

发表评论取消回复

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:8   其中:访客  0   博主  0

  1. bjwf 5
  2. bjwf 5

    出这种题的老师都是猪头,很可能自已都不知道实际结果是什么。

  3. amo 5

    答案是:

    1

    0

    呵呵,出这方面题是比较变态的,因为不同的编译器或不同版本的编译器可能结果都会不一样。不过对于学习掌握了c语句中表达式、自增加、函数参数运算顺序后,得出“与答案一样的结果”应该问题不大。

    再看下面这个:

    void main()

    {

    int i;

    i=3;

    printf("%d %d %d\n", i++, i++, i++);

    printf("%d %d %d\n", ++i, ++i, ++i);

    }

    呵呵,不知有没人又要抓狂了;-)

    答案是:

    3 3 3

    9 8 7

    不用在各种编译器下试了,结果大多会与答案不一样

  4. pp 5

    amo你的这样做答是不合适的,这个问题本身出的就变态,各种编译器的表现不同你怎么说你的就是标准答案?

  5. amo 5

    呵呵,原因见这:

    http://amo.cndev.org/archive/2004/06/17/1059.aspx

  6. yxd 5

    我也觉得这样的题很无聊,但是bcc 编译器在第一个题上的错误我倒是觉得太明显了,如果仅仅是出于运算顺序的考虑,我会避免++ i或i ++这样的写法,但是一般的,倒是出于效率的考虑,我通常使用++ i这样的前置写法,理由如下:

    如果运算的类型是像int,char等的基本类型,两者区别并不大甚或就没有区别。但是作为一些类型从载的操作符的话,就有区别了,如下例(vc6中std::map的iterator运算)

    iterator& operator++()

    {_Inc();

    return (*this); }

    iterator operator++(int)

    {iterator _Tmp = *this;

    ++*this;

    return (_Tmp); }

    可以看到通常i ++可能会比++ i多做运算,并且会多一个临时的变量用来备份。

  7. fish_sea 5

    每次编程作业都是….

    有回老师给个题目叫用C做,我真想打我老哥,老师在邮件里温柔的问我:你是自学的C#吗

    我老实的答道:如果我能分辨那是C#,我就不会交上来了

  8. fish_sea 5

    老师邮件回复道:不管你考多少分,我决不会杀你了