鱼C论坛

 找回密码
 立即注册
查看: 1234|回复: 2

[已解决]符合算法问题

[复制链接]
发表于 2023-10-7 21:27:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

void main()
{
         int  i=5,j=5,p,q;
         p=(i++)+(i++)+(i++);
         q=(++j)+(++j)+(++j);
         printf("%d,%d,%d,%d",p,q,i,j);
}
这运行起来为什么j最终结果是22,怎么算的,还是我写错了,求大神指教
最佳答案
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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 21:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表