2015年6月30日 星期二

d786:平均值 (29)

d786: 平均值 (29)

更新時間:2016/12/21
內容
  已知一n個元素的整數數列,計算出這組數列的平均值,四捨五入至小數第2位。
輸入說明
  第一行的數字,代表有幾組測試資料,第二行開始的每一行即為一筆測試資料。
  每一筆測試資料以空格分開數字:
    第一個整數為數列長度n,其範圍為[1,100]的整數;
    接下來的n個整數,其範圍為[-10000, 10000]的整數。
輸出說明
  對每一筆測試資料,以一行輸出平均數,並四捨五入至小數第2位。
範例輸入
  2
  5 2 4 6 8 10
  3 52 30 61
範例輸出
  6.00
  47.67



想一想,再看解答~


我的解題想法
  使用兩層for迴圈,必須要注意除法(/)的運算結果。
    整數 / 整數 = 整數
    小數 / 整數 = 小數
    整數 / 小數 = 小數
    小數 / 小數 = 小數

程式碼
#include <stdio.h>
int main(void){
    int t,n,tmp,sum;
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        scanf("%d",&n);
        sum = 0;
        for(int j=0;j<n;j++){
            scanf("%d",&tmp);
            sum += tmp;
        }
        printf("%.2f\n",sum/(double)n);
    }
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告4個整數(int)變數「t」、「n」、「tmp」、「sum」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「t」。
#5:外層迴圈 for 開始。區域變數「i」,從 0 開始到小於 t 結束 (int i=1;i<=t;i++)。
#6:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。
#7:變數 sum 指定值為 0。
#8:內層迴圈 for 開始。區域變數「j」,從 0 開始到小於 n 結束 (int j=1;j<=n;j++)。
#9:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「tmp」。
#10:變數 sum 累加 tmp 的值。
#11:內層迴圈 for 結束。
#12:將格式化數據顯示到標準輸出。輸出1個浮點數,取到小數點第2位(%.2lf)「sum/(double)n」。
(double)n:把整數 n 轉換型別為 倍浮點數。
#13:外層迴圈 for 結束。
#14:主程式回傳整數「0」。
#15:主程式結束。