【问题标题】:the arithmetic order in C programmingC编程中的算术顺序
【发布时间】:2014-09-02 15:20:23
【问题描述】:

今天我正在尝试使用 C 解决一个简单的二维数学函数。但是我得到的结果在那里有点有趣。代码在这里:

int main()
{
    int x, y;

    x = 10 - y;
    y = x - 2;
    printf("the x and y would be %d, %d ", x, y);
    return 0;
}

如您所见,答案很容易计算为x=6y=4,但上面列出的程序给了我x=8y=6。似乎程序以某种方式首先将y 的值设为6,然后忽略第一个等式并直接将6 放入第二个等式中,然后得到x 的值。看到这个有点搞笑。希望有人能给我解释一下原因!

【问题讨论】:

  • 您的代码有未定义的行为:y 没有价值!
  • x= 行中缺少;
  • @KerrekSB 但是怎么做?我认为我对 x 和 y 做了同样的事情......
  • @xxbbcc 哦,我忘了。但我不认为这就是问题所在
  • @user1579701:在x = 10 - y; 行中,你试图给x 一个值,但你失败了,因为这样做你试图评估表达式10 - y,其中@ 987654336@ 没有价值。这意味着您的程序有未定义的行为,因此不能说什么。

标签: c algorithm variables math


【解决方案1】:

原因是对命令式编程语言的基本误解。 C 语言不是方程求解器。 '=' 表示赋值,而不是等式。

【讨论】:

  • 所以我应该将所有= 符号替换为== 吗?或者这个等式在 C 中实际上是不可接受的......
  • @user1579701 这在 C 语言中是不可能做到的。(嗯,这可能,但它会涉及大量工作,而不是两个简单的方程式。)
【解决方案2】:

C 语言不解方程。语言中没有这样的功能。 C 语言计算表达式。

由于您从未初始化变量,xy 最初都包含垃圾值。您的第一个表达式x = 10 - y 的意思是:从10 中减去垃圾值并将其存储在x 中。

您的y 开始它的生命时,它的垃圾值2(在x 中给您8)只是一个随机巧合。我真的很惊讶你有这么好看的垃圾值。通常这是更可怕的事情。

【讨论】:

  • 哦,看来我在这里犯了一个大错误。非常感谢您的解释!我现在明白了。
  • 看起来y 是从 2 开始的。我不知道这是否有助于一些 C 大师弄清楚为什么它以这种方式开始而不是可怕的事情。
猜你喜欢
  • 2015-09-17
  • 2018-07-08
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多