C语言关于i++求解答

第一个程序
i=1
while(sum<10000)
{i++;
sum+=i*i ;
}
n=30 sum=10415
这里sum+=i*i 中第一次运算 i等于2
i++不是先参与运算再自加吗 sum+=i*i 中 i不是应该等于1吗为什么等于2呢?想不通啊啊啊

i++;是一个单独的语句,执行完后i的值当然自加了1。

要利用后置自增的副作用,应该像这样:
int i=1,j,sum=0;
while(sum<10000)
{
j=i++;
sum+=j*j;
}追问

那这个程序
ink,i,j;
for(i=0;i<4;i++)
{for(k=1;k<=i;k++)
printf(" “)
后面省略啦
里面那个k<=i中第一次运行 i又是0 语句分隔的话i不是自加完了应该是1吗?

追答

当i=0时,i<4为真,要执行一次外循环后才执行i++。

for(表达式1;表达式2;表达式3)循环的执行过程:
1、先执行一次表达式1。

2、测试表达式2的结果,
如果为真,
则执行循环体,然后执行表达式3,然后重复执行2;
如果为假,
则退出循环。

追问

懂了,谢谢啦,哈哈哈

追答

不用谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-05
i++是先参与运算再自加没错,可i++都加完了,i=2,另外语句才sum+=i*i ,这里是语句分隔,不是运算分隔。
除非i=1
while(sum<10000)
{
sum+=i*i++ ;
}
这样才从1开始。追问

那这个程序
ink,i,j;
for(i=0;i<4;i++)
{for(k=1;k<=i;k++)
printf(" “)
后面省略啦
里面那个k<=i中第一次运行 i又是0 语句分隔的话i不是自加完了应该是1吗?

已经懂了,谢谢啦,哈哈哈

本回答被提问者采纳
第2个回答  2019-01-05
计算sum+=i*i时,i++的副作用在上一条语句中已发生,i已经自增结束,所以sum是从2*2开始算起的
第3个回答  2019-01-05
#include "stdio.h"
int factorsum(int number)
{
int i,sum=0;
for(i=1;i<=number/2;i++)
if(number%i==0)
sum+=i;
return sum;
}
void main()
{
int m,n;
int i;
while(1)
{
printf("请输入m和n:");
scanf("%d %d",&m,&n);
if(m<1||n>1000||m>n)
{
printf("输入错误,程序中止!\n");
break;
}
printf("从%d到%d的所有完数是:",m,n);
for(i=m;i<=n;i++)
if(i==factorsum(i))
printf("%d ",i);

printf("\n");

}
相似回答