C言語:表データから抽出・判定・計算

photo credit: After the Qualifying Rounds via photopin (license)
photo credit: After the Qualifying Rounds via photopin (license)
photo credit: After the Qualifying Rounds via photopin (license)

if,else,また,かつ,switchなどを勉強しました。
それらを組み合わせて、条件に一致したものを抽出したり、合計値を出したり、○×判定したり、と色々やりました。

ここまでできるようになると、楽しくなってきます。

以下、今日の復習です。

表データから抽出・判定・計算

結果表示

全データ表示
No 名前 血液型 国語 数学
 1 渡辺 A        30   24
 2 佐藤 B        48   49
 3 山田 O        17   32
 4 井上 O        41   38
 5 田中 A        10   29 

A型かB型の人のみ表示
No 名前 血液型 国語 数学
 1 渡辺 A        30   24
 2 佐藤 B        48   49
 5 田中 A        10   29 

合計点数が60点以上なら合格
No 名前 血液型 合計 合否
 1 渡辺 A      54   ×
 2 佐藤 B      97   ○
 3 山田 O      49   ×
 4 井上 O      79   ○
 5 田中 A      39   ×

それぞれの血液型は何人か?
O型の人数は2人
A型の人数は2人
B型の人数は1人

ソース


#include
int main(void){

    /* 宣言と初期化 */
    int i,j,ans,sumo,suma,sumb;
    int no[5]={1,2,3,4,5};
    char name[5][20]={"渡辺","佐藤","山田","井上","田中"};
    char blood[5]={'A','B','O','O','A'};
    int hai[5][2]={30,24,48,49,17,32,41,38,10,29};

    /* 全部表示 */
    printf("\n全データ表示\n");
    printf("%2s %4s %6s %4s %4s\n","No","名前","血液型","国語","数学");
    for(i=0;i<=4;i++){
        printf("%2d %4s %-6c ",no[i],name[i],blood[i]);
        for(j=0;j<=1;j++){
            printf("%4d ",hai[i][j]);
        }
        printf("\n");
    }

    /* A型かB型の人のみ表示 */
    printf("\nA型かB型の人のみ表示\n");
    printf("%2s %4s %6s %4s %4s\n","No","名前","血液型","国語","数学");
    for(i=0;i<=4;i++){
        if(blood[i]=='A'|blood[i]=='B'){
            printf("%2d %4s %-6c ",no[i],name[i],blood[i]);
            for(j=0;j<=1;j++){
                printf("%4d ",hai[i][j]);
            }
        printf("\n");
        }
    }   

    /* 合計点数が60点以上なら合格 */
    printf("\n合計点数が60点以上なら合格\n");
    printf("%2s %4s %6s %4s %4s\n","No","名前","血液型","合計","合否");
    for(i=0;i<=4;i++){
        printf("%2d %4s %-6c ",no[i],name[i],blood[i]);
        ans=0;
        for(j=0;j<=1;j++){
            ans=ans+hai[i][j];
        }
        if(ans>=60)
            printf("%-4d ○",ans);
        else
            printf("%-4d ×",ans);
        printf("\n");
    }

    /* それぞれの血液型は何人か? */
    printf("\nそれぞれの血液型は何人か?\n");
    sumo=0;
    suma=0;
    sumb=0;
    for(i=0;i<=4;i++){
        switch(blood[i]){
            case 'O':
                sumo=sumo+1;
                break;
            case 'A':
                suma=suma+1;
                break;
            case 'B':
                sumb=sumb+1;
                break;
        }
    }
    printf("O型の人数は%d人\n",sumo);
    printf("A型の人数は%d人\n",suma);
    printf("B型の人数は%d人\n",sumb);

    return 0;
}