構造体1

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

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]