C言語講座第六回演習

C言語講座第二回 解答例

構造体

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