2012-01-25 79 views
1
int m, n, j; 
n=16; 
j=15; 
m = n++ -j+10; 
printf("%d", m); 

输出:11.有人能告诉我这是如何工作的? (C编程)

在这里,第一,n旧值被提供给m,然后它被递增,以便新的值i得到的是17,然后将表达得以解决,即j+10 = 25,那么n的新值减去25即17-25。 对吗?但答案与输出11不匹配。 那么这是如何工作的? 另外,我是编程新手,并开始学习C.你认为哪本书最适合我?由于我没有编程经验。 谢谢。

+0

除非右边的完整计算(这就是为什么我们谈论R值,R代表正确)已经完成,否则没有值被赋值给m。这里m是L值(左边的L)。 – zaphod1984

+0

'm'是'16-15 + 10',因为'n ++ == 16'。 – Gandaro

回答

4

m = n++ -j+10;是相同

m = n -j+10; 
n = n + 1; // m is 11. 

如果是++n这将是

n = n + 1; 
m = n -j+10; //m is 12. 

那么表达式得以解决,即J + 10 = 25

号这将是-j+10 = -5

我的建议是,不要编写复杂的表达式,除非你完全确定你在写什么。

+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

0

n++首先返回n的值,然后递增它。
因此,所发生的实际计算是m = 16 - 15 + 10这是11

我想你想要的是:

m = (n+1) - (j+10); 

使用++操作是递增的n的价值后,将来使用您使用它的当前值来计算m

+0

但增量在哪里? 'n = 16'和'j = 15'的值。那么在这里使用'++'是什么? – 912M0FR34K

+0

n ++增加n不是m,如果你打印n的值,你会看到它是17 – yurib

+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

-1

n递增其值在m结束的表达式中使用。

0

对于m,首先计算n - j + 10并将其分配给m。之后,n++被执行。

在端n = 17m = 11

+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

1

你在这里有一些错误。

  1. n++将增加n并返回原来的结果,这样的话你有m = 16 ...

  2. -j所以你有m = 16 - 15 ...

  3. +10所以你有m = 16 - 15 + 10

现在我最后一次做数学,会出现m = 11像你所看到的。

如果你希望它是m = 17 - (15 + 10)然后你想:

int m, n, j; 
n=16; 
j=15; 
m = ++n -(j+10); 
printf("%d", m); 
+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

-1

n++后增量。它只会在执行后递增n的值:m = n++ -j+10;

++n是预增量。在计算m之前,它递增n的值。 m = ++n -j+10;

0

你正在作出两个不正确的解释。

首先,如其他答案所示,n++只在整个表达式被评估后才增加n。其次,你有-j+10。这不等于-(j+10),所以说j+1025并且您正在寻找something - 25是错误的。另一种查看方式-j+1010-j

+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

0

在回答关于一本好书的问题时,您可能会考虑学习C++而不是简单的旧C,因为C++是C的超集。对于C++,您需要获得Bjarne Stroustrup的“The C++ Programming Language ”。很容易阅读,并且在您的书架上可以持续很长时间作为一个很好的参考。

1

其实算后增量操作的操作,其n做... 你有16-15 + 10 = 11 但如果打印n您应该有17

开始,你可以阅读一些关于基础知识的书,但这个例子并不简单;它包括操作符的优先级,这可能会很棘手。

开始简单...在c中编写不可读代码非常简单。 http://www.cs.cf.ac.uk/Dave/C/node4.html

希望它有助于

+0

我明白了。帮助很多。谢谢。 – 912M0FR34K

0

在表达式m = n++ -j+10;
编译器将表达式视为m= n++ ((-j)+10)
作为n和j的intialized值n = 16j = 15。我们有m = 16++ ((-15)+10)。我们得到的输出为11
表达式执行后n将递增。

相关问题