C语言赋值的疑问
#include<stdio.h>intmain(void){inti;intsum=0;for(i=1;i<=10;i++)sum=sum+i;printf("%d\n...
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for ( i = 1; i<=10 ;i++)
sum = sum + i;
printf("%d\n",sum); }
//上面int sum=0 , 下面 sum = sum + i 第一次就是 sum = 0 +1
我不明白,为什么只有左边的sum被赋值了,右边怎么还是sum. 怎么不是 0 = 0 +1
为什么只有右边被赋值了,左边怎么还是sum 不好意思话说反了 展开
int main(void)
{
int i;
int sum = 0;
for ( i = 1; i<=10 ;i++)
sum = sum + i;
printf("%d\n",sum); }
//上面int sum=0 , 下面 sum = sum + i 第一次就是 sum = 0 +1
我不明白,为什么只有左边的sum被赋值了,右边怎么还是sum. 怎么不是 0 = 0 +1
为什么只有右边被赋值了,左边怎么还是sum 不好意思话说反了 展开
10个回答
展开全部
首先,赋值号"="的优先级要比加号的低,所以要先算右边sum+i的值,将sum和i的值代入sum+i这个表达式并计算出结果,计算完之后才能将相加的结果赋值给左边的sum
其次,赋值运算的顺序是从右到左,即把右边的值给到左边(的变量)去
所以,sum = sum + i 这个式子,首先算sum+i的值,也就是0+1=1,然后进行赋值运算,从右边赋到左边,也就是把1这个上次的运算结果赋给变量sum(同时会覆盖原来sum的值)。
最后顺便说一句,0=0+1这个式子在数学当中成立吗?那个等号是赋值号,和数学里的等号完全不是一回事。数学中的等号在C语言中是"=="这个符号。
其次,赋值运算的顺序是从右到左,即把右边的值给到左边(的变量)去
所以,sum = sum + i 这个式子,首先算sum+i的值,也就是0+1=1,然后进行赋值运算,从右边赋到左边,也就是把1这个上次的运算结果赋给变量sum(同时会覆盖原来sum的值)。
最后顺便说一句,0=0+1这个式子在数学当中成立吗?那个等号是赋值号,和数学里的等号完全不是一回事。数学中的等号在C语言中是"=="这个符号。
更多追问追答
追问
还有个问题。
此程序的for 是对 i 的变化循环。也是对包含语句的循环。但是sum左边下一轮带入右边,这是哪里规定好的循环呢?
sum = sum + i是个语句,它是循环的。但是这里单单sum这个量也在循环,我就不明白,i 循环是被规定好的,sum是整个语句循环,而sum这个个体循环是在哪里被编程的?
追答
那我只想说的是:sum = sum + i 本身不是循环,它是“被循环”。
其实循环的原理是,在执行完里面的语句后再次执行该语句
就比如说
for (i=1; i<=2; i++)
sum = sum +i;
这样的循环,其实等效于
i=1;
sum = sum + i;
i++;
sum = sum + i;
可以看到,出现了两次sum = sum + i,也就是说,两个sum = sum + i相互独立,没有任何依存关系(不是你中有我,我中有你,而是两条语句完全不一样的)。所以第一条语句执行之后,sum根据我前面说的,它的值变成了0+1=1这个值(原来sum的值0已经完全被覆盖掉了)。那么到第二次出现sum = sum + i的时候,sum的值因为已经变成了1(同时i的值也变成了2),所以sum+i 必须按1+2来算。
这个循环无所谓轮数不轮数的问题,把它改写成顺序执行的语句就知道它的工作原理了。这就跟数学当中的乘法(当乘数为整数)的工作原理其实无所谓乘的问题,完全是连续地加法的道理一样。
展开全部
呵呵 这个是初学C语言者的疑惑,
= 是赋值符号,是把右边的值赋给左边,
sum = 0 是把0付给右边的sum
sum = sum + i 是把sum+i 即0+i赋给右边的sum,个人总结
右边的式子里的变量看前面程序,而左边的变量看赋值这一句,
这一点必须搞清楚,要不没办法继续呀,因为这样的用法非常多
= 是赋值符号,是把右边的值赋给左边,
sum = 0 是把0付给右边的sum
sum = sum + i 是把sum+i 即0+i赋给右边的sum,个人总结
右边的式子里的变量看前面程序,而左边的变量看赋值这一句,
这一点必须搞清楚,要不没办法继续呀,因为这样的用法非常多
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-10-31
展开全部
右边是赋值前的,左边是之后的
这是循环语句,也就是说,第一次赋值前,sum=0,之后就变成了因为加i了,就变成了1
然后再进行第二次循环,i=2,赋值前,sum=1,加i之后就成了1+2=3了
依次类推,这很好理解的
这是循环语句,也就是说,第一次赋值前,sum=0,之后就变成了因为加i了,就变成了1
然后再进行第二次循环,i=2,赋值前,sum=1,加i之后就成了1+2=3了
依次类推,这很好理解的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你连计算机语言基础都不会,还是看看书再问问题吧。
程序语言是顺序执行的!!
在这个 for 循环里 程序经过编译后
实际是类似这样的过程,
寄存器里保存了sum的值,还有一个寄存器保存了i 值
先执行sum+i 把结果放到另外一个寄存器3中
然后把寄存器3中的结果放到保存sum值的寄存器中
现在sum的值不是被改变了么,哪来的2个sum,还左边右边什么的。
第二次循环时 重复之前的操作
。。。以此类推 最后就算出了总和了。
程序语言是顺序执行的!!
在这个 for 循环里 程序经过编译后
实际是类似这样的过程,
寄存器里保存了sum的值,还有一个寄存器保存了i 值
先执行sum+i 把结果放到另外一个寄存器3中
然后把寄存器3中的结果放到保存sum值的寄存器中
现在sum的值不是被改变了么,哪来的2个sum,还左边右边什么的。
第二次循环时 重复之前的操作
。。。以此类推 最后就算出了总和了。
追问
既然哪来的2个sum.那把计算结果保存在sum值中,这是那一步的编程命令?
是循环for?
for是循环i 跟语句,为什么会去循环sum把新的sum保存到覆盖到原来的sum呢?
如果我改成 x = sum + i 那么是否循环会把x的值给sum再次进入循环呢
追答
当然不会,那样 就不会累加了,X是X ,sum是sum,2个值完全没关系,
如果一开始sum是0,那么for循环执行x=sum+i,就如下了
x=0+1;
x=0+2;
x=0+3;
。。。
如果是sum=sum+i
程序过程是这样的,一开始sum=0
sum=0+1; (执行完该步,此时sum值就是1了)
sum=1+2; (执行完该步,此时sum值就是3了)
sum=3+3; (执行完该步,此时sum值就是6了)
sum=6+4; (执行完该步,此时sum值就是10了)
。。。
for循环只是在重复做一些运算而已、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是由运算顺序决定的,我们先算=右边的值,然后将其结果赋值给了=左边的sum,故sum的值变化了,由原来的值被新计算的值覆盖掉了!!但是此运算结束后,sum的值肯定是一样的啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询