[[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 でコンパイル
~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS