CLab/2006-F02
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
* 第2回 配列 [#xef7c5f7]
- ''基本課題''は授業時間中に終わらせること。
- ★印の付いている問題は,当教員に見せて確認の印(またはサ...
- 授業時間中に終わらなかった''応用課題''は,次回(2週間後...
- [[C言語のコンパイルと実行のしかた>../C言語環境]]
-- プログラムのファイル名は,「問題番号.c」としてください...
- [[プログラムの提出のしかた>../提出]]
-- 提出URL http://vilab.org/upload/clab-upload.html
- [[C言語おすすめ情報>../C言語参考資料]]
-- 参考になるWebページや書籍の紹介。
** 基本課題 [#za0a799c]
*** 配列 [#r3001ab8]
''b1)'' 4つの要素を持つdouble型配列にキーボードから数値列...
>【ポイント】 たとえばint a[N];と宣言した配列は、a[0]か...
int a[10];
a[10] = 3; /* 誤り!! */
上記は誤りだが、通常Cコンパイラはこれを検出しない。しかし...
''★b2)'' キーボードから10個の整数を読み込み,最後に入力と...
''★b3)'' キーボードから10個の整数を読み込んだ後、平均以上...
*** 文字列 [#k50dd459]
''b4)'' scanfを用いて,自分の出身地(都道府県など)をローマ...
>【ポイント】 文字列の文字配列への読み込みには、%sを用い...
char str[128];
/* 読み込める長さを指定しないやり方 */
scanf("%s", str);
/* 読み込める長さを指定したもっと好ましいやり方 */
scanf("%127s", str);
''★b5)'' 文字型の配列を自分の名前のローマ字で初期化し(変...
>【ポイント】 文字列の最後は、ヌル文字('\0': 終端文字)...
char str[] = "Tamagawa";
の場合、下記のように9文字分の領域を取る。
0 1 2 3 4 5 6 7 8
str[] ['T'|'a'|'m'|'a'|'g'|'a'|'w'|'a'|'\0']
>また,C言語における1文字の実態は整数の文字コード(要する...
0 1 2 3 4 5 6 7 8
str[] [ 84| 97|109| 97|103| 97|119| 97| 0 ]
** 応用課題 [#k36b0ef6]
''bx1)'' キーボードから、double型の配列v[2]およびw[2]を読...
- 参考(ベクトルの加算) http://shigihara.hp.infoseek.co....
- 参考(ベクトルの内積) http://shigihara.hp.infoseek.co....
*** 線形探索法 [#qd38c54a]
''bx2)'' キーボードから、10個の整数を要素とする配列aと、...
i→ →| iを0から9まで変化
0 1 2 3 4 5 6 7 8 9
a[] [__|__|__|__|__|__|__|__|__|__]
a[i]とxを比較
''bx3)'' キーボードからアルファベットからなる文字列を読み...
*** ROT13暗号 [#m5d87930]
''bx4)'' ROT13暗号とは,欧文に含まれる文字を1文字ずつ,下...
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B ...
A→→→→→→→→→→→→ N
H→→→→→→→→→→→→ U
N→→→→→→→→→→→→ A
Q→→→→→→→→→→→→ D
Aの13文字後はN,HはU,NはA,QはDへと変換され,例えば「HEL...
キーボードから読み込んだ文字列を,ROT13暗号によって暗号化...
>【ポイント】 スペースを含む文字列を1行読み込む関数にはg...
char str[128];
scanf("%127[^\n]", str);
*** スタックの実装 [#yd020f96]
''bx5)'' スタックとは、''先入れ後出し方式''のデータ構造で...
以下のような動作をするプログラムを作成しなさい。
+ スタックとスタックポインタを表す変数を用意する。
-- int stack[100]; 100個の整数を保存しておくための配列。
-- int sp = 0; スタックの中の''次の空き''を示すための変...
+ キーボードから整数xを読み込む。
+ xの値を判定し:
-- x>0ならば、xをstackに積んで2.に戻る(push)。言い換え...
● xを積む(push)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|__|__|__|__|__|....
↑
次の空き(sp)
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|●|__|__|__|__|....
↑
次の空き(1増えたsp)
-- x<0ならば、stackに最後に積んだ値を表示して、それをstac...
次の空き(sp)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|●|__|__|__|__|....
↓
取り出す(pop)
次の空き(1減ったsp)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|__|__|__|__|__|....
↓
●
-- x=0ならば、stackの中身を逆順にすべて表示して、プログラ...
+ 2.に戻って繰り返す。
なお、スタックにデータをしまう操作をpushといい、データを...
** 発展課題 [#q69dba43]
以下の''bz1)''と''bz2)''の好きなほうを解きなさい。もちろ...
*** ブラックジャック [#qa864928]
''bz1)'' トランプゲームのブラックジャック(簡略版)を作成...
''準備''
+ 以下のような変数を用意しておくとよい。
int cards[52]; /* トランプのカード52枚を格納する配列 */
int player[10]; /* プレイヤーの手札 */
int dealer[10]; /* コンピュータの手札 */
int n_drawn; /* 既に束から引いたカードの枚数 */
int n_player; /* プレイヤーの手札の枚数 */
int n_dealer; /* コンピュータの手札の枚数 */
+ 配列cards[]に,スペードの「A」からクラブの「K」までの全...
n = 0;
for (i = 1; i <= 13; i++) {
cards[n++] = i;
cards[n++] = i;
cards[n++] = i;
cards[n++] = i;
}
+ カードの束をよくシャッフルする。よくある方法では,配列c...
/* rand()使用前に1度だけ実行 */
srand((unsigned) time(NULL))
for (i = 0; i < 300; i++) {
n = rand() % 52;
m = rand() % 52;
temp = cards[n];
cards[n] = cards[m];
cards[m] = temp;
}
''ゲーム''
+ 先頭のカードを2枚取り出し,コンピュータの手札とする。こ...
-- 配列cards[]の先頭の整数2つを,配列dealer[]にコピーすれ...
-- 変数n_drawnとn_dealerも適切な値になるように。
+ 同様に,次のカードを2枚取り出し,プレイヤーの手札とする...
-- 次の整数2つを,配列player[]にコピーすればよい。
-- 変数n_drawnとn_playerも適切な値になるように。
+ プレイヤーはカードの数字の合計が21に近くなるように,カ...
-- 例えば「次のカードを引きますか?(Y/N)」という表示を出...
-- 「J」「Q」「K」は,10として計算する。「A」は1または11...
-- カードの合計が21を超えてしまった場合は,その時点で負け...
+ プレイヤーが終わったら,コンピュータの番である。
-- コンピュータは,カードの数字の合計が16以下だった場合に...
-- もし,17以上になったらそのカードで引くのを終わりにする。
-- このとき「A」が含まれていたら,まず11として計算して17...
-- プレイヤーと同様に21を超えてしまったら,その時点で負け...
+ 最後に,プレイヤーとコンピュータを比較して,21を超えず...
*** RPGの戦闘プログラム(続き) [#yb42df06]
''bz2)'' ''az1)''の戦闘プログラムを改良して,複数対複数で...
... 味方2 味方1 味方0 →×← モンスター0 モンスター1 モンス...
主人公たちは,狭い洞窟の通路を,たいまつを灯しながら1列に...
+ 主人公側,モンスター側ともに,メンバーに0から番号を振っ...
-- 技術点や体力点を保存するのには配列を利用する。たとえば...
+ まず,主人公側の1人目とモンスター側の1匹目が対戦する。...
-- ここで,体力がゼロになるまで戦わず,ある値(例えば5)...
+ 勝った側は勝ち抜きとなり,次の相手とそのまま対戦する。...
+ 以下同様に闘い,どちらかが全滅したら戦闘終了である。
前回同様,乱戦に対応させるなど,これも改良自由である。
終了行:
* 第2回 配列 [#xef7c5f7]
- ''基本課題''は授業時間中に終わらせること。
- ★印の付いている問題は,当教員に見せて確認の印(またはサ...
- 授業時間中に終わらなかった''応用課題''は,次回(2週間後...
- [[C言語のコンパイルと実行のしかた>../C言語環境]]
-- プログラムのファイル名は,「問題番号.c」としてください...
- [[プログラムの提出のしかた>../提出]]
-- 提出URL http://vilab.org/upload/clab-upload.html
- [[C言語おすすめ情報>../C言語参考資料]]
-- 参考になるWebページや書籍の紹介。
** 基本課題 [#za0a799c]
*** 配列 [#r3001ab8]
''b1)'' 4つの要素を持つdouble型配列にキーボードから数値列...
>【ポイント】 たとえばint a[N];と宣言した配列は、a[0]か...
int a[10];
a[10] = 3; /* 誤り!! */
上記は誤りだが、通常Cコンパイラはこれを検出しない。しかし...
''★b2)'' キーボードから10個の整数を読み込み,最後に入力と...
''★b3)'' キーボードから10個の整数を読み込んだ後、平均以上...
*** 文字列 [#k50dd459]
''b4)'' scanfを用いて,自分の出身地(都道府県など)をローマ...
>【ポイント】 文字列の文字配列への読み込みには、%sを用い...
char str[128];
/* 読み込める長さを指定しないやり方 */
scanf("%s", str);
/* 読み込める長さを指定したもっと好ましいやり方 */
scanf("%127s", str);
''★b5)'' 文字型の配列を自分の名前のローマ字で初期化し(変...
>【ポイント】 文字列の最後は、ヌル文字('\0': 終端文字)...
char str[] = "Tamagawa";
の場合、下記のように9文字分の領域を取る。
0 1 2 3 4 5 6 7 8
str[] ['T'|'a'|'m'|'a'|'g'|'a'|'w'|'a'|'\0']
>また,C言語における1文字の実態は整数の文字コード(要する...
0 1 2 3 4 5 6 7 8
str[] [ 84| 97|109| 97|103| 97|119| 97| 0 ]
** 応用課題 [#k36b0ef6]
''bx1)'' キーボードから、double型の配列v[2]およびw[2]を読...
- 参考(ベクトルの加算) http://shigihara.hp.infoseek.co....
- 参考(ベクトルの内積) http://shigihara.hp.infoseek.co....
*** 線形探索法 [#qd38c54a]
''bx2)'' キーボードから、10個の整数を要素とする配列aと、...
i→ →| iを0から9まで変化
0 1 2 3 4 5 6 7 8 9
a[] [__|__|__|__|__|__|__|__|__|__]
a[i]とxを比較
''bx3)'' キーボードからアルファベットからなる文字列を読み...
*** ROT13暗号 [#m5d87930]
''bx4)'' ROT13暗号とは,欧文に含まれる文字を1文字ずつ,下...
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B ...
A→→→→→→→→→→→→ N
H→→→→→→→→→→→→ U
N→→→→→→→→→→→→ A
Q→→→→→→→→→→→→ D
Aの13文字後はN,HはU,NはA,QはDへと変換され,例えば「HEL...
キーボードから読み込んだ文字列を,ROT13暗号によって暗号化...
>【ポイント】 スペースを含む文字列を1行読み込む関数にはg...
char str[128];
scanf("%127[^\n]", str);
*** スタックの実装 [#yd020f96]
''bx5)'' スタックとは、''先入れ後出し方式''のデータ構造で...
以下のような動作をするプログラムを作成しなさい。
+ スタックとスタックポインタを表す変数を用意する。
-- int stack[100]; 100個の整数を保存しておくための配列。
-- int sp = 0; スタックの中の''次の空き''を示すための変...
+ キーボードから整数xを読み込む。
+ xの値を判定し:
-- x>0ならば、xをstackに積んで2.に戻る(push)。言い換え...
● xを積む(push)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|__|__|__|__|__|....
↑
次の空き(sp)
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|●|__|__|__|__|....
↑
次の空き(1増えたsp)
-- x<0ならば、stackに最後に積んだ値を表示して、それをstac...
次の空き(sp)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|●|__|__|__|__|....
↓
取り出す(pop)
次の空き(1減ったsp)
↓
0 1 2 3 4 5 6 7 8 9
stack [●|●|●|●|●|__|__|__|__|__|....
↓
●
-- x=0ならば、stackの中身を逆順にすべて表示して、プログラ...
+ 2.に戻って繰り返す。
なお、スタックにデータをしまう操作をpushといい、データを...
** 発展課題 [#q69dba43]
以下の''bz1)''と''bz2)''の好きなほうを解きなさい。もちろ...
*** ブラックジャック [#qa864928]
''bz1)'' トランプゲームのブラックジャック(簡略版)を作成...
''準備''
+ 以下のような変数を用意しておくとよい。
int cards[52]; /* トランプのカード52枚を格納する配列 */
int player[10]; /* プレイヤーの手札 */
int dealer[10]; /* コンピュータの手札 */
int n_drawn; /* 既に束から引いたカードの枚数 */
int n_player; /* プレイヤーの手札の枚数 */
int n_dealer; /* コンピュータの手札の枚数 */
+ 配列cards[]に,スペードの「A」からクラブの「K」までの全...
n = 0;
for (i = 1; i <= 13; i++) {
cards[n++] = i;
cards[n++] = i;
cards[n++] = i;
cards[n++] = i;
}
+ カードの束をよくシャッフルする。よくある方法では,配列c...
/* rand()使用前に1度だけ実行 */
srand((unsigned) time(NULL))
for (i = 0; i < 300; i++) {
n = rand() % 52;
m = rand() % 52;
temp = cards[n];
cards[n] = cards[m];
cards[m] = temp;
}
''ゲーム''
+ 先頭のカードを2枚取り出し,コンピュータの手札とする。こ...
-- 配列cards[]の先頭の整数2つを,配列dealer[]にコピーすれ...
-- 変数n_drawnとn_dealerも適切な値になるように。
+ 同様に,次のカードを2枚取り出し,プレイヤーの手札とする...
-- 次の整数2つを,配列player[]にコピーすればよい。
-- 変数n_drawnとn_playerも適切な値になるように。
+ プレイヤーはカードの数字の合計が21に近くなるように,カ...
-- 例えば「次のカードを引きますか?(Y/N)」という表示を出...
-- 「J」「Q」「K」は,10として計算する。「A」は1または11...
-- カードの合計が21を超えてしまった場合は,その時点で負け...
+ プレイヤーが終わったら,コンピュータの番である。
-- コンピュータは,カードの数字の合計が16以下だった場合に...
-- もし,17以上になったらそのカードで引くのを終わりにする。
-- このとき「A」が含まれていたら,まず11として計算して17...
-- プレイヤーと同様に21を超えてしまったら,その時点で負け...
+ 最後に,プレイヤーとコンピュータを比較して,21を超えず...
*** RPGの戦闘プログラム(続き) [#yb42df06]
''bz2)'' ''az1)''の戦闘プログラムを改良して,複数対複数で...
... 味方2 味方1 味方0 →×← モンスター0 モンスター1 モンス...
主人公たちは,狭い洞窟の通路を,たいまつを灯しながら1列に...
+ 主人公側,モンスター側ともに,メンバーに0から番号を振っ...
-- 技術点や体力点を保存するのには配列を利用する。たとえば...
+ まず,主人公側の1人目とモンスター側の1匹目が対戦する。...
-- ここで,体力がゼロになるまで戦わず,ある値(例えば5)...
+ 勝った側は勝ち抜きとなり,次の相手とそのまま対戦する。...
+ 以下同様に闘い,どちらかが全滅したら戦闘終了である。
前回同様,乱戦に対応させるなど,これも改良自由である。
ページ名: