初心者のためのC言語入門講座構造体と列挙型の利用(無料)
2024年3月4日![C言語無料入門講座の目次へ行く](https://www.telln.com/lesson/wp-content/uploads/2023/11/cgengo_bannermuryo.png)
この単元では、異なるデータ型の変数を一つの構造にまとめて使用する構造体と定数のリストを定義することができる列挙型について学びます。
構造体の利用
通常の配列では、異なるデータ型を格納して宣言することはできません。
構造体を利用することで、データ型の異なる変数を一つの構造体にまとめることができます。
構造体を利用することで、データ型の異なる変数を一つの構造体にまとめることができます。
●ソース1
#include
void main(){
struct KojinData{ //構造体
char *sei;
int tosi;
float kyori;
};
struct KojinData office;
office.sei="Yamada";
office.tosi=48;
office.kyori=3.2;
printf("%s さんの年齢は%d 歳で距離は%.1fm です",office.sei,office.tosi,office.kyori);
}
構造体を配列として利用する
構造体を配列として利用して、それぞれの番地にデータを格納してみましょう。
●ソース2
#include
void main(){
int i;
struct KojinData{
char *sei;
int tosi;
float kyori;
};
struct KojinData Office[3];
Office[0].sei="Yamada";
Office[0].tosi=48;
Office[0].kyori=3.2;
Office[1].sei="Suzuki";
Office[1].tosi=36;
Office[1].kyori=3.6;
Office[2].sei="Sato";
Office[2].tosi=58;
Office[2].kyori=6.5;
for(i=0;i<3;i++){
printf("%s さんの年齢は%d 歳で距離は%.1fm です¥n",Office[i].sei,Office[i].tosi,Office[i].kyori);
}
}
構造体の配列の省略形について
構造体の配列宣言時に、配列数と格納するデータを一緒に宣言することで省略して記述することができます。
●ソース3
#include
void main(){
int i;
struct KojinData{
char *sei;
int tosi;
float kyori;
};
struct KojinData Office[3]={
{"Yamada",48,3.2},
{"Suzuki",36,3.6},
{"Sato",58,6.5}
};
for(i=0;i<3;i++){
printf("%s さんの年齢は%d 歳で距離は%.1fm です¥n",Office[i].sei,Office[i].tosi,Office[i].kyori);
}
}
列挙型の利用
列挙型を利用することで定数のリストを定義することができます。
enum タグ名 {定数リスト};
列挙型のリストの定数は、一番左側を0として1ずつ増えていきます。
enum タグ名 {定数リスト};
列挙型のリストの定数は、一番左側を0として1ずつ増えていきます。
●ソース4
#include
void main(){
enum syudan{toho,densya,kuruma};
enum syudan a;
a=0;
if(a==0){
printf("徒歩");
}else if(a==1){
printf("電車");
}else if(a==2){
printf("車");
}
}
この単元の練習問題
問題1
家族各人の下記のようなデータを格納するためにデータ型として構造体struct kazoku を宣言しなさい。
同時にこの型の変数home も宣言しなさい。また、家族全員の平均体重を出力するものとする。
同時にこの型の変数home も宣言しなさい。また、家族全員の平均体重を出力するものとする。
構造体 struct kazoku
char*型 namae | int型 年齢 | float型 体重 |
---|---|---|
jiro | 48 | 75.3 |
hanako | 51 | 51.1 |
taro | 23 | 68.5 |
問題2
enum 型のデータ型として、偶数と奇数を意味するenum guki型を宣言し、scanf 文にて入力された整数に応じて、偶数か奇数かを表示するプログラムを作成しなさい。
ただし、guki の名前リストは、{ gusu , kisu }とする。
また、偶数、奇数の判断は、与えられた整数を2で割った余りが0か1か、すなわちgusu に等しいかkisuに等しいかで行う。
ただし、guki の名前リストは、{ gusu , kisu }とする。
また、偶数、奇数の判断は、与えられた整数を2で割った余りが0か1か、すなわちgusu に等しいかkisuに等しいかで行う。
問題3
1.構造体 struct kojin_dt 型を宣言し、この型の4人分の配列office[4]を、下の表の社員データで初期化せよ。
(プログラム入力後、そのまま問題2に移る。)
(プログラム入力後、そのまま問題2に移る。)
氏 | 名 | 年齢 | 通勤距離 |
---|---|---|---|
アシカガ | タカウジ | 48 | 2.3 |
オダ | ノブナガ | 50 | 16.5 |
トヨトミ | ヒデヨシ | 25 | 6.4 |
トクガワ | イエヤス | 36 | 5.0 |
2.問題1におけるoffice[4]の初期化の部分も含め、社員4人の平均年齢(int 型)を計算して表示しなさい。
3.問題1におけるoffice に初期化されている社員の内、最年少社員のデータを表示するプログラムを作成しなさい。
4.問題1におけるoffice に初期化されている4人のデータを年長者順に並べ替えて表示しなさい。
ただし、並べ替えの手順は、最年長者を探し、その人のデータを office[0]のデータと入れ替え、さらに残りの部
分で、その中の最年長者を探し、office[1]のデータと入れ換えることを順次行う方式を用いなさい。
表示方法は任意とする。