前回の復習 構造体②.

Slides:



Advertisements
Similar presentations
第 10 回 宿題 出題日: 12 月 14 日 締切日: 12 月 21 日. 提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が 7 割未満の場合 提出は、 PDF ファイルを印刷して、それに答 えを書いて提出すること。
Advertisements

プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
第2章 数値の入力と変数 scanfと変数をやります.
第13回構造体.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
第12回構造体.
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
第8回 プログラミングⅡ 第8回
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラミング応用 printfと変数.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
Cプログラミング演習 第7回 メモリ内でのデータの配置.
後期中間試験練習問題 12月3日(月)9:00~ 第3演習室.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第11回 情報工学科 篠埜 功.
今までの練習問題の復習.
前回の練習問題.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
C言語 はじめに 2016年 吉田研究室.
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
プログラミング論 構造体
標準入出力、変数、演算子、エスケープシーケンス
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
第3回簡単なデータの入出力.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座第5回 2017 構造体.
プログラミング演習I 補講用課題
高度プログラミング演習 (10).
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

前回の復習 構造体②

構造体と配列 通常の変数と同じように、構造体変数についても配列を設定できる。これを構造体配列という。 a[0] a[1] a[2] int char b[3] short d int a char b[3] short d a[2]

実行してみる #include <stdio.h> #include <string.h> struct data { int no; char name[10]; }; int main(void) { struct data list[2]; list[0].no = 99; strcpy(list[0].name, "高専太郎"); list[1].no = 100; strcpy(list[1].name, "電情次郎"); for(int i = 0; i < 2; i++) printf("出席番号:%d番, 名前:%s\n", list[i].no, list[i].name); return 0; }

構造体配列の宣言 構造体配列 テンプレートと配列を個別に宣言 テンプレートと配列を同時に宣言 struct data{ int no; char name[10]; }; struct data list[10]; struct data{ int no; char name[10]; } list[10]; 構造体配列

実行してみる① { }でまとめて初期化ができる #include <stdio.h> struct data { char name[20]; int ave; }; int main(void) { struct data list[4] = { { "野比のび太", 0 }, { "源静香", 90 }, { "剛田武", 40 }, { "骨川スネ夫", 70 } for (int i = 0; i < 4; i++) printf("番号:%d番, 名前:%s, 平均点:%d\n", i+1, list[i].name, list[i].ave); return 0; } { }でまとめて初期化ができる

実行してみる② 構造体のポインタ配列も同様な処理でできる &がつかないことに注意 #include <stdio.h> #include <string.h> struct data { int no; char name[10]; } list[2]; int main(void) { struct data *plist = list; (*plist).no = 99; strcpy((*plist).name, "高専太郎"); (*(plist + 1)).no = 100; strcpy((*(plist + 1)).name, "電情次郎"); for(int i = 0; i < 2; i++) printf("出席番号:%d番, 名前:%s\n", (*(plist + i)).no, (*(plist + i)).name); return 0; } 構造体のポインタ配列も同様な処理でできる &がつかないことに注意

実行してみる③ 構造体のポインタ配列のアロー演算子も同様 #include <stdio.h> #include <string.h> struct data { int no; char name[10]; } list[2]; int main(void) { struct data *plist = list; plist->no = 99; strcpy(plist->name, "高専太郎"); (plist + 1)->no = 100; strcpy((plist + 1)->name, "電情次郎"); for(; plist != list + 2; plist++) printf("出席番号:%d番, 名前:%s\n", plist->no, plist->name); return 0; } 構造体のポインタ配列のアロー演算子も同様

型の再定義

実行してみる #include <stdio.h> int main(void) { typedef unsigned char u_char; u_char c; c = 100; printf("%d \n", c); return 0; }

typedef unsigned char u_char 型の名前を変更する 型の名前は「unsigned char」などを組み合わせると、長くなる。そんなときtypedefを使うと、任意の名前を付けることができる typedef unsigned char u_char 既存の型名 新しい型名 自由に名前を付けなおせる

= 構造体名を変更する typedefを使えば構造体テンプレートにも任意の名前を定義できる typedef struct { int no; char name[10]; } DATA; DATA list; struct data{ int no; char name[10]; }; struct data list; = 同じ結果 DATAそのものが型名になっているので、structはいらなくなる

