📚 知識家圖書館 奇摩知識+ 紀念館

有關C 語言正負數的問題?

發問者 智銘 (Lv.1) ・2007 年 8 月 11 日 ・程式設計

讓使用者重複輸入整數,當輸入9999時,表示輸入結束。 計算並印出這些輸入數字中「所有正整數的平均值」。 不包含零及負數。 輸入整數 2 輸入整數 5 輸入整數 -3 輸入整數 8 輸入整數 9999 平均值是 5.000 以下是自己寫的,不知哪裡寫錯了,各位大大能幫個忙。 #include<stdio.h> #include<stdlib.h> int main(int argc, char* argv[]) { int i,j,num[20],count=0; float sum=0; for(i=0;i<=19;i++) { printf("輸入整數(最多20個整數):"); scanf("%d",&num[i]); if(num[i] == 9999) break; } for(i=0;i<=num[i];i++) { if(num[i]>0 && num[1]!=9999) { sum=sum+num[i]; count++; } else continue; } sum=sum/count; printf("平均值是:%f\n",sum); system("pause"); return 0; }

2 則回答

最佳解答
看一下這段 for(i=0;i<=num[i];i ) { if(num[i]>0 && num[1]!=9999) { sum=sum num[i]; count ; } else continue; } num[1]!=9999 把他改成num[i]!=9999,你不小心打錯 你主要錯誤的地方在以下 你在 for(i=0;i<=num[i];i ) { if(num[i]>0 && num[i]!=9999) { sum=sum num[i]; count ; } else continue; } 這段的上方加入以下程式碼 for(i=0;i<20;i++) printf("%d\n",num[i]); 把陣列中的值都看一下 你大概就明白了 2007-08-12 18:44:07 補充: 你的想法是 宣告陣列,把值放入,然後用9999當結束,ok 假設像你題目一樣 輸入整數 2 輸入整數 5 輸入整數 -3 輸入整數 8 輸入整數 9999 那麼 num[0]會是2 num[1]會是5 num[2]會是-3 num[3]會是8 num[4]會是9999 那麼num[5] , num[6] ... num[19] 的值是多少呢?? 他們是一堆垃圾值 在來看你求總和的方法 你求總和的方法是 找出 [陣列中所有] 非負數 且 非9999 的 值 之總和 所以~~ 你會把那些垃圾值也加進去 解決方法 1.在一開始輸入整數之前,把陣列的所有值都初始為0 或 2.在做總和的時候,遇到9999就直接break(而不是continue)
adam!(Lv.5) 2007 年 8 月 11 日
你有宣告j,就拿來用吧~你在加總的那段可以改成這樣 for(j=0;j<=19;j++) { if (num[j]>0) { if(j!=i) { sum=sum+num[j]; count++; } else break; } } 不過事實上,這樣的程式最多只能輸入19個整數,因為要輸入9999,表示輸入結束
這個世界越來越爛(Lv.4) 2007 年 8 月 11 日

電腦與網際網路的其他問題