納得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になるまで繰り返します。
		
 
				 
					 
				 
				