首先要想到使用两个for循环语句,进行嵌套循环!
里面的for循环语句用来计算阶乘以忣统计阶乘的和!
但是数据类型,要使用long int类型!
先看一下代码一个小问题:
现茬这个代码的运行结果似乎有疑问,与预算的不相同
我们主要的关注对象是*s++ += 7部分,代码作用不解释了
这显然没有问题,优先处理的是+=運算符将其拆开还原即可。
回到问题*s++ += 7上运算符出现了:++(右自增),*(取值)+=三种。
通常根据c语言r的运算符知识会作出如下思考:優先级中++ 优于 * 优于 += 所以在处理*s++ += 7时首要考虑的是++运算符而不是+=。
(s++)先取值在加一可能在本题中会有人想到*s++ += 7;中的可以思考如下:
*(s++) += 7;中先使用s的值(s的值是一个地址),之后进行*s的取值然后++发挥作用使得*s的值加一,最后再到+=的运算符将式子还原。可以发现其中的問题是:++发挥作用使得*s的值加一加一后的式子变成了:常数 += 常数 ;
显然这种式子是不被c语言r所允许的,但是本文开始出就已经给出了程序的运算结果说明代码没问题!
现在思考出错的原因,显然思路在加一的操作后出了错误现在给出合理的解释(这里只是猜想):
①先处理(s++),对s的态度是先使用s的值;
③*(s)取值后不进行 ++ 原本的加一行为而是执行+=操作符:
⑤结果是:原地址对应的值执行+7,+7后将结果10赋给地址地址只是往后移动一次。
解释右侧写为(s指针往右加一 )的原因:s++先是使用s的地址在等待s的地址加一,由于上面②③操作使得加一操作未能得到执行因此将其后续操作放在等式的左边。
以上的猜测过程完整的解释了开始的代码运行结果
猜想的作用与验证思路:①是解释问题的原因②解释原因后使用猜想的方法进行预测③实验验证
预测与实际运行结果相同,猜想正确因此以后遇见*s++ += 7类似问題时就可以按猜想的过程解决。
PS:由于本人能力有限文中出现错误的地方希望能得到大家的指正,谢谢!
首先要想到使用两个for循环语句,进行嵌套循环!
里面的for循环语句用来计算阶乘以忣统计阶乘的和!
但是数据类型,要使用long int类型!
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。