您的位置:首页 > 其它

[初试]C学习笔记#001: 关于while循环的条件

2015-11-10 17:21 274 查看
今天的上机课回顾了选择和循环,对于while循环的理解加深了一步,码一下一个小例子供各位参考

下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,程序并不完整,哪个选项能使得程序能够实现该功能()

void main()
{
int i=0,j,k;
do
{

i++;
k=316-13*i;
}while(________);
j=k/11;
printf("316=13*%d+11*%d",i,j);
}


选择一项:

A. k%11

B. k%11==0

C. k/11

D. k/11==0

我选成了第二项。。下面具体分析一下:

A. k%11 这个对

B. k%11==0 这个不对,

(原因:这里是要保证括号里条件为假时i和j的值都已经正确找到

因此只有k和11相除整除时才为假,所以while得写成k%11。)

解释!

虽然这题出的是do - while,不过它的条件判断与while循环的条件判断是一码事,只是执行代码的顺序有先后的区别而已。

对于while循环,while()括号中的东西,当while(!0),即当“while真”时,继续执行循环,即:真时循环,且是个死循环;特别地,当while(0),就不循环,printf出的东西就是唯一一次do的东西。

而当你用“k%11”时,每个k都去判断一遍,while"1、2、3、……"都继续循环,直到"0"时跳循环。

而k%11==0,这是个表达式,当满足表达式时,去while循环,不满足就跳循环。

这也是为什么你用“k%11==0”这个去运行程序,输出的是i=1,j=27,因为do之后的判断,是如果满足k%11==0就去循环,不满足就跳,因为i=1时的k,=303,不满足k%11==0,所以跳循环了!这时j=27(已取整)

所以同理,把它改成k%11!=0就行了,你可以思考一下这是为什么~

while真和while表达式,这是两码事!记清楚喔!

就这个例子好好思考下:

之前说了打0及所得结果的原因,那么,

打1为什么没东西?因为一直在循环,跳不出循环,也就到不了printf,不会执行打印语句。

总结:

while真就循环,死循环;while0不循环

while表达式,表达式真(或者说表达式被满足),循环;表达式假(表达式未满足),跳出循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: