我最近做了一次考试并且有一个奖金问题,我是唯一一个正确的人。我和我的同学一样对我如何做得很好奇。
问题是:
使用此数组:int a[5] = {5, 1, 15, 20, 25};
使用以下变量:int i, j, m;
使用此基本代码:
i = /*Enter Code*/;
j = /*Enter Code*/;
m = /*Enter Code*/;
printf("%d, %d, %d", i, j, m);
获得此答案:3, 2, 15
有很多条件,但主要是我们只允许使用数组,每个变量一个'1'和一个'++'等于。
我通过反复试验得到了答案,但我不知道我是如何做对的以及它是如何做对的。这是我的代码:
int main()
{
int a[5] = {5, 1, 15, 20, 25};
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
_getch();
return 0;
}
我纯粹很好奇我是如何得到正确答案的。任何解释都会很棒。
提前致谢。
答案 0 :(得分:1)
所以,看看这三个陈述:
i = ++a[1];
这会将a[1]
更改为2
,并将该值分配给i
。
j = a[1]++;
这会将j
设置为2
,并将a[1]
更改为3
。
m = a[i++];
这会将m
设置为15
,并将i
更改为3
。
所以打印所需的最终值3, 2, 15
。
如果你在调试器中运行它,你可以看到所有的变量并按语句看它发生。
答案 1 :(得分:1)
就像所有人说的那样,只需使用调试器或手动执行代码:
开头
a[5] = {5, 1, 15, 20, 25}
在i = ++a[1];
之后
a[5] = {5, 2, 15, 20, 25}
i = 2
因为预增量++会在影响他之前修改[1]。
在j = a[1]++;
之后
a[5] = {5, 3, 15, 20, 25}
i = 2
j = 2
因为后增量++会在影响到j之后修改[1]。
在m = a[i++];
之后
a[5] = {5, 3, 15, 20, 25}
i = 3
j = 2
m = 15
因为后期增量会将做法后的i值修改为m,所以在做作时,我将等于2,其中a [2] = 15。
你需要理解++ a和a ++之间的区别(当两次增量发生时)。