上星期群里剛上大一學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嗎?