第15講 構造体の学習

第3話 構造体
具体的な事例を挙げてから、
構造体の宣言の仕方を説明します。
#include<stdio.h>
void f(); //平均点計算
void g(); //データ表示
struct seiseki{ //構造体seisekiの宣言
  char kurasu; //クラス
  char bangou; //出席番号
  char namae[30]; //名前
  char kokugo; //国語の成績
  char syakai; //社会の成績
  char sansu; //算数の成績
  char rika; //理科の成績
  double heikin; //4教科平均点
};

struct seiseki seito1={1,1,"赤角 一郎",78,45,32,23}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito2={1,2,"伊澤 麗子",95,98,99,98}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito3={1,3,"伊丹 寿蔵",18,15,13,16}; //構造体seisekiの具体化と理科の成績までの代入

int main(){
  f(); //平均点計算
  g(); //データ表示
  return(0);
}
void f(){ //平均点計算
  seito1.heikin=
(double)(seito1.kokugo+seito1.syakai+seito1.sansu+seito1.rika)/4;
  seito2.heikin=(double)(seito2.kokugo+seito2.syakai+seito2.sansu+seito2.rika)/4;
  seito3.heikin=(double)(seito3.kokugo+seito3.syakai+seito3.sansu+seito3.rika)/4;
}
void g(){ //データ表示
  printf("組 出席番号   名前   国語 社会 算数 理科 平均点\n");
  printf("%d組  %d番  %s   %d  %d  %d  %d  %.1f\n",seito1.kurasu,seito1.bangou,seito1.namae,seito1.kokugo,seito1.syakai,seito1.sansu,seito1.rika,seito1.heikin);
  printf("%d組  %d番  %s  %d  %d  %d  %d  %.1f\n",seito2.kurasu,seito2.bangou,seito2.namae,seito2.kokugo,seito2.syakai,seito2.sansu,seito2.rika,seito2.heikin);
  printf("%d組  %d番  %s  %d  %d  %d  %d  %.1f\n",seito3.kurasu,seito3.bangou,seito3.namae,seito3.kokugo,seito3.syakai,seito3.sansu,seito3.rika,seito3.heikin);
}
コピペ用添付ファイル
実行結果
007

構造体は、C++ではクラス(型)に発展しています。
型は変数のデータのタイプという意味とは違い、
むしろ鯛焼きの型の型をイメージした方がよいのです。
型から鯛焼きを作りますね。
それと同じで、ひな形から具体的なものを作り出します。
struct seiseki{ //構造体seisekiの宣言
  char kurasu; //クラス
  char bangou; //出席番号
  char namae[30]; //名前
  char kokugo; //国語の成績
  char syakai; //社会の成績
  char sansu; //算数の成績
  char rika; //理科の成績
  double heikin; //4教科平均点
};

が鯛焼きの型で、
struct seiseki seito1={1,1,"赤角 一郎",78,45,32,23}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito2={1,2,"伊澤 麗子",95,98,99,98}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito3={1,3,"伊丹 寿蔵",18,15,13,16}; //構造体seisekiの具体化と理科の成績までの代入

がその型から作った鯛焼きです。

異なる例えでいうと、
設計書と車の関係です。
設計書の基づいて、車という実体を作り出します。
struct seiseki{ //構造体seisekiの宣言
  char kurasu; //クラス
  char bangou; //出席番号
  char namae[30]; //名前
  char kokugo; //国語の成績
  char syakai; //社会の成績
  char sansu; //算数の成績
  char rika; //理科の成績
  double heikin; //4教科平均点
};

が設計書で、
それを実体化したのが、
struct seiseki seito1={1,1,"赤角 一郎",78,45,32,23}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito2={1,2,"伊澤 麗子",95,98,99,98}; //構造体seisekiの具体化と理科の成績までの代入
struct seiseki seito3={1,3,"伊丹 寿蔵",18,15,13,16}; //構造体seisekiの具体化と理科の成績までの代入

というわけです。
設計書から実体を作り出すことを、オブジェクト指向といいます。
オブジェクトとは物という意味です。
seisekiの型から、具体的な生徒seito1等のデータの塊を作り出しているのです。
C++のクラスとC言語の構造体の違いは、
構造体には、データのタイプしか入れられないのに対して、
クラスには、関数もいられるようになっているということです。
普通クラスを作るときには、
複数の変数群や関数群を入れるので、
それぞれメンバー変数とメンバー関数といいます。
C言語の構造体には、メンバー変数しかないわけです。

C言語構造体
struct 構造体名{
  メンバー変数;
};

C++構造体またはクラス
struct 構造体名{
  メンバー変数;
  メンバー関数;
};
class クラス名{
  メンバー変数;
  メンバー関数;
};
C++における構造体とクラスは同一のものであると考えてよいでしょう。
皆さんは、メンバー変数はわかるけど、
メンバ−変数は理解できないと、
感じるでしょうね。
seito1である『赤角 一郎』さんは、クラス・出席番号・名前・各教科ごとの成績・平均点の関連データ
をまとめてもっているから、
データが構造をなしていることはわかります。
だから構造体です。
でも、そこに関数が入るのは????ですね。
大丈夫ですよ。
後に、クラスを学ぶときに詳しく説明しますから。


尚、
  seito1.heikin=
(double)(seito1.kokugo+seito1.syakai+seito1.sansu+seito1.rika)/4;
(double)はキャストといわれるもので、強制的に型をchar型からdouble型へ変換しています。
変換しないと小数点以下が切り捨てられてしまうからです。切り捨てられてしまうからです。

第2話へ   第4話へ

第2部目次に戻る  第1部目次に戻る

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
ecliqse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
ecliqse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