遇到这样的面试题,我这个菜鸟不会做(各位大侠解释一下)

xiaomi163 2012-09-18 04:38:28
int main(int argc,char *argv[])
{
int c=9,d=0;
c=c++%5;
d=c;
printf("d=%d\n",d);
return 0;
}
...全文
6225 110 打赏 收藏 转发到动态 举报
写回复
用AI写文章
110 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomi163 2012-10-23
  • 打赏
  • 举报
回复
杭州东软面试题啊,大神
[Quote=引用 22 楼 的回复:]

引用 21 楼 的回复:

引用 20 楼 的回复:
碰到出这样的题的公司,还是直接走了吧

我到时觉得,这是考试题,

遇到这样出题的老师,直接挂科重选一个老师吧。
[/Quote]
xiaomi163 2012-10-23
  • 打赏
  • 举报
回复
%优先级比++高??????
[Quote=引用 8 楼 的回复:]

是5.因为%的优先级比++的优先级高,所以先有9%5 =4,4++ = 5在赋值给d,那么d=5.
[/Quote]
explorecat 2012-09-26
  • 打赏
  • 举报
回复
测试了一下,是4 楼上的解释5的又过于牵强了吧
流氓小丑 2012-09-25
  • 打赏
  • 举报
回复
被搞糊涂了
stack009 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这个其实考察的是运算符的优先级问题。这个是先执行
1.C = C % 5(这个时候C应该是4)
2.C++ (C++是4,但是C已经是5了)
3.D = C(D = 5)
所以这里应该是5
[/Quote]
确实是这样的
赵4老师 2012-09-25
  • 打赏
  • 举报
回复
// C++ Operator Precedence and Associativity
// The highest precedence level is at the top of the table.
//+------------------+-----------------------------------------+---------------+
//| Operator | Name or Meaning | Associativity |
//+------------------+-----------------------------------------+---------------+
//| :: | Scope resolution | None |
//| :: | Global | None |
//| [ ] | Array subscript | Left to right |
//| ( ) | Function call | Left to right |
//| ( ) | Conversion | None |
//| . | Member selection (object) | Left to right |
//| -> | Member selection (pointer) | Left to right |
//| ++ | Postfix increment | None |
//| -- | Postfix decrement | None |
//| new | Allocate object | None |
//| delete | Deallocate object | None |
//| delete[ ] | Deallocate object | None |
//| ++ | Prefix increment | None |
//| -- | Prefix decrement | None |
//| * | Dereference | None |
//| & | Address-of | None |
//| + | Unary plus | None |
//| - | Arithmetic negation (unary) | None |
//| ! | Logical NOT | None |
//| ~ | Bitwise complement | None |
//| sizeof | Size of object | None |
//| sizeof ( ) | Size of type | None |
//| typeid( ) | type name | None |
//| (type) | Type cast (conversion) | Right to left |
//| const_cast | Type cast (conversion) | None |
//| dynamic_cast | Type cast (conversion) | None |
//| reinterpret_cast | Type cast (conversion) | None |
//| static_cast | Type cast (conversion) | None |
//| .* | Apply pointer to class member (objects) | Left to right |
//| ->* | Dereference pointer to class member | Left to right |
//| * | Multiplication | Left to right |
//| / | Division | Left to right |
//| % | Remainder (modulus) | Left to right |
//| + | Addition | Left to right |
//| - | Subtraction | Left to right |
//| << | Left shift | Left to right |
//| >> | Right shift | Left to right |
//| < | Less than | Left to right |
//| > | Greater than | Left to right |
//| <= | Less than or equal to | Left to right |
//| >= | Greater than or equal to | Left to right |
//| == | Equality | Left to right |
//| != | Inequality | Left to right |
//| & | Bitwise AND | Left to right |
//| ^ | Bitwise exclusive OR | Left to right |
//| | | Bitwise OR | Left to right |
//| && | Logical AND | Left to right |
//| || | Logical OR | Left to right |
//| e1?e2:e3 | Conditional | Right to left |
//| = | Assignment | Right to left |
//| *= | Multiplication assignment | Right to left |
//| /= | Division assignment | Right to left |
//| %= | Modulus assignment | Right to left |
//| += | Addition assignment | Right to left |
//| -= | Subtraction assignment | Right to left |
//| <<= | Left-shift assignment | Right to left |
//| >>= | Right-shift assignment | Right to left |
//| &= | Bitwise AND assignment | Right to left |
//| |= | Bitwise inclusive OR assignment | Right to left |
//| ^= | Bitwise exclusive OR assignment | Right to left |
//| , | Comma | Left to right |
//+------------------+-----------------------------------------+---------------+

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

不要写连自己也预测不了结果的代码!
dabenhuia 2012-09-25
  • 打赏
  • 举报
回复
这只是考试,平时可别写这种程序,可读性差!
huangxy10 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 的回复:]

我分析一下应该是4啊?为什么验证了是5?
c++ 应该是9
c++ % 5 应该是4,c变成10
c = c++ % 5 所以c是4

哪里错了?
[/Quote]

行为是不确定的,看看置顶帖。
C/C++对这种先后次序没有规定,和编译器有关。
wuchuncai 2012-09-25
  • 打赏
  • 举报
回复
如果那个程序员,这样写程序,也太水了...
gongdath 2012-09-25
  • 打赏
  • 举报
回复
这和编译器有关吧。如果说错了,请原谅,我是做JAVA的。
jiandingzhe 2012-09-25
  • 打赏
  • 举报
回复
如果我没记错,这个操作是不符合语言规范的,其结果随C语言实现的不同而不同。
xuanguoliang 2012-09-24
  • 打赏
  • 举报
回复
java 里面结果是 4
[Quote=引用 4 楼 的回复:]
这个其实考察的是运算符的优先级问题。这个是先执行
1.C = C % 5(这个时候C应该是4)
2.C++ (C++是4,但是C已经是5了)
3.D = C(D = 5)
所以这里应该是5
[/Quote]
全优资源 2012-09-24
  • 打赏
  • 举报
回复
这样的题目有标准的回答的:取决于编译器,不同的编译器会有不同的结果,over
  • 打赏
  • 举报
回复
5,d=5
帖子不能编辑 2012-09-24
  • 打赏
  • 举报
回复
其实主考官是再考你是不是只纠结于晦涩的语法,用心良苦阿。
xinMFC 2012-09-24
  • 打赏
  • 举报
回复
考优先级的决不是什么好的面试题
才仔 2012-09-24
  • 打赏
  • 举报
回复
5,,简单成毛线
皮特尔 2012-09-24
  • 打赏
  • 举报
回复
++运算符对编译器很挑剔,不同的编译器往往有不同的结果。所以,++运算符最好不要出现了普通表达式里。
sjmp 2012-09-23
  • 打赏
  • 举报
回复
we all know ,it's five.
sichuanwww 2012-09-23
  • 打赏
  • 举报
回复
运算符优先级和指针是C里最难的两个点。
加载更多回复(90)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