題目為:求陣列中第一個0值之前所有元素的總和
程式碼如下:
#include<stdio.h>
int main(){
int i, sum=0;
int arr[10]= {1,2,3,4,5,0,4,3,2,1};
for(i=0; i<=9; i++){
while(arr[i] != 0){
sum = sum + arr[i];
}
}
printf("總和為:%d", sum);
return 0;
}
不知道哪裡出問題了,我執行後沒有印出任何東西,
希望有人能幫我解答!
或是請問有其他較簡化的解法嗎?
非常感謝!!
while loop拿掉只留下 sum = sum + arr[i]; 在for loop裡面
你的while loop進入無窮迴圈了且這是沒有必要使用的loop因為
for loop改成這樣即可達到
每一次讀取array的一個值
並且將 sum存入=前一個迴圈的sum的值+上現在讀取array的值且判斷當arr[i]==0的時候就跳脫迴圈
for(i=0; i<=9; i++){
sum = sum + arr[i];
if(arr[i] ==0){
break;
}
}
不知道這樣是否有幫到你
補充一下:
為什麼會進入while loop會進入到無窮迴圈
由於您設的條件是while loop arr[i]!=0 就會執行 sum = sum+arr[i]
也就是說當你的for loop i=0的時候 arr[0] 它確實是會執行sum =sum +arr[0]
你的sum在在這時候確實是arr[0]的值但是你注意看你的while loop條件
第一圈的 for loop i=0
while loop arr[i]不等於0就執行 sum = sum+arr[i] 你這時候的i還是等於0所以您的
while loop會無窮循環 你可以在while loop裡面加上print(sum)就可以看到結果了
如果你想用while loop改寫 下面海綿寶寶大大的已經為您送上很好的範例了。
#include<stdio.h>
int main(){
int i, sum=0;
int arr[10]= {1,2,3,4,5,0,4,3,2,1};
while(arr[i] != 0){
sum = sum + arr[i];
i++;
if (i>9) {
break;
}
}
printf("總和為:%d", sum);
return 0;
}
while 是條件符合時,一直跑迴圈(原程式碼會造成無窮迴圈)
把它改成 if 才是只判斷一次
for(i=0; i<=9; i++){
if(arr[i] != 0){ // 這邊改 if
sum = sum + arr[i];
} else {
break;
}
}
其他寫法參考
for(i = 0; i < 10 && arr[i] != 0; i++) {
sum += arr[i];
}
求陣列中第一個0值之前所有元素的總和,int arr[10]= {1,2,3,4,5,0,4,3,2,1}
所以只計算1+2+3+4+5,到第6個0時,程式就結束!
for (i = 0; i <= 9; i++)
{
if (arr[i] != 0)
{
sum = sum + arr[i];
}
else
{
break;
}
}
#include<stdio.h>
int main(){
int i, sum=0;
int arr[10]= {1,2,3,4,5,0,4,3,2,1};
for(i=0; i<=9; i++){
while(arr[i] != 0){
sum = sum + arr[i];
printf("總和為:%d", sum); //此行已修改
}
}
return 0;
}
※把輸出項放入迴圈內,就可輸出螢幕了。