課題1
下記のプログラムでは、学生の成績データを構造体として取り扱っている。下記のプロ グラムをstruct1.cとして作成し、コンパイルして、正しく実行されるか確認せよ。
#include <stdio.h> #define NUM 4 int main(void) { int i; struct student{ char name[20]; int english; int math; int japanese; }; static struct student data[]={{"佐藤", 82, 72, 58}, {"秋山", 77, 82, 79}, {"永田", 52, 62, 39}, {"藤田", 61, 82, 88}}; for(i=0; i<NUM; i++){ printf("%10s: 英語=%3d 数学=%3d 国語=%3d\n", data[i].name, data[i].english, data[i].math, data[i].japanese); } return 0; }
(実行結果) hp3225[susaki]502:~/program% ./a.out 佐藤: 英語= 82 数学= 72 国語= 58 秋山: 英語= 77 数学= 82 国語= 79 永田: 英語= 52 数学= 62 国語= 39 藤田: 英語= 61 数学= 82 国語= 88
課題2
上記の課題1のうち、構造体に平均点のメンバを加えて、各学生の3科目の平均点を 表示したい。下記のプログラムのうち、*******で隠された部分を補って struct2.cとしてプログラムを完成させ、正しく実行されるか確認せよ。
#include <stdio.h> #define NUM 4 int main(void) { int i; struct student{ char name[20]; int english; int math; int japanese; double ave; }; static struct student data[]={{"佐藤", 82, 72, 58}, {"秋山", 77, 82, 79}, {"永田", 52, 62, 39}, {"藤田", 61, 82, 88}}; for(i=0; i<NUM; i++){ /* 3科目の平均点を求める */ ********************************************** printf("%10s: 英語=%3d 数学=%3d 国語=%3d : 平均=%6.2f\n", data[i].name, data[i].english, data[i].math, data[i].japanese, data[i].ave); } return 0; }
(実行結果) hp3225[susaki]504:~/program% ./a.out 佐藤: 英語= 82 数学= 72 国語= 58 : 平均= 70.67 秋山: 英語= 77 数学= 82 国語= 79 : 平均= 79.33 永田: 英語= 52 数学= 62 国語= 39 : 平均= 51.00 藤田: 英語= 61 数学= 82 国語= 88 : 平均= 77.00
課題3
上記の課題2に修正を加えて、各科目の平均点を 表示したい。下記のプログラムのうち、*******で隠された部分を補って、正しく実行 されるか確認せよ。
#include <stdio.h> #define NUM 4 int main(void) { int i; struct student{ char name[20]; int english; int math; int japanese; double ave; }; static struct student data[]={{"佐藤", 82, 72, 58}, {"秋山", 77, 82, 79}, {"永田", 52, 62, 39}, {"藤田", 61, 82, 88}}; double ave_english, ave_math, ave_japanese; ave_english = ave_math = ave_japanese = 0.0; /* 各科目の平均点を求める */ ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** for(i=0; i<NUM; i++){ /* 3科目の平均点を求める */ ********************************************** printf("%10s: 英語=%3d 数学=%3d 国語=%3d : 平均=%6.2f\n", data[i].name, data[i].english, data[i].math, data[i].japanese, data[i].ave); } printf("-------------------------------------------------------\n"); printf(" 平均: 英語=%5.1f 数学=%5.1f 国語=%5.1f\n", ave_english, ave_math, ave_japanese); return 0; }
(実行結果) hp3225[susaki]506:~/program% ./a.out 佐藤: 英語= 82 数学= 72 国語= 58 : 平均= 70.67 秋山: 英語= 77 数学= 82 国語= 79 : 平均= 79.33 永田: 英語= 52 数学= 62 国語= 39 : 平均= 51.00 藤田: 英語= 61 数学= 82 国語= 88 : 平均= 77.00 ------------------------------------------------------- 平均: 英語= 68.0 数学= 74.5 国語= 66.0
課題4
上記の課題3に修正を加えて、各学生の平均点に基づき、下記の表のように成績をつ けたい。
得点 | 成績 |
---|---|
90点以上100点 | S |
80点以上90点未満 | A |
70点以上80点未満 | B |
60点以上70点未満 | C |
60点未満 | D |
各学生の成績をつけたうえで、S, A, B, C, Dごとの人数も表示したい。 下記のプログラムのうち、*******で隠された部分を補ってstruct4.cとして プログラムを作成し、正しく実行されるか確認せよ。
#include <stdio.h> #define NUM 4 int main(void) { int i; struct student{ char name[20]; int english; int math; int japanese; double ave; char grade; }; static struct student data[]={{"佐藤", 82, 72, 58}, {"秋山", 77, 82, 79}, {"永田", 52, 62, 39}, {"藤田", 61, 82, 88}}; double ave_english, ave_math, ave_japanese; int num_S, num_A, num_B, num_C, num_D; ave_english = ave_math = ave_japanese = 0.0; num_S = num_A = num_B = num_C = num_D = 0; /* 各科目の平均点を求める */ ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** for(i=0; i<NUM; i++){ /* 3科目の平均点を求める */ ********************************************** /* 平均点を元に成績をつける */ /* 同時に、S, A, B, C, Dごとの人数を数える */ ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** ********************************************** printf("%10s: 英語=%3d 数学=%3d 国語=%3d : 平均=%6.2f -> 成績=%c\n", data[i].name, data[i].english, data[i].math, data[i].japanese, data[i].ave, data[i].grade); } printf("-------------------------------------------------------\n"); printf(" 平均: 英語=%5.1f 数学=%5.1f 国語=%5.1f\n", ave_english, ave_math, ave_japanese); printf("成績\n"); printf(" S: %3d人\n", num_S); printf(" A: %3d人\n", num_A); printf(" B: %3d人\n", num_B); printf(" C: %3d人\n", num_C); printf(" D: %3d人\n", num_D); return 0; }
(実行結果) hp3225[susaki]508:~/program% ./a.out 佐藤: 英語= 82 数学= 72 国語= 58 : 平均= 70.67 -> 成績=B 秋山: 英語= 77 数学= 82 国語= 79 : 平均= 79.33 -> 成績=B 永田: 英語= 52 数学= 62 国語= 39 : 平均= 51.00 -> 成績=D 藤田: 英語= 61 数学= 82 国語= 88 : 平均= 77.00 -> 成績=B ------------------------------------------------------- 平均: 英語= 68.0 数学= 74.5 国語= 66.0 成績 S: 0人 A: 0人 B: 3人 C: 0人 D: 1人