普通的随笔罢了
上星期群里刚上大一学c语言的朋友问了一道题目,要求是这样的:
“循环输入一串数字,当输入到-1为止,将-1前的所有数据求和并求出平均数,并保留两位小数”
例如
“输入:1,2,3,-1 输出:2.00”
“输入:-1 输出:无数据”
因为不定数输入的问题,很显然对于刚学到if,for,while的大一新生来说有些困难,所以在这边聊一下关于老师不让你写的“死循环”和不建议去写的“break”的问题。
那么就有人问了:砖!什么是死循环呢?
死循环简单讲就是一个永久停不下来的循环,典型的死循环问题就是“套娃”(x)。
正经的讲,循环是怎么进行的呢?例如while循环的用法规则,while(条件){语句}
条件给的返回值是一个布尔值,常用的布尔值有:True,False,0,1
对于while来说条件处于True或者1时,就会进行循环体内的语句,而条件处于False或者0时它就会停止循环,
那么如果条件一直为True它将一直进行循环,一直进行循环体中的语句(就会和你的电脑比谁命长)这种循环就是死循环。
例如:
int i =1;
while(i == 1){语句}
这里的i == 1
返回值为布尔值True
,也就是说如果不改变i
的数据它会一直循环到天荒地老。
你想让这个循环停下来也很简单,只需要让while内的条件也就是 i == 1
的返回值变为False就好。
例如:
int i = 1;
while(i==1){
i = 2;
}
如果放在这个题目中也不失为一种解法,不过这偏离死循环和break的主题了。
下面就扯一下break的使用了:break
在循环中的用法是跳出当前循环,原理很简单,当你认为一个循环该停了以后就可以break掉它
例如:
while(true){
break;
}
啪,很快啊,这小伙子(x)这小循环直接就停掉了
break有个特性就是仅能跳出当前执行的循环
例如这一部分代码:
while(true){
for(i = 1;i<5;i++){
break;
}
}
这个一个break并不能跳出while循环,当执行到break时他会从for循环中跳到while循环中继续进行while循环注:if不是循环
如果全部跳出则需要:
while(true){
for(i = 1;i<5;i++){
break;
}
break;
}
下面就是关于这些的操作实例,拿朋友问我的那道题做演示:
1、题目要求是做一个循环输入,这里用到了一个while(true)去做一个所谓的死循环
2、当输入到-1时需要做一个循环跳出,于是拿一个if做条件判断进行break操作
具体代码如下:
#include <stdio.h>
int main()
{
int in ;
float i = 0 ,key, sum =0;
while(true){/*死循环*/
scanf("%d",&in);
if (in == -1){/*对输入的值进行判断*/
break;/*跳出while循环*/
}
sum = sum + in;
i = i + 1;
}
if (i != 0){/*对计数i的数值进行判断,如果有则输出平均数key,如果没有数据(指第一个数据就输入了-1)则输出无数据*/
key = sum/i;
printf("%.2f",key);
}
else{
printf("无数据");
}
return 0;
}
所以0的存在本身就是一个False,有1吗?