求大家帮忙一下 这道C语言题目要选哪个 顺便告诉我原因 谢谢!

2025-09-03 16:39:22
推荐回答(6个)
回答1:

我看着选D啊

printf输出的时候,是从后面往前计算的。
一开始n=1,然后自加1变成2了

然后 --n是先减1,在使用 所以输出为1 ,n变成1了
n++是先使用,在自增1,所以输出为1 n变成2了
n直接输出2

所以是 2 1 1

回答2:

在C语言中,printf()是的计算从右向左的,显示是从左向右的,这道题,先算--n, n++, n;
1) n=1;n++;n=2;
2) n=2;--n;n=1; 第三个是1;
3) n=1;n++;第二个显示1,n=2
4) n=2,第一个显示2

选D
你自己编译一下呗

回答3:

最好的办法是在机器上执行一遍!很奇怪,我在vs2012上执行的结果是212,在vc6里执行的结果是111,所以同意楼下的观点,结果在乎于编译器的实现!出题的人的确只是纸上谈兵!

在vs2012下的运行结果!


在vc6下的运行结果!

回答4:

2,2,2


注解

n++ = 1;

int n=1;

n++;                                        n=1,n++ =2


printf("%d%d%d",


n,                                             n=2

n++,                                      n=2,++n =3

――n                                           n=3,--n=2




分类: C/C++
#include
void main()
{
int i=1;
printf("%d%d%d%d%d",i++,i--,--i,++i,i);
}
我的最初想法,参数从左到右依次计算,也就是等同于:
printf("%d",i++);
printf("%d",i--);
printf("%d",--i);
printf("%d",++i);
printf("%d%",i);
先i++,所以输出i的值1后再i=i+1,此时输出为1,i=2
再i--,同样先输出i的值2后再i=i-1,此时输出为1 2,i=1
然后--i,先计算i=i-1=0,再输出i,此时输出为1 2 0,i=0
同样的++i,先计算i=i+1=1,再输出i,此时输出为1 2 0 1,i=1
最后输出i,所以最终输出是1 2 0 1 1
但是实际的运行结果并不是我想像的这样,这估计是因为c++的printf函数采用的是cdecl方式传递参数的关系,即参数入栈顺序是从右向左,自然执行的顺序也是自右向左啦,所以正确的顺序是:
先算最后的输出1
其次++i,输出1 2,i=2
再次--i,输出1 2 1,i=1
接着i--,输出1 2 1 1,i=1
最后i++,输出1 2 1 1 1
这就和我汇编查看运行的结果一致了:
1入栈
2入栈
1入栈
1入栈
1入栈
从这里,我们又可以看出这个顺序又和printf的输出顺序一致了,我猜测printf函数就直接根据这个顺序进行输出了
另外关于前面标记的“重点”
#include
void main()
{
int i=1;
printf("%d%d%d%d%d",i--,i--,--i,++i,i);
cout<}
把第一个i++改成了i--可以看到最后输出的数字是-1,所以表明在执行完printf函数后执行了2次i=i-1
这也就是为什么为什么最后输出的2个都是1了
补充:
虽然知道i++,就是运算后再加,++i是先加再运算,书上都这么说。但这样其实并没有解释清楚其中的关系。对于简单的表达式入:a = b + (++i);和a = b + (i++)我们可以很好的理解。但对于一些复杂的关系我们却会迷糊。
举例:
printf("%d %d %d %d",i++,i--,++i,--i);(printf是从右向左的入栈)
a=(i--) + (i--) + (i--);
上面两个式子可能有些就会有些会弄错。
问题的关键在于要搞清楚是在什么的前后,不是++i或者i++的运算前后,而是指整个表达式的运算前后。若i=1,则第二个表达是的值为3.

回答5:

这个结果没有一个是对的,答案应该是111。因为printf函数是对变量列表从右向左计算的,先--n使=1,再n++因是后++值不变还是1;等三个1全输出了再执行n++使n=2。出题的人只是纸上谈兵!

回答6:

A, 视乎编译器的实现, 结果可能会有多种

答案没有A? 我推测是A 是 因为函数是从在往右计算,并入栈, 函数内部弹出栈时就显得是从右往左, 实则显示是从左往右, 但是参数计算顺序是完全由编译器计算方式实现的,所以是不定的,如GCC与VC的实现可能就不同,所以实际开发过程中不要写这样的NC式语句,会给移植造成很大的问题