納得C言語!
演習問題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になるまで繰り返します。