有道c语言题请大神指点,并讲解一下运行过程,谢谢! main () {int i=0, s=0;
main ()
{int i=0, s=0;
for( ; ;)
{
if(i==3||i==5) continue;
if(i==6)break;
i++;
s+=i;
}
printf("%d\n", s);
}
程序运行后结果是( )
A 10 B 13 C 21 D 程序进入死循环 展开
这题应该是考continue和break的,就这题而言选D
continue是只结束本次循环,但是还是在这个大的循环里面,
例如这个if(i==3||i==5) continue;就是如果i等于3或者i等于5的时候,只是单单的结束这次循环,也就是不执行if(i==6)break;i++;s+=i;这些在for循环里面但是在他之后的东西,但是没有完全退出这个循环再次进入for循环里面,而你的for循环里面什么都没有也就是i的值会不变,也没有终止这个大循环的条件,那么当i由0慢慢倒3的时候满足if(i==3||i==5) continue;这个条件后,就会无限循环下去。原因就是i不变了(因为不执行在他之后的i++了),又没有终止的条件。所以会是无限循环。
break是结束这整个循环
例如还是你这个程序删除if(i==3||i==5) continue;后这个程序会输出的结果是21,因为break是结束这整个for的大循环,所以他执行到i等于6的时候,就跳出了整个for循环,那么s的值就是1+2+3+4+5+6=21
ps:(知道就忽略吧)
i++是每执行一次i的值加1
s+=i就是s=s+i
太给力了,你的回答完美解决了我的问题!
楼主你好!
我在你的程序里加入注释你应该就能明白了
main ()
{int i=0, s=0;
for( ; ;)//空的for循环隐含的内容是终止循环的条件应该是在下面的循环体里
{
if(i==3||i==5) continue;//i等于3和5的时候直接进行下一次循环
if(i==6)break;//i等于6的时候终止循环
i++;//i不等于3,5,6时,i加1
s+=i;
}
printf("%d\n", s);
}
i=0时i++
i=1时i++
i=2时i++
i=3时continue跳过本次循环也就是不执行i++,这时i永远等于3导致一直循环
答案是D
给你把出现标记了一下,,你可以自己运行一下:
int i=0, s=0;
for( ; ;)
{
if(i==3 || i==5) //由于当i=5的时候,不能继续往下执行i++,所以i会一直等于5,陷入死循环
{
cout << "b" << endl;
continue;
}
if(i == 6)
{
cout << "c" << endl;
break;
}
i++;
s+=i;
cout << "a" << endl;
}
printf("%d\n", s);
进入Main函数顺序执行语句,初始化i、s后,进入循环
i = 0;循环成立 i不等于3、5或6 不执行continue ,也不退出循环;i自增为1,s记录i的累加值也为1;
i = 1、2都满足上述条件 i自增为3,s记录i的累加值为1+2+3 = 6;
当i=3继续循环,到了if(i==3||i==5)continue;于是继续下一次循环,因为i值不变一直为3,所以程序一直循环。