練習

■ルール

	1.コンパイルを通す
	2.ソリューション名は以下の通り
		PG_PRAC_****

		*** => 日付 
			例:
				2016/11/14の場合 => 16_11_14

	3.その日作成したソリューション内に複数プロジェクトを追加する

■練習01(計算関連)

	●その1:
		プロジェクト名:01_001

		仕様:
			1~100のランダムな整数の値を2つ使用して+、-、*、/、%の
			計算を行いその結果を出力するプログラムを作成して下さい。

	●その2:
		プロジェクト名:01_002

		仕様:
			1から30まで整数を1ずつカウントする
			カウントの中の値が5の倍数の数になったらその値を表示する

		実行結果例:
			5
			10
			15
			20
			25
			30

	●その3:
		プロジェクト名:01_003

		仕様:
			整数型の変数を用意し、1で初期化する
			その整数と同じ値を加算する
			上記の加算は100を超えるまで繰り返す

		実行結果例:
			1
			2
			4
			8
			16
			32
			64

	●その4:
		プロジェクト名:01_004

		仕様:
			入力した値に対してその8%の値を加算した値を出力する

		実行結果例:
			入力:100
			表示:108

			入力:10
			表示:10.8

	●その5:
		プロジェクト名:01_005

		仕様:
			整数の値を入力し、その値を二乗した値を出力する

		実行結果例:
			入力:3
			表示:9

			入力:10
			表示:100

	備考:
		出力内容はウィンドウを閉じるまで表示させ続ける
		(ctrl + F5 不可)

■練習02(分岐)

	※ifと書かれているものはif文、switchと書かれているものはswitch文を使用する

	●その1(if, switch):
		プロジェクト名:02_001

		仕様:
			整数型の変数を用意し、以下の結果になるように出力して下さい。
			
				0 => 勇者
				1 => 魔法使い
				2 => 僧侶
				3 => 戦士
				その他 => フリーター

		実行結果例:
			変数の値:0
			表示:勇者

			変数の値:3
			表示:戦士

	●その2(if, switch):
		プロジェクト名:02_002

		仕様:
			以下の内容を列挙型で定義しする
			変数を用意し、列挙型を使用して分岐を行う

			列挙型
				0 => SPRING
				1 => SUMMER
				2 => AUTUMM
				3 => WINTER

			条件1:
				変数の値がSPRINGと同じ値
				出力:春

			条件2:
				変数の値がSUMMERと同じ値
				出力:夏

			条件3:
				変数の値がAUTUMMと同じ値
				出力:秋

			条件4:
				変数の値がWINTERと同じ値
				出力:冬

			条件5:
				条件1~4以外
				出力:新しい季節

		実行結果例:
			変数の値:SUMMER
			出力:夏

			変数の値:AUTUMM
			出力:秋

	●その3(if):
		プロジェクト名:02_003

		仕様:
			整数型の変数を用意し、以下の分岐を作成する

			分岐条件1:
				整数の値が100以下
				
				処理内容:
					「条件1」と出力

			分岐条件2:
				整数の値が100より上かつ500以下

				処理内容:
					「条件2」と出力

			分岐条件3:
				条件1、条件2以外

				処理内容:
					「その他」と出力

		実行結果例:
			変数の値:40
			出力:条件1

			変数の値:1000
			出力:その他

	●その4(if):
		プロジェクト名:02_004

		仕様:
			整数型の変数を1から100まで1ずつカウントし、
			4の倍数なら「変数 = 4の倍数」「10」の倍数なら「変数 = 10の倍数」、
			4と10の両方の倍数なら「変数 = 両方の倍数」と出力する

		実行結果例:
			4 = 4の倍数
			8 = 4の倍数
			10 = 10の倍数
			12 = 4の倍数
			16 = 4の倍数
			20 = 両方の倍数

	●その5(if, switch):
		プロジェクト名:02_005

		仕様:
			じゃんけんを作成する
			じゃんけんの手:
				各じゃんけんの手の値は以下の通り

					グー => 0
					チョキ => 1
					パー => 2

			じぇんけんの手の算出方法:
				ユーザーのじゃんけんの手は入力、
				相手の手は0~2のランダムで算出する
				※じゃんけんの手はdefineで定数化すること

			結果:
				勝敗の表示は以下の通り:
				
					ユーザーの勝ち:勝ち
					ユーザーの負け:負け
					あいこ:あいこ

		実行結果例:
			自分:0
			相手:0
			結果:あいこ

■練習03(繰り返し)

	※forと書かれているものはfor文、whileと書かれているものはwhile文、
	 do-whileと書かれているものはdo-while文を使用する

	●その1(for, while, do-while):
		プロジェクト名:03_001
	
		仕様:
			以下の出力結果になるように処理を実装する

			出力結果:
				Hello World
				Hello World
				Hello World
				Hello World
				Hello World

	●その2(for, while, do-while):
		プロジェクト名:03_002

		仕様:
			以下の出力結果になるような処理を実装する
			※i++、i += 1は使用禁止

			出力結果:
				10
				9
				8
				7
				6
				5
				4
				3
				2
				1
				0

	●その3(for)
		仕様:
			以下の出力結果になるような処理を実装する

			出力結果:
				1  2  3  4  5  6  7  8  9
				2  4  6  8 10 12 14 16 18
				3  6  9 12 15 18 21 24 27
				4  8 12 16 20 24 28 32 36
				5 10 15 20 25 30 35 40 45
				6 12 18 24 30 36 42 48 54
				7 14 21 28 35 42 49 56 63
				8 16 24 32 40 48 56 64 72
				9 18 27 36 45 54 63 72 81

	●その4(for)
		仕様:
			以下のfor文でiの値が5になったら中断する処理を
			for文内に実装する

				for (int i = 0; i < 10; i++)
				{
					
				}

	●その5(for)
		仕様:
			以下のfor文を変更して出力結果通りになるように処理を修正する

				for (int i = 0; i < 10; i++)
				{
					printf("%d", i);

					// ここから下に処理を追加してはいけない
					if (i % 2 != 0)
					{
						printf(":奇数\n");
					} else {
						printf("\n");
					}
				}

			出力結果:
				0:
				1:奇数
				2:
				3:奇数
				4:
				5:奇数
				6:
				7:奇数
				8:
				9:奇数

■練習04(構造体)

	●その1:
		プロジェクト名:04_001
	
		仕様:
			以下のメンバ変数を持った構造体名Characterを作成する

			メンバ:
				データ型	変数名
				int		m_Hp
				int		m_Mp
				float		m_Speed
				int		m_Money
				int		m_Exp

			※空のメイン関数({}に何も書かない)を作ってコンパイルは通すこと

	●その2:
		プロジェクト名:04_002

		仕様:
			以下のメンバ変数を持った構造体名Jugyoinを作成する
			作成した構造体をmain関数内で変数宣言する(変数名はyamada)

			メンバ:
				int		m_Salary
				int		m_Number
				int		m_Department

	●その3:
		プロジェクト名:04_003

		仕様:
			1.以下のメンバ変数を持った構造体KadenShopを作成する
				メンバ:
					int	m_Uriage
					int	m_ShopNo

			2.main関数内に以下の内容で構造体KadenShopを宣言する
				変数名:
					yodobasi

				初期値:
					m_Uriage => 0
					m_ShopNo => 1

			※2のメンバ変数の初期化は変数宣言時に行うこと

	●その4:
		プロジェクト名:04_004

		仕様:
			1.以下のメンバ変数を持った構造体userdataを作成する
				char	m_Name[32]
				int	m_SerialLoginCount;
				int	m_TotalAccounting;

			2.userdataを別の型UserDataとして型変換を行う
			  ※1.構造体定義で行ってもいい
			  ※2.ヒント:typedef

			3.main関数内に以下の内容で構造体UserDataを宣言する
				変数名:
					apply_user

				初期値:
					m_Name => "山田 太郎"
					m_SerialLoginCount => 10
					m_TotalAccounting => 20000

				※メンバ変数の初期化は変数宣言時に行うこと

			4.applyを使用して以下の出力を行う
				出力例:
					名前:山田 太郎
					連続ログイン日数:10日
					合計課金金額:20000円

	●その5:
		プロジェクト名:04_005

		仕様:
			1.以下のメンバ変数を持った構造体testscoreを作成する
				int m_Japanese
				int m_Mathematics
				int m_Science
				int m_Society
				int m_English

			2.testscoreを別の型TypeScoreとして型変換を行う
			  ※1.構造体定義で行ってもいい
			  ※2.ヒント:typedef

			3.main関数内に以下の内容で構造体TestScoreを宣言する
				変数名:
					satou

				初期値:
					m_Japanese => 100
					m_Mathematics => 75
					m_Science => 68
					m_Society => 42
					m_English => 84

				※メンバ変数の初期化は変数宣言時に行うこと

			4.satouの各メンバ変数の値と全てのメンバ変数の平均値を出力する
				出力例:
					国語:100点
					数学:75点
					理科:68点
					社会:42点
					英語:84点
					平均:73.8点

