身につくC言語-13回目 構造体の使い方1-

C言語では「構造体」という考え方があります。

 

初めのうちは、「構造体をつかうとよりわかりづらくなる」と感じることでしょう。

 

しかし、大きなプログラムを作成するときは、必須のものとなります。

 

構造体とは

構造体とは、自分で変数を定義する。

 

ということです。

 

今までは、「char」や「int」などとあらかじめ設定されているものを使用してきました。

 

しかし、それでは不自由に感じることもあります。(現時点では無いと思いますが)

 

実際に書いてみましょう。

 

ソースコード


#include<stdio.h>

struct car{
	int bangou;
	double gasorin;
};


int main(void)
{
	struct car a;
	
	a.bangou=1234;
	
	a.gasorin=123.456;
	
	
	printf("車の番号は%dで、ガソリンは%lfです。\n",a.bangou,a.gasorin);
	
	return 0;
}

 

構造体と呼ばれる部分はここです。

 


struct car{
	int bangou;
	double gasorin;
};

 

日本語に直してみると、

 

carという名前の変数をつくれ。中身は、「int bangou」と「double gasorin」である。

 

という意味です。

 

複数の変数を一つにまとめるという感覚ですね。

 

この変数の名前は、「struct car」です。使い方としては「int」や「char」とほぼ変わりません。

 

ですから、

 


struct car a;

 

というのは、struct car型のaを確保しろという意味です。

 

ややこしくなってきましたね。

 

ですが、ここまで来れば後は「代入」と「出力」ですから。

 

代入は

 



a.bangou=1234;

a.gasorin=123.456;

 

というところです。

 

日本語に直すと

 

a(struct car型)のbangouに1234を代入する。a(struct car型)のgasorinに123.456を代入する。

 

という意味です。

 

.(ピリオド)は構造体のメンバ(ここではstruct carの中身、すなわちint bangou;やdouble gasorin;など)にアクセスするときに使います。

 

出力はそのまま「a.bangou」と「a.gasorin」を使用します。

 

これが基本的な構造体の使い方です。

 

練習問題

問題1 あなたの年齢と身長を出力しなさい。(ただし構造体を使うこと)

問題2 今日の月日を入力して出力しなさい。(ただし構造体を使うこと)

練習問題解答

問題1解答


#include<stdio.h>

struct car{
	int nenrei;
	double sintyou;
};


int main(void)
{
	struct car a;
	
	a.nenrei=20;
	
	a.sintyou=175.5;
	
	
	printf("年齢は%d歳で、身長は%lfセンチメートルです。",a.nenrei,a.sintyou);
	
	return 0;
}

構造体の中では、int型とdouble型を使用しています。

 

printfで出力するときは、%dを使うのか%lfを使うのか注意してください。

 

問題2解答


#include<stdio.h>

struct car{
	int tuki;
	int niti;
};


int main(void)
{
	struct car a;
	
	printf("今日は何月ですか\n");
	scanf("%d",&a.tuki);
	
	printf("今日は何日ですか\n");
	scanf("%d",&a.niti);
	
	printf("今日は%d月%d日です。",a.tuki,a.niti);
	
	return 0;
}

ここでは、scanfの書き方がきもとなります。

 

a.tukiの方はint型なので入力するときは%dを使います。

 

&をつけることを忘れないようにしましょう。

 

まとめ

はっきりいってこの時点で、構造体を使うメリットがありません。

 

しかし、より複雑なプログラムをするときに役に立つことは確かです。

 

たとえば、学校の生徒の身長と体重を管理したいとき、いちいち「double」を使って変数を書いていくのはめんどくさいですよね。

 

そんな時に構造体を一つ書くだけで、大幅に時間と労力を短縮することができます。

 

覚えておいて損はないでしょう。