実行してみる #include <stdio.h> typedef struct { char name[10]; int age; } PROFILE; int main(void) { PROFILE prof[2] = { {"Taro", 15 }, {"Jiro", 17 } }; for (int i = 0; i < 2; i++) printf("%sさんは %d歳です \n",prof[i].name, prof[i].age); return 0; }

構造体と関数

実行してみる #include <stdio.h> struct data { int no; char name[10]; }; void disp(struct data gakuse); int main(void) { struct data list1 = { 99, "高専太郎"}; disp(list1); return 0; } void disp(struct data gakuse){ printf("出席番号:%d番, 名前:%s\n", gakuse.no, gakuse.name);

関数に構造体を渡す(値渡し) list1 gakuse 構造体をコピー main関数 disp関数 int a char b[3] short d int a char b[3] short d 構造体をコピー

実行してみる #include <stdio.h> struct data { int no; char name[10]; }; void disp(struct data *gakuse); int main(void) { struct data list[2] = { { 99, "高専太郎" },{ 100, "電情次郎"}}; disp(list); return 0; } void disp(struct data *gakuse) { for (int i = 0; i < 2; i++) printf("出席番号:%d番, 名前:%s\n", gakuse[i].no, gakuse[i].name);

関数に構造体を渡す(参照渡し) list[0] list[1] *gakuse アドレスを渡す main関数 disp関数 list int char b[3] short d int a char b[3] short d アドレスを渡す

構造体の入れ子構造 構造体の中に構造体を宣言することができる data int a long b char c[8] 構造体d int x y

入れ子の構造体は必ず先に宣言する ドットが2つになる #include <stdio.h> #include <string.h> struct xy { double x; double y; }; struct data { int no; char name[10]; struct xy hw; int main(void) { struct data list1; list1.no = 99; list1.hw.x = 176.3; list1.hw.y = 72.3; strcpy(list1.name, "高専太郎"); printf("出席番号:%d番, 名前:%s\n", list1.no, list1.name); printf("身長:%4.1f cm, 体重:%4.1f kg\n", list1.hw.x, list1.hw.y); return 0; } 入れ子の構造体は必ず先に宣言する ドットが2つになる

今日の練習問題① 構造体テンプレート名をstatusを作成し、構造体のメンバに「名前(name)」「レベル(level)」「体力(HP)」「攻撃力(att)」「防御力(def)」「すばやさ(agi)」を設定してステータス画面を作成してください。それぞれのデータは以下の通りです。ただし構造体配列を使うこと。 構造体配列 名前 レベル 体力 攻撃力 防御力 素早さ chara [0] 勇者 1 15 18 16 20 [1] 戦士 5 600 205 189 2 [2] 魔法使い 10 48 12 22

#include <stdio.h> struct status { char name[10]; int level; int HP; int att; int def; int agi; }; int main(void) { struct status chara[3]; chara[0] = { "勇者", 1, 15, 18, 16, 20 }; chara[1] = { "戦士", 5, 600, 205, 189, 2 }; chara[2] = { "魔法使い", 10, 48, 12, 18, 22 }; for(int i = 0; i < 3; i++) printf("%s: %dレベル, HP = %d, att = %d, def = %d, agi = %d\n", chara[i].name, chara[i].level, chara[i].HP, chara[i].att, chara[i].def, chara[i].agi); return 0; }

今日の練習問題② 構造体のテンプレート名をstudentsとしてメンバを学籍番号「.num」、名前「.name」、住所「address」とし、ポインタ配列を使って以下の表となるようにしてください。 構造体変数 学籍番号 名前 住所 mem0 1010 太郎 鯖江市 mem1 1234 次郎 福井市 mem2 4649 三郎 敦賀市 mem3 8888 史郎 小浜市

#include <stdio.h> #include <string.h> struct students { int num; char name[10]; char address[10]; }mem[4]; int main(void) { struct students *pmem = mem; pmem->num = 1010; strcpy(pmem->name, "太郎"); strcpy(pmem->address, "鯖江市"); (pmem + 1)->num = 1234; strcpy((pmem + 1)->name, "次郎"); strcpy((pmem + 1)->address, "福井市"); (pmem + 2)->num = 4649; strcpy((pmem + 2)->name, "三郎"); strcpy((pmem + 2)->address, "敦賀市"); (pmem + 3)->num = 8888; strcpy((pmem + 3)->name, "史郎"); strcpy((pmem + 3)->address, "小浜市"); for(int i = 0; i < 4; i++) printf("学生番号: %d, 名前: %s, 住所: %s\n", (pmem + i)->num, (pmem + i)->name, (pmem + i)->address); return 0; }