■練習05(配列)


	●その1:
		プロジェクト名:05_001

		仕様:
			以下の内容の変数を宣言せよ。

			データ型:int型の配列
			名前:list
			配列の要素数:10

	●その2:
		プロジェクト名:05_002

		仕様:
			以下の条件を満たす変数を宣言し、出力せよ。
		
			データ型:char型の配列
			名前:alphabet
			配列の要素数:26

			条件1.
				配列の要素0~25までにアルファベットのa~zを設定する

			条件2.
				条件1の処理は宣言時に同時に行う
				(宣言と同時に初期化する)

		出力結果:
			abcdefghijklmnopqrstuvwxyz

	●その3:
		プロジェクト名:05_003

		仕様:
			1.要素数256のchar型の配列を用意する
			
			2.1の配列にユーザーがアルファベットを入力する

			3.2の配列に対して「c」が何個あるかを数えて出力する


		出力例:
			入力
				cat

			出力
				cの数 => 1

	●その4:
		プロジェクト名:05_004

		仕様:
			1.9 * 9の2次元配列を用意する

			2.1の配列に九九の結果を設定する

			3.配列の内容を出力する

		出力結果:
			1  2  3  4  5  6  7  8  9
			2  4  6  8 10 12 14 16 18
			3  6  9 12 15 18 21 24 27
			4  8 12 16 20 24 28 32 36
			5 10 15 20 25 30 35 40 45
			6 12 18 24 30 36 42 48 54
			7 14 21 28 35 42 49 56 63
			8 16 24 32 40 48 56 64 72
			9 18 27 36 45 54 63 72 81

	●その5:
		プロジェクト名:05_005

		仕様:
			1.以下のメンバを持つ構造体Foodを定義する
				char型の配列[要素数64] m_Name	// 名前
				int型 m_Price			// 料金
				int型 m_Kind			// 種類

			2.main関数内でFood配列の変数menuを宣言し、
			  宣言と同時に以下内容で初期化を行う

				m_Name => ハンバーグ
				m_Price => 800
				m_Kind => 1

				m_Name => カルボナーラ
				m_Price => 400
				m_Kind => 2

				m_Name => ステーキ
				m_Price => 1200
				m_Kind => 1

				m_Name => 鳥のから揚げ
				m_Price => 600
				m_Kind => 1

				m_Name => ぺペロンチーノ
				m_Price => 380
				m_Kind => 2

				m_Name => チョコレートケーキ
				m_Price => 300
				m_Kind => 3

			3.ユーザーが種類についての入力をさせる
				(1 => メイン、2 => 麺類、3 => デザート)
				※それ以外の値の場合、再度入力させる

			4.入力された種類のデータを全て列挙する
				例:
					入力:
						1

					出力:
						名前:ハンバーグ 金額:800円
						名前:ステーキ 金額:1200円
						名前:鳥のから揚げ 金額:600円

