第9回演習:解答例


(1)次に示す生徒の情報を構造体として作成し,内容を関数(値参照)を用いて表示しなさい.

番号 氏名 点数 成績
1 内田 85 B


#include <stdio.h>

struct seiseki {
    int bangou;
    char simei[25];
    int ten;
    char hantei;
};

void disp_all(struct seiseki seito)
{
    printf("番号¥t氏名¥t点数¥t成績¥n");
    printf("%d¥t%s¥t%d¥t%c¥n",seito.bangou,seito.simei,seito.ten,seito.hantei);
}

void main()
{
    struct seiseki seito = {1, "内田", 85, 'B'};
    disp_all(seito);
}

(2)次に示す複数の生徒の情報を構造体として作成し,内容を関数(アドレス参照)を用いて表示しなさい.

番号 氏名 点数 成績
1 内田 85 B
2 梅田 59 F
3 鈴木 98 S

#include <stdio.h>

struct seiseki {
    int bangou;
    char simei[25];
    int ten;
    char hantei;
};

void disp_all(struct seiseki *p, int n)
{
    int i;

    printf("番号¥t氏名¥t点数¥t成績¥n");
    for(i=0;i<n;i++){
    	printf("%d¥t%s¥t%d¥t%c¥n",(*(p+i)).bangou,(*(p+i)).simei,(*(p+i)).ten,(*(p+i)).hantei);
    }

}

void main()
{
    struct seiseki seito[3] = {{1, "内田", 85, 'B'},
                               {2, "梅田", 59, 'F'},
                               {3, "鈴木", 98, 'S'}};
    disp_all(seito,3);
}

(3)次に示す複数の生徒の情報を構造体として作成し,平均値と成績を求めるプログラムを作成せよ.
*main文に表に示す初期条件を入れること*

番号 氏名 第1回 第2回 第3回 第4回 平均 成績
1 内田 85 74 63 90 0.0 ?
2 若林 78 65 70 62 0.0 ?
3 鈴木 89 92 88 76 0.0 ?
4 梅田 32 48 66 25 0.0 ?
5 堀越 92 98 90 95 0.0 ?

成績判定には,以下の表を利用しなさい.

点数 成績
90点以上 S
80点以上90点未満 A
70点以上80点未満 B
60点以上70点未満 C
60点未満 F


#include <stdio.h>

struct seiseki {
    int bangou;
    char simei[25];
    int ten_1;
    int ten_2;
    int ten_3;
    int ten_4;
    float heikin;
    char hantei;
};

void disp_all(struct seiseki *p, int n)
{
    int i;

    printf("番号¥t氏名¥t第1回¥t第2回¥t第3回¥t第4回¥t平均¥t成績¥n");
    for(i=0;i<n;i++){
    	printf("%d¥t%s¥t%d¥t%d¥t%d¥t%d¥t%.1f¥t%c¥n",(*(p+i)).bangou,(*(p+i)).simei,(*(p+i)).ten_1,(*(p+i)).ten_2,(*(p+i)).ten_3,(*(p+i)).ten_4,(*(p+i)).heikin,(*(p+i)).hantei);
    }
    
    printf("¥n");

}

void ave(struct seiseki *p, int n)
{
	int i;
	
    for(i=0;i<n;i++){
	(*(p+i)).heikin = ((*(p+i)).ten_1+(*(p+i)).ten_2+(*(p+i)).ten_3+(*(p+i)).ten_4)/4;
    }

}

void seiseki(struct seiseki *p, int n)
{
	int i;
	
    for(i=0;i<n;i++){
    	if((*(p+i)).heikin >= 90){
    		(*(p+i)).hantei = 'S';
    	} else if((*(p+i)).heikin >= 80){
    		(*(p+i)).hantei = 'A';
    	} else if((*(p+i)).heikin >= 70){
    		(*(p+i)).hantei = 'B';
    	} else if((*(p+i)).heikin >= 60){
    		(*(p+i)).hantei = 'C';
    	} else {
    		(*(p+i)).hantei = 'F';
    	}
    }

}

void main()
{
	struct seiseki seito[5] = {{1,"内田",85,74,63,90,0.0,'?'},
				   {2,"若林",78,65,70,62,0.0,'?'},
				   {3,"鈴木",89,92,88,76,0.0,'?'},
				   {4,"梅田",32,48,66,25,0.0,'?'},
				   {5,"堀越",92,98,90,95,0.0,'?'}};

	disp_all(seito,5);
	ave(seito,5);
	seiseki(seito,5);
	disp_all(seito,5);
}

(4)(3)で表示されている生徒の情報をファイル(seiseki.csv)に保存するプログラムを作成せよ.


#include <stdio.h>
 
struct seiseki {
    int bangou;
    char simei[25];
    int ten_1;
    int ten_2;
    int ten_3;
    int ten_4;
    float heikin;
    char hantei;
};

void disp_all(struct seiseki *p, int n)
{
    int i;

    printf("番号¥t氏名¥t第1回¥t第2回¥t第3回¥t第4回¥t平均¥t成績¥n");
    for(i=0;i<n;i++){
    	printf("%d¥t%s¥t%d¥t%d¥t%d¥t%d¥t%.1f¥t%c¥n",(*(p+i)).bangou,(*(p+i)).simei,(*(p+i)).ten_1,(*(p+i)).ten_2,(*(p+i)).ten_3,(*(p+i)).ten_4,(*(p+i)).heikin,(*(p+i)).hantei);
    }
    
    printf("¥n");

}

void ave(struct seiseki *p, int n)
{
	int i;
	
    for(i=0;i<n;i++){
	(*(p+i)).heikin = ((*(p+i)).ten_1+(*(p+i)).ten_2+(*(p+i)).ten_3+(*(p+i)).ten_4)/4;
    }

}

void seiseki(struct seiseki *p, int n)
{
	int i;
	
    for(i=0;i<n;i++){
    	if((*(p+i)).heikin >= 90){
    		(*(p+i)).hantei = 'S';
    	} else if((*(p+i)).heikin >= 80){
    		(*(p+i)).hantei = 'A';
    	} else if((*(p+i)).heikin >= 70){
    		(*(p+i)).hantei = 'B';
    	} else if((*(p+i)).heikin >= 60){
    		(*(p+i)).hantei = 'C';
    	} else {
    		(*(p+i)).hantei = 'F';
    	}
    }

}

void write(struct seiseki *p, int n)
{
    int i;

    FILE *fp;

    fp = fopen("seiseki.csv", "w");
    if(fp == NULL){
    	printf("ファイルを作れませんでしたorz¥n");
    	return;
    }

    fprintf(fp, "番号,氏名,第1回,第2回,第3回,第4回,平均,成績¥n");
    for(i=0;i<n;i++){
    	fprintf(fp, "%d,%s,%d,%d,%d,%d,%f,%c¥n",(*(p+i)).bangou,(*(p+i)).simei,(*(p+i)).ten_1,(*(p+i)).ten_2,(*(p+i)).ten_3,(*(p+i)).ten_4,(*(p+i)).heikin,(*(p+i)).hantei);
    }

    fclose(fp);

}

void main()
{
	struct seiseki seito[5] = {{1,"内田",85,74,63,90,0.0,'?'},
				   {2,"若林",78,65,70,62,0.0,'?'},
				   {3,"鈴木",89,92,88,76,0.0,'?'},
				   {4,"梅田",32,48,66,25,0.0,'?'},
				   {5,"堀越",92,98,90,95,0.0,'?'}};

	disp_all(seito,5);
	ave(seito,5);
	seiseki(seito,5);
	disp_all(seito,5);
	write(seito,5);
}