![]()
平成20年 春期 基本情報技術者 午後 問10
問10 C言語次のCプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 (1) 正の有限小数又は循環小数を既約分数(分子と分母がともに整数で共通の約数を もたない分数)に変換するプログラムである。 (2) 有限小数とは,小数点以下のけた数が有限けたである小数をいう。一方,循環小数とは, 小数部の特定の位置以降は,同じ数字列が無限に繰り返される小数をいう。
例えば, (3) プログラムでは,循環節を除く小数部のけた数がn,循環節のけた数がkの場合, その小数を10(n+k )倍したものから10n 倍したものを引くと, 整数となることを用いて既約分数への変換を行う。
![]() ![]() ![]() ![]() (4) プログラムヘの入力では,循環節は "{" と "}" で囲んで表す。例えば, 0.2142857142957… は 0.2{142857} と入力する。 (5) プログラムは,整数(小数点を含まない)を入力することもできる。 (6) プログラムの実行例を表に示す。 表 プログラムの実行例
(7) プログラム中で定義されている関数の仕様は,次のとおりである。 void tofraction(Char *str);
機能:str を既約分数に変換して表示する。str に含まれる数字は9個以下とする。 また,誤った文字列が与えられることはない。
引数:自然数 a, b 返却値:a と b の最大公約数
A long power10(int num); 引数:0〜9の整数 num 返却値:10 の num 乗
(9) 次のライブラリ関数を用いる。 int isdigit(int c); 返却値:文字 c が 10 進数字であれば0以外,そうでなければ0
〔プログラム〕 #include <stdio.h> #include <ctype.h> void tofraction(char *); long power10(int); long gcd(long, long); void tofraction(char *str){ long numerator = 0; /* 分子 */ long denominator; /* 分母 */ int flag = 0; int n = 0; /* 循環節を除く小数部のけた数 */ int k = 0; /* 循環節のけた数 */ long measure; /* 求分子と分母の最大公約数 */ while(
設問 プログラム中の a に関する解答群 ウ str != '\0' エ str != '0'
エ -= 10 オ %= 10 ウ str++ エ str--
エ == 0 オ == 1 カ == 2 イ power10(n) * power10(k) ウ (power10(n) - 1) * power10(k) エ power10(n) * (power10(k) - 1) イ denominator / power10(k) ウ numerator / power10(n) エ numerator / power10(k)
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||