这道题答案为啥是32?

来源:百度知道 编辑:UC知道 时间:2024/06/24 22:51:22
main()
{ int i;
for(i=j;i<=40;i++)
{if(i++%5==0)
if++i%8==0) printf("%d",i);
}
printf("\n");
}

老大,你这个程序错误不少呢,我按照正确的思路给你理一理,你看看能不能懂:首先呢,那个j应该改成1,其次第二个if语句少了一个左括号。
i从1遍历到40,for语句中需要同时满足两个if语句的条件才能输出,下面一一分析吧:
首先第一个条件:i++%5==0,满足条件的i有:5,10,15,20,25,30,35,40;
注意!!此条语句计算之后,i的值要加1,所以对应的i的值就是:
6,11,16,21,26,31,36,41
再看第二个判断:
++i%8==0
此条语句是:先将i的值加1,在做计算:
对应的值是:
7,12,17,22,27,32,37,42
这里面只有32%8==0;
所以输出结果是32。
注:这里采用这种分析法,不代表程序执行顺序是这样...

j是什么东西?
好吧,假设j=0;
当i=30时,
if(i++%5==0)等价于if(i%5==0){};i++;
成立,所以i=31
if(++i%8==0)等价于++i; if(i%8==0){};
也就是说,i先加到32,再判断是否整除,ok?