int sum=1; for(int i=3;i--;) sum*=i; cout<<sum<<endl; 结果是sum=1*2*1*0,为什么从2开始0结束?

如题所述

每次 for 循环的时候,都会执行一次 i--
而 i-- 本身还扮演了一个条件检查的作用,也就是检查它是否为 0;如果是,就跳出循环
所以从 2 开始,是因为 i-- 执行后,3 就变成了 2
而到 0 结束,也是因为在 i 为 1 的时候,条件检查它还是等于 1,但在循环体内,因为 -- 操作符的作用,i 变成了 0;等下次再检查 i 的值时,i 已经是 0 了,于是跳出循环
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-08-24
int sum=1; 
for(int i=3;i--;) 
    sum*=i; 
cout<<sum<<endl;

结果是sum=1*2*1*0。

这个问题需要理解for语句的执行过程。

for后面的括号里包含3个用分号隔开的式子,这三个式子分别表示初值设置,条件判断;循环条件修改。执行顺序是:

     计算初值设置表达式

    计算条件判断表达式,如果条件成立,转到3;否则循环到此结束

    执行循环体

    计算循环条件修改表达式,然后转到2

从上面看到,循环体 sum*=i; 执行之前,计算了条件判断表达式,而问题中的条件判断表达式是i--;需要明确的是,这个表示是计算完之后,i的值会减1。

所以会从2开始。那么,为什么会到0 才结束呢?

这是因为,这个条件判断表达式 i-- ,表达式本身的值是减1之前的值。也就是说,现在假设循环已经执行到i=1;且在执行第二步这个条件判断 i--,这个表达式的值如上所说是减1之前的值,也就是说还是1,而这个1是非零,也就是真,所以会继续执行循环提,但要注意,此时的值已经减1了,也就是0。那么这时候给sum乘上去的就是0。所以到0 结束。

...for(int i=3;i--;) sum*=i; cout<<sum<<endl; 结果是sum=1*2*1...
每次 for 循环的时候,都会执行一次 i-- 而 i-- 本身还扮演了一个条件检查的作用,也就是检查它是否为 0;如果是,就跳出循环 所以从 2 开始,是因为 i-- 执行后,3 就变成了 2 而到 0 结束,也是因为在 i 为 1 的时候,条件检查它还是等于 1,但在循环体内,因为 -- 操作符的作用,...

...main() { int i,sum=0; for(i=1;i<=3;sum++,i++) sum+=i; printf...
答案是 10

...void main() { int i;int sum=0; for(i=1;i<3;sum++) sum+=i; pr...
没有输出结果,从逻辑上看是死循环,因为for语句结束的条件为i<3,在下面只是sum=sum+i没有对i的值改变,所以会一直执行下去,是死循环。在visual2010中报错。希望能对你有所帮助。你可以把for语句改为for(i=1;i<3;i++)sum+=i这样就输出sum=1+2=3....

int sum=0;for(int i=1;i<=3;i++)for(j=1;j<=i;j++)s
两个for循环,一共执行六次,每次递加

{ int i,j,sum; for(i=3;i>=1;i--) { sum=0; for(j=1;j<=i;j++) su...
两层循环,对于外层循环,只需要看 i=1 就行了。因为要输出的是 sum, 外层的3次循环,每次都会把 sum 赋值为0 ,所以只看第3次循环就行了。也就是 i=1,这时,内循环中, j=1, j 刚好小于等于i ,也就是1 ,所以内循环执行一次就结束了, sum 就等于 0+1*1,就是 1啦 ...

int i,sum=0; for(i=1;i<=100;i++) {sum=sum+i;}printf("sum=%d\\n...
i++ 是i=i+1 如果换成i=i+2 那么就跳过了一些数字 当然sum会小啊 这个是数字累加 少了些数 和当然小了

{ int i,j,sum=0; for(i=3;i>=1;i--) { for(j=1;j<=i;j++) sum+=i*...
i=3时 j=1 2 3 sum是 3+6+9=18 i=2时 j=1 2 sum 是2+4=6 i=1时 j=1 sum 是1 加一起 就是25

int i,sum=1; for(i=1;i<=5;i++) { sum=sum*i; } printf("%d\\n%d...
因为for循环再第一次进入循环体以后,保持的是先计算i++,然后再判断i<=5这个条件,做到最后一次判断后,又做i++,这时i=6,在判断i<=5这个条件,发现已经不符合这个条件了,跳出循环,所以,i=6。

sum=1; for(i=0;i<n;i++) sum+=1; 求时间复杂度
一个for循环了N次,所以时间复杂度为N。如果两个循环嵌套,时间复杂度则为N^2,同理可以计算多层嵌套的时间复杂度。

int sum = 0; for(int i=1;i<=5;i++) {sum = sum + i; System.out.prin...
i++相当于i = i +1 "i = "+i+",sum="+sum 这串是打印出i =??? sum = ???前面用引号引着的是直接打印字符串,后面的是+是连字符,输出变量的,,这个就是计算1~5的总和啦还有最终输出变量i是多少,看案例i = 6吧sum=1+2+3+4+5结果是15 ...

相似回答