好6好6 发表于 2023-10-7 21:27:26

符合算法问题

#include<stdio.h>

void main()
{
         inti=5,j=5,p,q;
         p=(i++)+(i++)+(i++);
         q=(++j)+(++j)+(++j);
         printf("%d,%d,%d,%d",p,q,i,j);
}
这运行起来为什么j最终结果是22,怎么算的,还是我写错了,求大神指教

isdkz 发表于 2023-10-7 21:27:56

在这段代码中,变量i和j都被初始化为5。然后,p和q分别被赋值为(i++)+(i++)+(i++)和(++j)+(++j)+(++j)的结果。

对于p的计算,i++表示先使用i的值,然后再将i的值加1。所以,首先i的值为5,然后i的值加1变为6,再加1变为7。因此,p的计算过程为5 + 6 + 7,最终结果为18。

对于q的计算,++j表示先将j的值加1,然后再使用j的值。所以,首先j的值加1变为6,再加1变为7,再加1变为8。因此,q的计算过程为6 + 7 + 8,最终结果为21。

最后,使用printf函数打印p、q、i和j的值。由于i在p的计算过程中被使用了3次,所以i的值变为了8。而j在q的计算过程中被使用了3次,所以j的值变为了8。因此,最终打印的结果为18, 21, 8, 8。

所以,j的最终结果是8而不是22。

Mike_python小 发表于 2023-10-7 21:28:05

在C/C++中,i++和++i分别表示后缀自增和前缀自增运算符。其中,后缀自增的值是运算前的值,而前缀自增的值是运算后的值。在这个问题中,由于i的初值为5,在执行p=(i++)+(i++)+(i++);这句代码时,i++的值为5,然后i的值变为6;接着,第二个i++的值仍为6,然后i的值变为7;再接着,第三个i++的值仍为7,然后i的值变为8。所以此时p的值为5+6+7=18,而i的值已经变成了8。

对于j的计算,先执行了三个前缀自增运算符++j,将j的值依次加1,此时j的值变成了8。接着继续执行下一个前缀自增运算符,将j的值加1,此时j的值变成9。然后再执行一个前缀自增运算符,将j的值加1,此时j的值变成了10。最后,q的值等于8+9+10=27。因此,程序输出的结果为18,27,8,10。

需要注意的是,此代码没有明确定义main函数返回的类型,如果编译器开启了严格模式或者警告模式,可能会导致编译错误或者警告信息。建议将void main()修改为int main()。

希望以上回答能够帮助到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 符合算法问题