C言語講座第六回演習

構造体

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

構造体名 Order.

メンバ

型名メンバ名
intProductID
intDate
intNumber

列挙型名 Rank

要素: Gold Silver Bronze

構造体名 customer

typedef Customer

メンバ

型名メンバ名
char*Name
char*Phone
RankRank
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
Last-modified: 2015-07-15 (水) 21:19:02 (3208d)