今日の練習問題③ 構造体テンプレート名をweatherとし、ここ1週間の天気のデータを作ります。ここでweatherのメンバを日付「.day」、曜日「.week」、最高気温「. Utemp」、最低気温「.Dtemp」とし、以下の表となるようにしてください。ただしポインタ配列でアロー演算子を使ってデータを操作すること。 日付 曜日 最高気温 最低気温 10/1 日 16.2 14.6 10/2 月 21.5 13.4 10/3 火 19.0 10.0 10/4 水 17.9 13.0 10/5 木 20.4 12.1 10/6 金 23.8 15.5 10/7 土 21.0 14.2

#include <stdio.h> #include <string.h> struct students { char day[10]; char week[10]; double Utemp; double Dtemp; }hi[7]; int main(void) { struct students *phi = hi; strcpy(phi->day, "10/1"); strcpy(phi->week, "日"); phi->Utemp = 16.2; phi->Dtemp = 14.6; strcpy((phi+1)->day, "10/2"); strcpy((phi+1)->week, "月"); (phi+1)->Utemp = 21.5; (phi+1)->Dtemp = 13.4; strcpy((phi+2)->day, "10/3"); strcpy((phi+2)->week, "火"); (phi+2)->Utemp = 19.0; (phi+2)->Dtemp = 10.0; strcpy((phi+3)->day, "10/4"); strcpy((phi+3)->week, "水"); (phi+3)->Utemp = 17.9; (phi+3)->Dtemp = 13.0; strcpy((phi+4)->day, "10/5"); strcpy((phi+4)->week, "木"); (phi+4)->Utemp = 20.4; (phi+4)->Dtemp = 12.1; strcpy((phi+5)->day, "10/6"); strcpy((phi+5)->week, "金"); (phi+5)->Utemp = 23.8; (phi+5)->Dtemp = 15.5; strcpy((phi+6)->day, "10/7"); strcpy((phi+6)->week, "土"); (phi+6)->Utemp = 21.0; (phi+6)->Dtemp = 14.2; for(int i=0; i < 7; i++) printf("日付: %s, 曜日: %s, 最高気温: %4.1f, 最低気温: %4.1f\n", (phi+i)->day, (phi+i)->week, (phi+i)->Utemp, (phi+i)->Dtemp); return 0; }

今日の練習問題④ 構造体の初期値として与え、メンバは、生徒番号、各科目点数、平均点、評価で、以下の右表のとおりとする。 また各人の 4科目の平均点を関数として構造体配列を参照渡しで求め、構造体に格納すること。さらに各人の評価を関数として構造体配列を参照渡しで求め、構造体に格納すること。尚、4段階の評価基準は、80点以上‘A‘、70点以上 80点未満’B‘、60点以上 70点未満’C‘、60点未満‘D’として全データを表示させよ 生徒 番号 国語 数学 理科 社会 平均点 評価 1001 85 74 63 90 0.0 '?' 1002 78 65 70 62 1003 89 92 88 76 1004 32 48 66 25 1005 81 98

