C言語上級_問題


※各問に対する正しいプログラムを記述しなさい。

各問題には、条件、ヒントとして条件文、図、動作結果、プログラムの例を表示しています。

実行すると動作結果通りまたは、問に正対する動作結果が得られたら正解です。

PDF版のダウンロード


問題1:入力された金額を金種別に分類するプログラムを作成しなさい。但し、次の条件に合うように金種計算プログラムを完成させよ。

(標準問題10番の問題の応用)

条件:

①枚数は、考えられる数の最小になるようにすること。また今回は、一万円、五千円、千円、五百円、百円、五十円、十円、五円、一円を考えること。(二千円は考えない)

②プログラムは、最大10人分のデータが入るようにすること。

③プログラムでは構造体を用いてデータを作成すること、データの内訳は、図1-1のようにすること。

④一連の処理が完了したとき、「別データを入力しますか?」と問い、ユーザーがYES(1)を入力したら、入力処理から再開し、NO(0)が入力されたら終了するようにしなさい。その処理は、図1-2の処理文を利用し、main関数内に記述すること。(文中の変数名は変更しても構わない)

⑤プログラムの自作関数は、図1-3のように構成し、main関数内に記述するのは、変数宣言と自作関数、と図1-2の処理文とそれに関連する文のみとし、それ以外の入力、演算、出力は、それぞれの自作関数内で行うこと。

⑥プログラム上では次の文の記述を禁止する。

・goto構文とラベル文

・switch構文(else ifによるスイッチも含む【if、elseは可】)

⑦プログラム上では次の要素を入れること。

・ポインター([*][&]間接参照演算子等)

・構造体(typedef struct ~等)

・文字列配列

⑧出力は、画面に表示するのとtxt出力もすること。またそれぞれの出力には、それぞれ別の関数を作成すること。(呼び出しの順序は問わない)

⑨出力の際には、図1-4のように「一万円は、XXXX枚」のように表記し、体裁をそろえること。

⑩テキスト出力の際、テキストファイルには、日付、時刻データも記入すること。またそのために「time.h」をインクルードし、「tm構造体(time.hで定義されている構造体)」を使用し、「time関数、localtime関数(time.hで定義されている関数)」を使用すること。

また「time.h」を用いたプログラムの例を図1-5を参考に添付する。

⑪その他の各宣言(配列)の例として、図1-6のようにする。

⑫プログラムの例として、図1-7(画面表示)、図1-8(テキスト出力)に示す。

⑬プログラムは200行以内で記述すること。


問題2:こいこい役判定、文数計算プログラムを作成せよ。但し、次のルール、条件に合うようにプログラムを完成させよ。

こいこい役判定、文数についてのルール

※図2-1にも絵付で説明しています。

①判定する役と文数は、次の13種類とする。

(1)、五光(10文)

・光札5枚

(2)、四光(8文)

・光札4枚但し「小野道風に蛙」を含まない

(3)、雨四光(7文)

・光札4枚但し「小野道風に蛙」を含む

(4)、三光(5文)

・光札3枚但し「小野道風に蛙」を含まない

(5)、花見で一杯(5文)

・「菊に盃」「桜に幕」

(6)、月見で一杯(5文)

・「菊に盃」「芒に月」

(7)、猪鹿蝶(5文+猪鹿蝶以外のタネ札の数)

・「萩に猪」「紅葉に鹿」「牡丹に蝶」

(8)、赤短青短(10文+赤短、青短以外の短冊札の数)

・赤短札3枚と青短札3枚

(9)、赤短(5文+赤短以外の短冊札の数)

・赤短札3枚

(10)、青短(5文+青短以外の短冊札の数)

・青短札3枚

(11)、タネ(1文)

・タネ札(10点札)5枚以上、6枚目から1枚毎に+1文

(12)、タン(1文)

・短冊札5枚以上、6枚目から1枚毎に+1文

(13)、カス(1文)

・カス札10枚以上、11枚目から1枚毎に+1文

②①以外の役、手四、くっつきの判定は行わない。

③役ルールとして次の条件を考慮すること。

・(7)猪鹿蝶が成立した時点で(11)タネ消滅

・(8)赤短青短が成立した時点で(9)赤短、(10)青短、(12)タン消滅

