身につく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」を使って変数を書いていくのはめんどくさいですよね。

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

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

スポンサーリンク