CLab/2008-F03
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
* 第3回 配列 [#c2dd887a]
- ''基本課題''は,必ず授業時間中に終わらせること。
- ''★印の付いている問題''は,担当教員に見せて確認の印(ま...
- ''応用課題''は,終わらなかったら次週(1週間後の午前11:0...
- ''他人のコピーと判断されたものは正当な提出と認めない。'...
- プログラムのファイル名は,「問題番号.c」とすること。
-- 例: a1.c, ax3.c
- [[プログラムの提出のしかた>../提出]]をよく読むこと。
-- 提出URL http://vilab.org/upload/clab-upload.html
** 基本課題 [#b136922c]
*** 配列 [#v070f397]
''c1)'' 4つの要素を持つdouble型配列にキーボードから数値列...
>【ポイント】 たとえばint a[N];と宣言した配列は,a[0]か...
int a[10];
a[10] = 3; /* 誤り!! */
上記は誤りだが,通常Cコンパイラはこれを検出しない。しかし...
''c2)''★ キーボードから10個の整数を読み込み,最後に''入力...
''c3)''★ キーボードから10個の整数を読み込んだ後,まず平均...
*** 文字列 [#l7bb42ea]
''c4)'' scanfを用いて,自分の出身地(都道府県など)をローマ...
>【ポイント】 文字列の文字配列への読み込みには,%sを用い...
char str[128];
/* 読み込める長さを指定しないやり方 */
scanf("%s", str);
/* 読み込める長さを指定したもっと好ましいやり方 */
scanf("%127s", str);
最大文字数を指定しないと,セキュリティホール(バッファオ...
''c5)''★ 文字型の配列を自分の名前のローマ字で初期化し(変...
>【ポイント】 文字列の最後は,ヌル文字('\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 ]
** 応用課題 [#e3ee7314]
''cx1)'' キーボードから,double型の配列v[2]およびw[2]を読...
- 参考(ベクトルの加算) http://shigihara.hp.infoseek.co....
- 参考(ベクトルの内積) http://shigihara.hp.infoseek.co....
*** 線形探索法 [#sdb54816]
''cx2)'' キーボードから,10個の整数を要素とする配列aと,...
i→ →| iを0から9まで変化
0 1 2 3 4 5 6 7 8 9
a[] [__|__|__|__|__|__|__|__|__|__]
a[i]とxを比較
''cx3)'' キーボードからアルファベットからなる文字列を読み...
*** ROT13暗号 [#q2f2a90c]
''cx4)'' 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);
*** スタックの実装 [#n41232f7]
''cx5)'' スタックとは,''先入れ後出し方式''のデータ構造で...
以下のような動作をするプログラムを作成しなさい。
+ スタックとスタックポインタを表す変数を用意する。
-- 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といい,データを...
** 発展課題 [#d67e5cb8]
- 発展課題には''提出期限を設けない''ので,前回までの発展...
*** ブラックジャック [#md555ea1]
''cz1)'' トランプゲームのブラックジャック(簡略版)を作成...
''準備''
+ 以下のような変数を用意しておくとよい。
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を超えず...
終了行:
* 第3回 配列 [#c2dd887a]
- ''基本課題''は,必ず授業時間中に終わらせること。
- ''★印の付いている問題''は,担当教員に見せて確認の印(ま...
- ''応用課題''は,終わらなかったら次週(1週間後の午前11:0...
- ''他人のコピーと判断されたものは正当な提出と認めない。'...
- プログラムのファイル名は,「問題番号.c」とすること。
-- 例: a1.c, ax3.c
- [[プログラムの提出のしかた>../提出]]をよく読むこと。
-- 提出URL http://vilab.org/upload/clab-upload.html
** 基本課題 [#b136922c]
*** 配列 [#v070f397]
''c1)'' 4つの要素を持つdouble型配列にキーボードから数値列...
>【ポイント】 たとえばint a[N];と宣言した配列は,a[0]か...
int a[10];
a[10] = 3; /* 誤り!! */
上記は誤りだが,通常Cコンパイラはこれを検出しない。しかし...
''c2)''★ キーボードから10個の整数を読み込み,最後に''入力...
''c3)''★ キーボードから10個の整数を読み込んだ後,まず平均...
*** 文字列 [#l7bb42ea]
''c4)'' scanfを用いて,自分の出身地(都道府県など)をローマ...
>【ポイント】 文字列の文字配列への読み込みには,%sを用い...
char str[128];
/* 読み込める長さを指定しないやり方 */
scanf("%s", str);
/* 読み込める長さを指定したもっと好ましいやり方 */
scanf("%127s", str);
最大文字数を指定しないと,セキュリティホール(バッファオ...
''c5)''★ 文字型の配列を自分の名前のローマ字で初期化し(変...
>【ポイント】 文字列の最後は,ヌル文字('\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 ]
** 応用課題 [#e3ee7314]
''cx1)'' キーボードから,double型の配列v[2]およびw[2]を読...
- 参考(ベクトルの加算) http://shigihara.hp.infoseek.co....
- 参考(ベクトルの内積) http://shigihara.hp.infoseek.co....
*** 線形探索法 [#sdb54816]
''cx2)'' キーボードから,10個の整数を要素とする配列aと,...
i→ →| iを0から9まで変化
0 1 2 3 4 5 6 7 8 9
a[] [__|__|__|__|__|__|__|__|__|__]
a[i]とxを比較
''cx3)'' キーボードからアルファベットからなる文字列を読み...
*** ROT13暗号 [#q2f2a90c]
''cx4)'' 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);
*** スタックの実装 [#n41232f7]
''cx5)'' スタックとは,''先入れ後出し方式''のデータ構造で...
以下のような動作をするプログラムを作成しなさい。
+ スタックとスタックポインタを表す変数を用意する。
-- 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といい,データを...
** 発展課題 [#d67e5cb8]
- 発展課題には''提出期限を設けない''ので,前回までの発展...
*** ブラックジャック [#md555ea1]
''cz1)'' トランプゲームのブラックジャック(簡略版)を作成...
''準備''
+ 以下のような変数を用意しておくとよい。
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を超えず...
ページ名: