[[C言語講座第六回演習]] *構造体 [#d04b7619] 1.以下の構造体と列挙型を作りなさい。 構造体名 Order. メンバ 型名|メンバ名 int|ProductID int|Date int|Number |型名|メンバ名| |int|ProductID| |int|Date| |int|Number| 列挙型名 Rank 要素: Gold Silver Bronze 構造体名 customer typedef Customer メンバ 型名|メンバ名 char*|Name char*|Phone Rank|Rank struct Order[10]|OrderList |型名|メンバ名| |char*|Name| |char*|Phone| |Rank|Rank| |struct Order[10]|OrderList| ~ 解答例: #include<stdio.h> struct Order { int ProductID; int Date; int Number; }; enum Rank { Gold, Silver, Bronze }; typedef struct customer { char* Name; char* Phone; enum Rank Rank; struct Order Orderlist[20]; } Customer; void main(void) { } ~ 2.この構造体に以下のデータを入力しなさい。 但し、ProductIDが-1なら注文は無いということとする。 ~ 構造体のデータ Name CSR.Inc Name CSR.Inc Phone 0801234567 Phone 0801234567 Rank Silver Rank Silver Order Order 1. ProductID 22 Date 170215 Number 10 Date 170215 Number 10 2. ProductID 53 Date 170415 Number 8 Date 170415 Number 8 3~10: ProductID : -1 ~ 解答例: #include<stdio.h> struct Order { int ProductID; int Date; int Number; }; enum Rank { Gold, Silver, Bronze }; typedef struct customer { char* Name; char* Phone; enum Rank Rank; struct Order Orderlist[20]; } Customer; void main(void) { Customer CSR; CSR.Name = "CSR.Inc"; CSR.Phone = "0801234567"; CSR.Rank = Silver; CSR.Orderlist[0].ProductID = 22; CSR.Orderlist[0].Date = 170215; CSR.Orderlist[0].Number = 10; CSR.Orderlist[1].ProductID = 53; CSR.Orderlist[1].Date = 170415; CSR.Orderlist[1].Number = 8; int i; for(i = 2; i < 10; i++) CSR.Orderlist[2].ProductID = -1; } ~ 4. 構造体のポインタdataを引数に持ち以下のように出力する関数Showを作りなさい。 その際テストとしてさっきのデータを出力させなさい。 出力形式 Customer Name: CSR.Inc Phone: 0801234567 Rank: Silver Order 1: ID: 22 Date: 170215 Number 10 Order 2: ID: 53 Date: 170415 Number 8 ~ 解答例: #include<stdio.h> struct Order { int ProductID; int Date; int Number; }; enum Rank { Gold, Silver, Bronze }; typedef struct customer { char* Name; char* Phone; enum Rank Rank; struct Order Orderlist[20]; } Customer; void Show(Customer* data); void main(void) { Customer CSR; CSR.Name = "CSR.Inc"; CSR.Phone = "0801234567"; CSR.Rank = Silver; CSR.Orderlist[0].ProductID = 22; CSR.Orderlist[0].Date = 170215; CSR.Orderlist[0].Number = 10; CSR.Orderlist[1].ProductID = 53; CSR.Orderlist[1].Date = 170415; CSR.Orderlist[1].Number = 8; int i; for(i = 2; i < 10; i++) CSR.Orderlist[i].ProductID = -1; Show(&CSR); } void Show(Customer* data) { printf("Customer Name: %s\n",data->Name); printf("Phone: %s\n",data->Phone); switch(data->Rank) { case Gold: printf("Rank: Gold\n"); break; case Silver: printf("Rank: Silver\n"); break; case Bronze: printf("Rank: Bronze\n"); break; } int i; for(i = 0; i < 10; i++) { if(data->Orderlist[i].ProductID == -1) { }else{ printf("Order: %d\n",i); printf("\t ID: %d\n",data->Orderlist[i].ProductID); printf("\t Date: %d\n",data->Orderlist[i].Date); printf("\t Number: %d\n",data->Orderlist[i].Number); } } } ~ 5. 第七講をみてOrder Rank Customer Showのプロトタイプ をData.hに Showの本体をData.cに mainをmain.cに分割して書きなさい。 ~ 解答例: Data.h: struct Order { int ProductID; int Date; int Number; }; enum Rank { Gold, Silver, Bronze }; typedef struct customer { char* Name; char* Phone; enum Rank Rank; struct Order Orderlist[20]; } Customer; void Show(Customer* data); Data.c: #include <stdio.h> #include "Data.h" void Show(Customer* data) { printf("Customer Name: %s\n",data->Name); printf("Phone: %s\n",data->Phone); switch(data->Rank) { case Gold: printf("Rank: Gold\n"); break; case Silver: printf("Rank: Silver\n"); break; case Bronze: printf("Rank: Bronze\n"); break; } int i; for(i = 0; i < 10; i++) { if(data->Orderlist[i].ProductID == -1) { }else{ printf("Order: %d\n",i); printf("\t ID: %d\n",data->Orderlist[i].ProductID); printf("\t Date: %d\n",data->Orderlist[i].Date); printf("\t Number: %d\n",data->Orderlist[i].Number); } } } main.c #include <stdio.h> #include "data.h" void main(void) { Customer CSR; CSR.Name = "CSR.Inc"; CSR.Phone = "0801234567"; CSR.Rank = Silver; CSR.Orderlist[0].ProductID = 22; CSR.Orderlist[0].Date = 170215; CSR.Orderlist[0].Number = 10; CSR.Orderlist[1].ProductID = 53; CSR.Orderlist[1].Date = 170415; CSR.Orderlist[1].Number = 8; int i; for(i = 2; i < 10; i++) CSR.Orderlist[i].ProductID = -1; Show(&CSR); } gcc Data.c main.c でコンパイル ~