main() {int i; for(i=1;i<=40;i++;){if(i++%5==0) if(++i%8==0)p)printf("%d",i);} )

main() {int i;
for(i=1;i<=40;i++;)
{if(i++%5==0)
if(++i%8==0)p) printf("%d",i);}
printf("/n")
}答案为什么是32?

这要看前加加和后加加在编译后的运行顺序。前加加,也就是++i,编译时编译成先自加1,然后在参与预算,而后加加,也就是i++,编译时编译成先参加运算在自加1。你给的程序的目的很明显,就是在1到40中选出一个数再打印出来。而如何选中这个数就看给的2个判断条件,一,i++%5==0;二,++i%8==0。当这两个条件同时满足时这个数就被选中。而这两个条件有先后顺序,第一个条件是后加加,也就是翻译成两句话:i%5==0(判断条件);i=i+1(运算)。而后面那个就翻译成两句话:i=i+1(运算);i%8==0(判断条件)。根据先后顺序,两个判断条件如果合到一起就变成{i%5==0;i=i+1;i=i+1;i%8==0},从左到右依次再合并变成三句话,{i%5==0;i=i+2;i%8==0;}再进一步合并就成了两个判断条件{i%5==0,(i=i+2)%8==0}。在1到40里,满足本身能被5整除,加2后又能被8整除的只有30,而经过加2后的赋值,i就由30变成32了。另外,你要注意的是这个循环,没个循环结束后i的值不是以1递增,也就是i的值不是1,2,3,4,5,6,7……这样变化的,而是1,2,3,4,5,8,9,10,13,14………也就是没遇到5的倍数下个就会加3,至于为什么我相信你肯定能想得懂的。^_^
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-27
从if(i++%5==0) 到 if(++i%8==0),i 一共加了2。这两句可以改成:
if(i%5==)
{
i++;
++i;
if(i%8==0)

所以你想想,0到40里有哪个数能被5整除,加2后又能被8整除?当然是30了,30加2就是32.追问

i++%5 是先运算i%5再自加是吧 我一直都不懂自加自减与其它运算符在一起时是先运算什么 怎么记啊

追答

i++是用完后再加;
++i是加完后再用;

本回答被提问者和网友采纳
第2个回答  2012-01-29
main(){
int i;
for(i=1;i<=40;i++)
{
if(i++%5==0)//首先楼主看这里,它判断i能否整除5,很明显当i=30时,if成立,然后i自增1,变成31
if(++i%8==0)//然后是这里,楼主要明确,++前缀自增操作符的优先级要比%高,所以i先自增1,i=32,然后判断i%==0,成立!
printf("%d",i);/打印出i,即32
}
第3个回答  2012-01-29
#include<stdio.h>
int main(void)
{
int i;
for(i=1;i<=40;i++){
if(i++%5==0) //这里先用i%5取余再++
if(++i%8==0) //这里是先i先++了在取余
printf("%d",i);
}
printf("\n");
return 0;
}
for里面的i++后面没有分号 第二格if后面没有p) 最后一个printf后面要有分号哦 至于为什么等于32,因为32满足if的条件 建议你自己调试一下

main() {int i; for(i=1;i<=40;i++) if(i++%5==0) if(++i%8==0) pr...
而后面那个就翻译成两句话:i=i+1(运算);i%8==0(判断条件)。根据先后顺序,两个判断条件如果合到一起就变成{i%5==0;i=i+1;i=i+1;i%8==0},从左到右依次再合并变成三句话,{i%5==0;i=i+2;i%8==0;}再进一步合并就成了两个判断条件{i%5==0,(i=i+2)%8==0...

main() {int i; for(i=1;i<=40;i++) if(i++%5==0) if(++i%8==0) pr...
你好!!!首先会循环40次:从i=1到i=40,当i=1;的时候,先执行if(i++%5==0),其中i++表示先是用i当前的值,然后在加一,即if(i++%5==0)等价于if(i%5==0),i++;显然i=1,不成立(此时i已经等于2了)那么就执行下次循环,此时的i=3了,还是、、、最后当i=30的时候,if(i++...

#include<stdio.h> main(){int i;for (i=1;i<5;i++)
首先i=1,i%2=1,执行printf(" * "),然后执行printf("#");,进入下一个循环;其次i=2,i%2=0,执行else continue,直接进入下一个循环;再次i=3,i%2=1,执行printf(" * "),然后执行printf("#");,进入下一个循环;第四i=4,i%2=0,执行else continue,直接进入下一个循环;第...

...main() { int i; for(i=0;i<5;++i) { if(i==3) { printf("%_百度知 ...
135 ~~~

for (i=1;i<=5;) printf("%d",i);i++;答案是啥
答案是死循环,因为对于for语句来说,有效循环体只有一个语句,如果循环体超过一个语句,需要用花括号包起来。

...int main() { int i; for(i=1;i++<4;); printf("%d\\n",i); }...
i++<4,是在进行判断后,再进行自加,当i=3时成立,此时i自加1,结束,再循环,当i=4时,不成立,当i还是要进行一次自加,所以答案是5

...main() { int i; for(i=1;i<=5;i++) { if(i%2) printf("*"); el...
if(i%2) 即i为奇数执行,但是要注意执行的有两处即printf("*");和printf("#");即当i=1时输出的是 *# 而不是 * 。i为偶数的时候,执行else continue;即跳过后面剩余循环体printf("#");直接i++,继续进行if判断。综上,i=1输出 *# ;i=2不输出;i=3输出 *# ;i=4不输出;i=5...

...main (){ int i; for (i=1;i++<=5; ); printf("%d",i); }i等于多...
i等于7。循环6次。i= 2 i++ = 1 i =:3 i++= 2i =4 i++ =3i = 5 i++= 4i = 6 i++= 5i = 7 i++= 6

main(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elescontinue;printf...
eles应为else ,结果为:“ *#*#*#$ ”然后换行。

、main( ){ int i; for(i=0;i<5;i++) {printf(“%d”,++i);
循环会i加到5,i值 ++i i++ 循环 1(输出1) 2 (输出1) 3 4 (输出4) 5 (输出4) over 所以结果为:1144

相似回答