・(9)赤短が成立した時点で(12)タン消滅

・(10)青短が成立した時点で(12)タン消滅

④札のルールについて次のように定義する。

・光札:「鶴に松」「桜に幕」「芒に月」「小野道風に蛙」「桐に鳳凰」

・タネ札(10点札):「梅に鶯」「藤にほととぎす」「菖蒲に八ツ橋」「牡丹に蝶」「萩に猪」「芒に雁」「菊に杯」「紅葉に鹿」「柳に燕」

・短冊札:芒(8月)、桐(12月)以外に1枚づつ計10枚

・カス札:上記以外

・「小野道風に蛙」は、カス札、タネ札に計上される。

※詳細は、図2-1参照

⑤各月毎の花鳥風月を次のように定義する。

1月:松

2月:梅

3月:桜

4月:藤

5月:菖蒲(アヤメ)

6月:牡丹(ボタン)

7月:萩

8月:芒(ススキ)

9月:菊

10月:紅葉(モミジ)

11月:柳

12月:桐

⑥合計7文以上の場合は、文数は2倍になる。

⑦こいこいルールは次のURLを参考に定義するものとする。

http://www.nintendo.co.jp/n09/hana-kabu_games/

 

条件:

①役と文数、札については、全て上記ルールに従うものとする。

②プログラムでは配列(文字列配列含む)、列挙体を用いてデータを作成すること、但し列挙体は、プログラムを明確にするために使用する、データの内訳は、図2-2のようにすること。

③プログラムの処理構成は、入力、計算、出力共すべて自作関数で行うものとする。

④プログラム上では次の文の記述を禁止する。

・goto構文とラベル文

・switch構文(else if、if、elseは可)

⑤プログラム上では次の要素を入れること。

・ポインター([*][&]間接参照演算子等)

・列挙体(enum)

・文字列配列

⑥main関数に記述するのは、タイトル「こいこい役計算機」とデータの宣言と自作関数のみとする。

⑦入力処理の関数(Input_data)は、各月毎に取得したパターン(16通り)を明示し、数字0~15で解答させる。12回行い、データを16進数で保存するようにする。但、全てのパターンは、281,474,976,710,656通り(=6byte)でint型では最大2,147,483,647bit(=4byte-符号ビット(1bit))の値しか保存できないので、パターンは、(unsigned)  long long型(=8byte)を使うこと。メモリの仕様を図2-3で示す。(解答例ではunsigned long long型で記述しています。)

また、0~15以外の数字が入力されたら、再入力させること。

⑧入力処理が終了したら、取得したパターンを基に、取得した札を明示したうえで、このパターンで処理を実行するか尋ねる事。

⑨計算処理を行う関数(Calc_Fuda)では、札種別の枚数[13]、48枚の所持の有無[48]、役別文数[13](全て配列)の値を計算すること。

⑩出力処理(Output_data)では、計算処理で計算した、役別文数を使い、出力を行う、またその際所持している札も明示すること。

⑪所持している札を明示する際、月ごとに表示し、その時その月の花鳥風月、札の名前を明示すること。明示は、入力の最後の確認、出来役を表示するときに行う。

明示の例を図2-4で示す。

役がない時は、「*出来役はありません*」と表示する。

⑫関数の定義を図2-5で示す。

⑬データを格納する配列の例を図2-2で示す。

⑭図2-2データの定義、図2-5関数の定義で使用した名前(関数名、配列名、列挙体名及び列挙体で定義される文字)は、変更しても構わない。

⑮図では、列挙体の文字は明確にするために日本語で表記していますが、コンパイラによっては日本語表記ができない場合があるので、その場合は、ローマ字や英語表記で記述しても構わない。

⑯出力結果の例を図2-6(あまりにも長いので簡略してある)に示す。(図2-7で、全部を示す)

⑰プログラムは、300行以内で記述すること。

 

※仮にすべて取得(48枚所持してる)時の役、文数は、次のようになる。


五光         10文

花見で一杯      5文

月見で一杯      5文 

猪鹿蝶+タネ6   11文

赤短青短+タン4  14文

カス          15文

———————————————————————

合計          60文×2=120文

「図2-8 実行例その2(一部)参照」

図2-7(長いので別ページで示す)

図2-8 実行例その2(一部)