練習
■ルール
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(ファイル分け)