峰.理子.罗宾旗袍:c语言问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 07:41:43
#include<stdio.h>
void main()
{
int i=0,s=0;
do{
if (i%2){i=i+2;}
i++;
s=s+i;
}while(i<7);
printf(“%d\n”,s);
}
结果得:18,这是怎样算出来的??
没有余数的是4,5,6 后面就不知道怎么算了

%是用来求余的,也就是求余数.
while(i<7)这句话控制着下面的循环,先执行第一遍操作,完以后判断是否满足i<7,不满足的话就运行下句printf(“%d\n”,s); 不再循环了.
第一次循环时i=0且s=0,0%2等于0,所以if(i%2)等同于if(0),0代表假,它就不能执行{i=i+2;}这条语句了,直接执行i++; 和s=s+i;所以i=1,s=1.
第二次循环时i等于1,i%2等于1,所以if(i%2)等同于if(1),除0外都代表真,它可以执行{i=i+2;}这条语句,i=3,然后再执行i++; 和s=s+i;得到i=4,s=5
第三次循环时i等于4,i%2等于0,同第一次循环,直接执行i++; 和s=s+i;所以i=5,s=10.
第四次循环时i等于5,i%2等于1, 所以同第二次一样,先执行{i=i+2;}得i=7, 再执行i++; 和s=s+i;得到i=8,s=18.
此时i大于了7,所以跳出循环.运行printf(“%d\n”,s); 输出值18了.

如果I%0的结果没有余数就运行下面的代码当I小于7时出结果

第一次循环时 i == 0,i%2 == 0,所以,i +=1, s+=1
第二次循环时 i == 1,i%2 == 1, 所以,i +=3, s+=4
第三次循环时 i == 4, i%2 == 0, 所以, i +=1, s+=5
第四次循环时 i == 5, i%2 == 1, 所以,i +=3, s+=8
然后 i > 7 成立跳出循环,s = 0+1+4+5+8 = 18

你这个程序总共进行了4次循环:
1、刚开始s=0 i=0,if不成立,最后i=1,s=s+i=1
2、s=1 i=1,if成立,所以,i=i+2=3,最后i=4 s=5
3、i=4 s=5,if不成立,最后i=5,s=s+i=10
4、s=10 i=5,if成立,所以,i=7,最后i=8 s=s+i=18
5、i>7,跳出循环

如果无法理解,用下面的代码运行一下就明白了

#include<stdio.h>
void main()
{
int i=0,s=0;

do
{
printf("out s=%d ",s);
printf("i=%d\n",i);
if(i%2!=0)
{
i=i+2;
printf("in i=%d\n",i);
}

i++;
s=s+i;

printf("last s=%d ",s);
printf("i=%d\n",i);
printf("end s=%d\n\n",s);
}while(i<7);

printf("s=%d\n",s);

getch();
}