■練習06(関数)

	●その1:
		プロジェクト名:06_001

		仕様:
			以下の内容の関数のプロトタイプ宣言と定義し、
			main関数内で各関数を一度ずつ使用しなさい。
	
			①.
				関数名:
					Add

				戻り値:
					型:int
					内容:二つの引数を使用した足し算の結果
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1とその2を足した値を返す

			②.
				関数名:
					Sub
				戻り値:
					型:int
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1からその2引いた値を返す

			③.
				関数名:
					Mul
				戻り値:
					型:int
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1と引数その2を掛け合わせた結果
			④.
				関数名:
					Div
				戻り値:
					型:float
				引数:
					float:
						計算に使用する値その1
					float:
						計算に使用する値その2
				内容:
					引数その1を引数その2で割った結果
					※0割り注意

	●その2:
		プロジェクト名:06_002

		仕様:
			以下の仕様の関数を実装せよ

			関数名:
				IsScoreOver

			戻り値:
				型:bool
				true:数値オーバー
				false:許容値

			引数:
				int:num
					チェックする値
				int:max_num
					最大値
			内容:
				チェックする値が最大値以上大きければtrue、
				チェックする値が最大値より下ならfalseを返す
	●その3:
		プロジェクト名:06_003

		仕様:
			以下の仕様を満たした処理を書け

			1.関数の定義
				関数名:
					FindChar
				戻り値:
					型:int
						発見:文字位置
						文字未発見:-1
				引数:
					char:find_char
						検索文字

					char型の配列 or char型のポインタ:char_list
						文字配列

					int:list_size
						配列のサイズ

				内容:
					文字配列から検索文字を探し、
					見つかったらchar_listの配列番号
					見つからなかったら-1を返す

			2.文字入力
				main関数でユーザーに文字入力をしてもらい
				char型の配列に格納する

			3.関数使用
				FindCharを実行し、処理が動作しているか確認する

			例::
				入力:
					abcdefg

				検索文字:
					c

				出力:
					2
	●その4:
		プロジェクト名:06_004

		仕様:
			以下の仕様を満たした処理を書きなさい

			1.以下の構造体を定義しなさい
				構造体名:
					Employee
				メンバ:
					char m_Name[64]		// 名前
					int m_Id		// 社員ID
					int m_DepartmentId	// 部署ID
					
			2.以下の関数を定義しなさい
				関数名:
					ShowEmployee
				戻り値:
					なし
				引数:
					Employee
						社員データ構造体
				内容:
					引数の社員データを出力する

					例:
						名前:山田太郎
						社員ID:1000
						部署ID:1

			3.main関数に以下の構造体変数を定義しなさい
			  ※初期化は宣言と同時に行う

				データ型:
					Employee
				変数名:
					employee
				初期値:
					名前:鈴木 一郎
					社員ID:1001
					部署:1

			4.3で宣言した変数をShowEmployeeで使用しなさい
				出力結果:
					名前:鈴木 一郎
					社員ID:1001
					部署ID:1
	●その5:
		プロジェクト名:06_005

		仕様:
			以下の仕様を満たした処理を書きなさい

			1.以下の構造体を定義しなさい
				構造体名:
					MyRect

				メンバ
					float m_X	// 座標X
					float m_Y	// 座標Y
					float m_Width	// 幅
					float m_Height	// 高さ

			2.以下の関数を定義しなさい
				関数名:
					IsInside
				戻り値:
					true:矩形のいずれかの中に入っている
					false:どの矩形にも入っていない
				引数:
					float posx
					float posy
					MyRect rect
				内容:
					指定した座標が矩形内にあればtrue

					※1.座標は2次元軸とし、引数のposxとposyで1つの座標とする
						例:
							posx => 100
							posy => 50
							座標 => (X, Y) = (100, 50)

					※2.MyRect構造体の情報を利用して矩形を作成する
						例:
							構造体の値
								m_X => 100
								m_Y => 50
								m_Width => 100
								m_Height => 100

							矩形座標
								左上 => (100, 50)
								右上 => (200, 50)
								右下 => (200, 150)
								左下 => (100, 150)

			3.main関数に以下の構造体変数を定義しなさい
			  ※初期化は宣言と同時に行う

				データ型:
					MyRect型
				変数名:
					rect
				初期値:
					値はおまかせ

			4.3で宣言した変数を使用してIsInsideが動作していることを確認しなさい

■練習7(ポインタ)

	●その1:
		プロジェクト名:07_001

		仕様:
			int型の変数を宣言しアドレスを出力しなさい
			※変数名は任意

	●その2:
		プロジェクト名:07_002

		仕様:
			int型の変数とintポインタ型の変数を宣言し、
			int型の変数の値の変更をポインタ型の変数を使用して
			行いなさい

	●その3:
		プロジェクト名:07_003

		仕様:
			以下の仕様を満たす関数を作成して
			main関数で呼び出して使用しなさい

			関数名:
				Swap
			戻り値:
				なし
			引数:
				intポインタ型	p1
				intポインタ型	p2
			内容:
				p1とp2のポインタ型変数に代入されている
				アドレスに格納されている値を入れ替える

			例:
				int main(void)
				{
					int x = 10;
					int y = 20;
					
					Swap(&x, &y);
					printf("x = %d\n");
					printf("y = %d\n");

					return 0;
				}

				出力結果:
					x = 20
					y = 10
	●その4:
		プロジェクト名:07_004

		仕様:
			以下のmain関数でコメントに沿った内容を記述しなさい

			int main(void)
			{
				// ①.int型変数を動的に作成

				// ②.①で作った動的変数を解放

				return 0;
			}

	●その5:
		プロジェクト名:07_005

		仕様:
			1.以下の構造体を作成しなさい
				構造体名:
					Player

				メンバ:
					int m_Hp
					int m_Mp

			2.以下の仕様の関数を定義しなさい
				関数名:
					InitPlayer
				戻り値:
					なし
				内容:
					引数でPlayerのデータを受け取り、
					m_Hpに100、m_Mpに30を代入する
					この代入は実引数側のPlayer構造体にも
					反映させるようにする

	●その6
		プロジェクト名:07_006

		仕様:
			1.main関数にint型の配列(要素数10)を定義して
			  適当な値で初期化しなさい

			2.以下の関数を定義しなさい
				関数名:
					FindNum

				戻り値:
					true => 探している値があった
					false => 探している値がなかった

				引数:
					第一引数
						配列

					第二引数
						配列のサイズ

					第三引数
						探している値

				内容:
					引数の配列の中に第三引数で指定している値が
					あればtrue、なければfalseを返す
					※第一引数の配列は[10]や[]を使わないこと

■練習8(ファイル分け)