[[C言語講座第六回演習]]

C言語講座第二回 解答例

*構造体 [#d04b7619]

1.以下の構造体と列挙型を作りなさい。

構造体名 Order.

メンバ

型名|メンバ名
-----|---------
int|ProductID
int|Date
int|Number

列挙型名 Rank

要素: Gold Silver Bronze 

構造体名 customer

typedef Customer

メンバ

型名|メンバ名
-----|---------
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

 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に分割して書きなさい。 

~
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