課題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人