… for (int i = 0; i < 5; i++) { mem[i].ave = average(i, mem); #include <stdio.h> struct students { int num; int jap; int mat; int sce; int soc; int ave; char sta; }mem[5]; int average(int, struct students *mem); char result(int i, struct students *mem); int main(void) { mem[0].num = 1001; mem[0].jap = 85; mem[0].mat = 74; mem[0].sce = 63; mem[0].soc = 90; mem[1].num = 1002; mem[1].jap = 78; mem[1].mat = 65; mem[1].sce = 70; mem[1].soc = 62; mem[2].num = 1003; mem[2].jap = 89; mem[2].mat = 92; mem[2].sce = 88; mem[2].soc = 76; for (int i = 0; i < 5; i++) { mem[i].ave = average(i, mem); mem[i].sta = result(i, mem); printf("番号:%d, 国語%d, 数学%d, 理科%d, 社会%d, 平均点%d, 評価%c\n", mem[i].num, mem[i].jap, mem[i].mat, mem[i].sce, mem[i].soc, mem[i].ave, mem[i].sta); } return 0; int average(int i, struct students *mem) { return (mem[i].jap + mem[i].mat + mem[i].sce + mem[i].soc) / 4; char result(int i, struct students *mem) { char a; if (mem[i].ave >= 80) { a = 'A'; }else if (mem[i].ave >= 70) { a = 'B'; }else if (mem[i].ave >= 60) { a = 'C'; }else { a = 'D'; return a; …

図書データを設定する下記のような構造体配列がある。 今日の練習問題⑤ 図書データを設定する下記のような構造体配列がある。 同じ構造の作業用の構造体変数に、図書名、返却予定年月日をend が入力されるまで入力しなさい。 入力した図書が構造体配列にすでに登録されている場合は「貸し出し中」をメッセージ出力し、未登録の場合は構造体配列に登録しなさい。 struct date { int yy; /* 年 */ int mm; /* 月 */ int dd; /* 日 */ }; struct tosyo { char name[100]; /* 図書名 */ struct date henkyaku; /* 返却予定日 */

入出力例 図書名、返却予定年月日を入力しなさい。 だからあなたも生きぬいて 2000 7 21 貸し出しOKです。 五体不満足 2000 7 24 C言語入門 2000 8 22 パソコン辞典 2000 8 22 だからあなたも生きぬいて 2000 7 26 貸し出し中です。別の本を指定してください。 end だからあなたも生きぬいて 2000. 7.21 五体不満足 2000. 7.24 C言語入門 2000. 8.22 パソコン辞典 2000. 8.22

#include <stdio.h> #include <string.h> struct date { int yy; int mm; int dd; }; struct tosyo { char name[100]; struct date henkyaku; int main(void){ struct tosyo work = { "", 0, 0, 0 }; struct tosyo rireki[100]; int cnt = 0, i; printf("図書名、返却予定年月日を入力しなさい。(終了条件:Ctrl+Z)\n"); while (scanf("%s %d %d %d", work.name, &work.henkyaku.yy,&work.henkyaku.mm, &work.henkyaku.dd) != EOF) { for (i = 0; i < cnt; i++) { if (strcmp(work.name, rireki[i].name) == 0) { printf("貸し出し中です。別の本を指定してください。\n"); break; } if (i == cnt) { printf("貸し出しOKです。\n"); rireki[i] = work; cnt++; printf("\n図書名、返却予定年月日を入力しなさい。(終了条件:Ctrl+Z)\n"); printf("%-20s %4d.%2d.%2d\n", rireki[i].name, rireki[i].henkyaku.yy, rireki[i].henkyaku.mm, rireki[i].henkyaku.dd); return 0;

プログラミング応用

マクロ #から始まる命令文 #include

ヘッダファイル stdio.hなど、拡張子が「.h」のファイルのことを、ヘッダファイルという。ヘッダファイルはプロトタイプ宣言、構造体、定数の定義などのテキストファイルになっている。これをソースコードに組み込む(( )する)と、それらの宣言や定義を利用できる。 #include <stdio.h> int main(void){ return 0; } stdio.h stdioの宣言や 定義を( )できる …

 ヘッダファイルの種類 ヘッダファイル 処理の種類 stdio.h string.h time.h math.h stdlib.h

標準と自作のヘッダファイル #include <ファイル名> #include “ファイル名” 標準関数のヘッダファイルをインクルード 自作のヘッダファイルをインクルード 標準のヘッダファイルと自作のヘッダファイルで( )が違うので注意すること

自作のヘッダファイルを作る① sum.c sum.h main関数が書かれてあるファイルの同じファルダに作る int sum(int min, int max){ int num = 0, i; for(i = min; i < max; i++) num += i; return num; } int sum(int min, int max); main関数が書かれてあるファイルの同じファルダに作る

自作のヘッダファイルを作る② main.c エディタによっては自作ヘッダファイル用の設定をしなければならないこともあるので注意! #include <stdio.h> #include "sum.h" int main(void) { int value; value = sum(50, 100); printf("%d \n", value); return 0; } エディタによっては自作ヘッダファイル用の設定をしなければならないこともあるので注意! 自作したヘッダファイルの関数を使うことができる

変数を共有する(エラー)① sum.c sum.h int pub = 100; int sum(int min, int max){ int num = 0, i; for(i = min; i < max; i++) num += i; return num; } int pub; int sum(int min, int max);

変数を共有する(エラー)② すでに定義されているとエラーがでる main.c #include <stdio.h> #include "sum.h" int main(void) { int value; value = sum(50, 100); printf("%d, %d \n", value, pub); return 0; } すでに定義されているとエラーがでる

変数を共有する(extern) sum.h externを追加する extern int pub; int sum(int min, int max); externを追加する 実行すると正常に動作する。このように異なるソースファイルで変数を( )することができる 乱用禁止

変数を共有させない(static) エラーで実行できなくなる! sum.c sum.h static int pub; int sum(int min, int max){ int num = 0, i; pub = 1000; for(i = min; i < max; i++) num += i; return num; } extern int pub; int sum(int min, int max); エラーで実行できなくなる! staticはそのファイルの中でのみ参照できるが、そのファイル内ならば、どこからでも参照できる

変数を一切、変更させない(const) エラーで実行できない! sum.c sum.h const int pub; int sum(int min, int max){ int num = 0, i; pub = 1000; for(i = min; i < max; i++) num += i; return num; } extern int pub; int sum(int min, int max); エラーで実行できない! constは変数の値を変更できなくなる。つまりconstで宣言した変数は定数になる

ヘッダファイルで重複を防ぐ sum.h 何度もコンパイルされなくなる #ifndef _INCLUDE_SUM_ #define _INCLUDE_SUM_ extern int sum(int min, int max); #endif 何度もコンパイルされなくなる #ifndef ~ #endifの中がコンパイルするかどうか指定することで、重複インクルードを防ぐことができる

C言語実行までの仕組み

マクロ #から始まる命令文 #define

不変の値①(#define) 3.14に置き換わる main.c #include <stdio.h> #define PI 3.14 int main(void) { int r = 5; printf("%f \n", r * r * PI); return 0; } 3.14に置き換わる

不変の値②(#define) エラーになる main.c #include <stdio.h> #define PI 3.14 int main(void) { int r = 5; PI = 3; printf("%f \n", r * r * PI); return 0; } エラーになる

#defineの書き方 #define LOOPNUM 10 大文字 ( ) セミコロン自体が値になってしまう セミコロンは( )

不変の変数enum(定数)① 0,1,2…と定数が代入される #include <stdio.h> enum{ aiu, eo, kakiku, keko }; int main(void) { printf("%d, %d \n", aiu, eo); printf("%d, %d \n", kakiku, keko); return 0; } 0,1,2…と定数が代入される

不変の変数enum(定数)② 別の定数に代入することもできる #include <stdio.h> enum{ aiu, eo = 5, kakiku, keko = 6 }; int main(void) { printf("%d, %d \n", aiu, eo); printf("%d, %d \n", kakiku, keko); return 0; } 別の定数に代入することもできる

マクロ #から始まる命令文 #defineする簡易関数

簡易関数①(#define) 実行してみよう! main.c #include <stdio.h> #define HIKU(x,y) ((x) - (y)) int main(void) { printf("%d \n", HIKU(5,3)); return 0; } 実行してみよう!

簡易関数②(#define) 実行してみよう! main.c #include <stdio.h> #define HIKU(x,y) ((x) - (y)) int main(void) { printf("%d \n", HIKU(5+2,1+3)); return 0; } 実行してみよう!

簡易関数③(#define) 違いを確認しよう! main.c #include <stdio.h> #define HIKU(x,y) (x - y) int main(void) { printf("%d \n", HIKU(5+2,1+3)); return 0; } 違いを確認しよう!

簡易関数④(#define) 実行してみよう! main.c #include <stdio.h> #define PRINTM(X) printf("%d\n", X) int main(void) { PRINTM(10); return 0; } 実行してみよう!

ここまでで。 何か質問はありませんか?

練習問題① 消費税を計算する関数をtax.cとして外部ファイルとして作り、main.cの中で金額を入力することで消費税の価格と、税込みの金額を表示するプログラムを作成せよ。また二重インクルードを防ぐ処理もすること。

練習問題② 前回の練習問題④の関数を自作ヘッダファイルに書き出し、読みだすプログラムを作成せよ。また二重インクルードを防ぐ処理もすること。 前回の練習問題④の関数をマクロの簡易関数として書き出し、読みだすプログラムを作成せよ。

練習問題③ kmからマイル(mi)へと、miからkmへの、双方向の単位研鑽を行うプログラムを作成せよ。defineを使い、1miは1.609344kmである

練習問題④ 円形プールの半径[m]と、入れる水の量[m3]を入力すると水深[m]を表示するプログラムを作成せよ。ただし円の面積を計算する関数はdefineで定義すること

練習問題⑤ enumを使い「SUN=1, MON=2, TUE=3, WED=4, THU=5, FRI=6, SAT=7」としてキーボードから数字を入力することで曜日を表示するプログラムを作成せよ。