ほぷしぃ

納得C言語!

[第15回]演習問題W 第2問の解答

演習問題W 第2問の解答


2 社員の平均給与

解答プログラム

#include <stdio.h>

// 構造体(3か月分の給与)
struct kyuyo
{
    int kyu_apl;    // 4月分
    int kyu_mar;    // 5月分
    int kyu_jun;    // 6月分
};

// 構造体(社員)
struct shain
{
    int no;                // 社員番号
    char name[256];        // 社員名
    char busyo[256];       // 部署名
    char fp[256];          // 役職
    struct kyuyo money;    // 給与(構造体)
};

// 関数のプロトタイプ宣言
void money_avg(struct shain *p);

int main()
{
    int i = 0;

    struct shain list[256];

    struct shain *p;
    p = list;

    //社員データ入力
    //説明は(1)でやっているので省略します
    while(1){
        printf("社員番号:");
        scanf("%d",&(p+i)->no);

        if((p+i)->no==0){
            break;
        }

        printf("社員名:");
        scanf("%s",(p+i)->name);
        printf("部署:");
        scanf("%s",(p+i)->busyo);
        printf("役職:");
        scanf("%s",(p+i)->fp);
        printf("給与\n");
        printf("4月:");
        scanf("%d",&(p+i)->money.kyu_apl);
        printf("5月:");
        scanf("%d",&(p+i)->money.kyu_mar);
        printf("6月:");
        scanf("%d",&(p+i)->money.kyu_jun);
        i++;
        printf("\n");
    }

    //社員表表示
    //説明は省略
    printf("                      給与\n");
    printf("社員番号   氏名  部署 役職   4月   5月   6月\n");

    for(i=0;(p+i)->no!=0;i++)
        {
        printf("%8d%11s%8s%6s%10d%10d%10d\n",
            (p+i)->no,
            (p+i)->name,
            (p+i)->busyo,
            (p+i)->fp,
            (p+i)->money.kyu_apl,
            (p+i)->money.kyu_mar,
            (p+i)->money.kyu_jun
            );
    }

    money_avg(p);
    return 0;
}

//各社員の平均給与
void money_avg(struct shain *p)
{
    int sum=0,i=0;

    printf("\n社員ごとの平均給与\n");

    //(p+i)->noがになるまで続ける
    while((p+i)->no!=0){
        //sumに,5,6月分の給与を格納
        sum = (p+i)->money.kyu_apl + (p+i)->money.kyu_mar + (p+i)->money.kyu_jun;

        //平均を表示
        //このとき直接計算式を書いてもOKです
        printf("%8s\t%6d\n",(p+i)->name,sum/3);

        //sumの初期化
        sum=0;
        i++;
    }
    printf("終了");
}

解説

入力と表示は(1)と同じですね。

社員の平均ということで、今回は自作関数内で計算し、表示を行っています。
変数sumに4,5,6月分の給与を代入し、printfで表示させています。
printf内で計算を行っていますが、表示されるときは計算された結果が出力されます。
これを、while文で社員番号が0になるまで繰り返します。


ヒント ページのトップ 第3問