- 追加された行はこの色です。
- 削除された行はこの色です。
[[C言語講座第六回演習]]
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);
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 でコンパイル
~