牙牙乐 发表于 2020-4-7 16:22:21

求大佬们解答

这是第41节课的程序,请问这两个pirntf中的i-1是啥意思为什么i要-1啊还有一个函数,一个宏定义 这两个i-1应该表达的是一样的吧

求解答 谢谢大佬们

qiuyouzhi 发表于 2020-4-7 16:26:24

1,-1就是单纯的-1啊,5-1就是4
2,表达的意思一样。

wp231957 发表于 2020-4-7 16:26:38

为啥要发图片呢

牙牙乐 发表于 2020-4-7 16:30:18

qiuyouzhi 发表于 2020-4-7 16:26
1,-1就是单纯的-1啊,5-1就是4
2,表达的意思一样。

这个程序运行的不是100以内的每个数的2次方嘛那不应该是i吗 怎么是i-1呢要是输入的是1 不是0了嘛

牙牙乐 发表于 2020-4-7 16:31:41

wp231957 发表于 2020-4-7 16:26
为啥要发图片呢

那个 我看视频想着看完小甲鱼的讲解在自己打一遍但就是这个地方不是很明白 我寻思截个图问问

qiuyouzhi 发表于 2020-4-7 16:34:17

牙牙乐 发表于 2020-4-7 16:30
这个程序运行的不是100以内的每个数的2次方嘛那不应该是i吗 怎么是i-1呢要是输入的是1 不是0了嘛

就是0啊,然后打印0的2次方

4goodworld 发表于 2020-4-7 16:40:48

本帖最后由 4goodworld 于 2020-4-7 16:53 编辑

对于图一,你自己把代码打一下调试下,你看看
你会发现,i-1和i++来讲,其实它是先运行i++,然后在执行i-1
然后,我们逻辑推导下
i=1
然后进入while循环体
先执行i++,i=2
再执行i-1,i为1
所以printf是1的平方是1,你会问为啥第二个i不是2,i++的一个“考点”{:10_256:}
然后关于图二的问题
你想要求啥?如果还是求平方的话,我想说你调试过吗?你确定能得到你想要的答案,如果能,那这个可能是编译器的原因
最后,总的来说,这个是i++这个的问题,这类问题,我感觉你就不要这么用了,很容易出问题的

sunrise085 发表于 2020-4-7 16:42:14

1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边的值就需要写i-1了。
2、不能那样写,首先 (i++)*(i++)中i自加了两次,下次循环的时候i的值不再是你需要的值了,再者,(i++)*(i++)不是(i++)的平方,而是两个相邻值的乘积。例如当i=2的时候,(i++)*(i++)实际上是3*2,执行之后i=4

编程鱼C 发表于 2020-4-7 16:44:07

C语言?我只学Python

4goodworld 发表于 2020-4-7 16:47:50

sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...


个人感觉不是3*2的结果

牙牙乐 发表于 2020-4-7 16:49:32

4goodworld 发表于 2020-4-7 16:40
对于图一,你自己把代码打一下调试下,你看看
你会发现,i-1和i++来讲,其实它是先运行i++,然后在执行i-1 ...

哦 后面的i++先执行啊 这就明白了 之前一直不知道第二个图是我这章视频没看完 这一点一直弄不明白就想着问一下就没试然后在看的时候小甲鱼才说的错的谢谢大佬了 i++那个考点 就是先参与运算在自增 这个晓得晓得

牙牙乐 发表于 2020-4-7 16:51:15

sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...

谢谢大佬了那个老哥比你早一点看见 设置没了 不好意思 见谅还是谢谢大佬{:10_275:}

牙牙乐 发表于 2020-4-7 16:51:51

4goodworld 发表于 2020-4-7 16:47
个人感觉不是3*2的结果

麻烦老哥在去试一下了辛苦了辛苦了

sunrise085 发表于 2020-4-7 16:55:04

4goodworld 发表于 2020-4-7 16:47
个人感觉不是3*2的结果

这个与编译器有一定的关系。有的编译器是遇到一个表达式中存在多个自加的时候,是在执行完整个表达式之后再修改i的值,但是更多的编译器是在表单大师运算过程中逐步自加。
所以C语言中一般不建议在同一个表达式中多次自加,因为在不同的编译器下运行结果会有所不同。


sunrise085 发表于 2020-4-7 16:57:43

牙牙乐 发表于 2020-4-7 16:51
谢谢大佬了那个老哥比你早一点看见 设置没了 不好意思 见谅还是谢谢大佬

没关系。
解答问题也是自我巩固知识的一个过程,只要帮到你了就行

人造人 发表于 2020-4-7 17:08:19

编程鱼C 发表于 2020-4-7 16:44
C语言?我只学Python

你一直在灌水,对于这样的人,我可不手软,直接扣分

牙牙乐 发表于 2020-4-7 17:11:32

sunrise085 发表于 2020-4-7 16:57
没关系。
解答问题也是自我巩固知识的一个过程,只要帮到你了就行

这论坛大佬们都是这么爱乐于助人嘿嘿 还是谢谢哈{:10_275:}

编程鱼C 发表于 2020-4-7 17:15:07

人造人 发表于 2020-4-7 17:08
你一直在灌水,对于这样的人,我可不手软,直接扣分

我还是初一,我刚来2天,我根本就不知道

人造人 发表于 2020-4-7 17:16:25

sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...

我来纠正一下,C语言中参数的入栈顺序是从右到左,但是求值顺序是 undefined
参考
http://bbs.chinaunix.net/thread-730010-1-1.html
http://blog.chinaunix.net/uid-22666248-id-3029562.html


人造人 发表于 2020-4-7 17:17:26

编程鱼C 发表于 2020-4-7 17:15
我还是初一,我刚来2天,我根本就不知道

知错就改,就好
页: [1] 2
查看完整版本: 求大佬们解答