Problem J: 學生成績統計表

Problem J: 學生成績統計表

Time Limit: 1 Sec  Memory Limit: 16 MB
Submit: 902  Solved: 416
[Submit][Status][Web Board]

Description

在學校裏經常見到的成績表,表的每行是一個學生的成績,每列是各個科目的成績。如下表所示。

你的任務是:輸入這樣的成績表,統計出每個學生的總成績和各個科目的平均成績。如下表所示。

Input

第一行爲兩個整數m,n,0<m<=50、0<n<=10,表示有m個學生和n個成績。

後面有m+1行n+1列的一個表,表的第1行和第1列都是不含空白符的字符串,表的各列用若干空格分隔,表的各行用一個回車分隔。第1行的2~n+1列是各個科目的名字。第2~m+1行1列爲學生姓名。第2行2列開始到第m+1行、n+1列爲各學生的各科目成績(浮點數)。

Output

輸出爲一張表,表的大小爲m+2行、n+2列,其中前m+1行n+1列的數據與輸入相同。

表的最右側一列爲學生各科目成績的總和,該列第1行的標題是“sum”。

表的最下面一行爲各科目的所有學生平均成績,該行的第1列標題是“average”。

表的第1列輸出爲8個字符左對齊,後面每列爲5個字符右對齊,兩列之間有2個空格。表的所有數據項(除第1行和第1列外)都輸出爲保留1位小數。表的每行用一個回車分隔,表的最右邊一列的數據項後沒有空格。

請注意:表的最右下角那項沒有定義,不輸出!最後1行的輸出至最右一個科目的平均分結束,該行最後有回車。

Sample Input

10 6name SCI TECH COM CS106 SE309 CS101Tom 88 77 66 55 44 33Jerry 50 100 60 100 50 100Zhang3 90 95.5 60 75 82 18Li4 38 45 62 29 74 85Wang5 88 75 63 36 99 33.3Zhao6 99 99 99.5 97.5 42 100Liu7 80 80 80.5 81.5 82.5 83Wang8 7 6 5 4 3 2Song9 10 20 30 40 50 60Ma10 74 79.5 73 71 70 77

Sample Output

name SCI TECH COM CS106 SE309 CS101 sumTom 88.0 77.0 66.0 55.0 44.0 33.0 363.0Jerry 50.0 100.0 60.0 100.0 50.0 100.0 460.0Zhang3 90.0 95.5 60.0 75.0 82.0 18.0 420.5Li4 38.0 45.0 62.0 29.0 74.0 85.0 333.0Wang5 88.0 75.0 63.0 36.0 99.0 33.3 394.3Zhao6 99.0 99.0 99.5 97.5 42.0 100.0 537.0Liu7 80.0 80.0 80.5 81.5 82.5 83.0 487.5Wang8 7.0 6.0 5.0 4.0 3.0 2.0 27.0Song9 10.0 20.0 30.0 40.0 50.0 60.0 210.0Ma10 74.0 79.5 73.0 71.0 70.0 77.0 444.5average 62.4 67.7 59.9 58.9 59.6 59.1

[這道題目的坑爹之處很多,首先輸入可能是不規則的,即兩列之間的空格不一定是幾個,所以不能直接輸入輸出,第二個是第一行的輸出,尤其是name的輸出需要注意,其他的部分要做好細節處理,比如每行的name,用二維數組時候要注意是double類型,同時注意輸出格式第一列和其他列是不一樣的。好了,上代碼:]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int rr,cc;
    char top[1000],temp[100];
    int i,k;
    char name[20];
    double a[100][100],sum = 0;
    scanf("%d%d",&rr,&cc);
    getchar();
    //printf("r = %d,c = %d\n",rr,cc);

    for(i = 0; i <= cc; i++)
    {
        memset(temp,0,sizeof(temp));
        scanf("%s",temp);
        if(i != 0)
            printf("%5s  ",temp);
        else
            printf("name      ");

    }
    printf("  sum\n");
    //printf("r = %d,c = %d\n",rr,cc);
    for(k = 0; k < rr; k++)
    {
        //------------------------------- save name
        memset(name,0,sizeof(name));
        scanf("%s",name);
        //------------------------------- save && plus the grade
        sum = 0;
        for(i = 0; i < cc; i++)
        {
            scanf("%lf",&a[k][i]);
            sum += a[k][i];
        }
        //------------------------------- out name
        printf("%-8s  ",name);//-8 !

        //------------------------------- out the grade
        for(i = 0; i < cc; i++)
            printf("%5.1lf  ",a[k][i]);// +5!
        printf("%5.1lf\n",sum);
    }
    printf("average   ");
    for(i = 0; i < cc-1; i++)
    {
        sum = 0;
        for(k = 0; k < rr; k++)
            sum += a[k][i];
        printf("%5.1lf  ",(double)sum/rr);
    }
    sum = 0;
    for(k = 0; k < rr; k++)
        sum += a[k][cc-1];
    printf("%5.1lf\n",(double)sum/rr);

    return 0;
}


發佈了39 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章