構造体 †1.以下の構造体と列挙型を作りなさい。 構造体名 Order. メンバ
列挙型名 Rank 要素: Gold Silver Bronze 構造体名 customer typedef Customer メンバ
#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 Phone 0801234567 Rank Silver Order 1. ProductID 22 Date 170215 Number 10 2. ProductID 53 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に分割して書きなさい。
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 でコンパイル
|