平成21年 秋期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 C言語では整数型の変数に格納できる値には上限がある。これを超える正の整数 (以下,正の多倍長整数という)の入出力と加算を行うプログラムである。 (1) 正の多倍長整数は,次に示す MP 型の構造体を用いて表現する。
typedef struct{
int length;
long data[ARRAY_MAX];
}MP;
正の多倍長整数を,下位から9けたずつに切り分けて, 構造体 MP のメンバである配列 data の要素番号の小さい方から順番に値を格納する。 例えば,46284059827463859201283844157134007652918723147641 という整数の場合, 図のとおりになる。
図 正の多倍長整数の格納例 構造体のメンバー length には,実際に値を格納した要素数を入れる。図の場合は6である。 (2) 関数の仕様は,次のとおりである。
void set(MP *num, const char str[]); 引数: num MP 型の構造体で表現された多倍長整数 str 文字列で表現された多倍長整数であって,1〜9の数字で始まる。 機能:文字列で与えられた多倍長整数 str を変換して,MP 型の構造体 num に、 格納する。 num のメンバ data は,変換後の数値を格納するのに十分な要素数が 確保されているものとする。 返却値:なし
void print(const MP *num);引数: num MP 型の構造体で表現された多倍長整数 機能:多倍長整数を出力する。 返却値:なし
void add(const MP *a, const MP *b, MP *c);引数:a, b, c MP 型の構造体で表現された多倍長整数であり,c は,a 及び b ではないものとする。 機能:二つの多倍長整数 a,b の和を多倍長整数 c に格納する。c のメンバ dataは, 加算処理を行うのに十分な要素数が確保されているものとする。 返却値:なし (3) 次のライブラリ関数を用いる。
size_t strlen(const char *s);機能:s が指す文字列の長さを計算する。 返却値:終端を示すナル文字に先行する文字の個数を返す。 〔プログラム〕
#include <stdio.h>
#include <string.h>
#define ARRAY_MAX 100
#define NUM_DIGIT 9
#define NUM_DIGIT_TH_POWER_OF_TEN 1000000000
typedef struct{
int length;
long data[ARRAY_MAX];
}MP;
void set(MP*, const char[]);
void print(const MP*);
void add(const MP*, const MP*, MP*);
/* 文字列から多倍長整数を扱う構造体に変換 */
void set(MP *num, const char str[]){
int str_idx = strlen(str) - 1;
int num_idx = 0;
int i;
long mul;
while(
設問1 プログラム中の a に関する解答群 エ str_idx > 0 オ str_idx >= 0 イ i < NUM_DIGIT && str_idx <= 0 ウ i < NUM_DIGIT && str_idx >= 0 エ i < NUM_DIGIT || str_idx <= 0 オ i < NUM_DIGIT || str_idx >= 0 イ i = 0; i <= num->length - 2; i++ ウ i = num->length - 1; i >= 0; i-- エ i = num->length - 2; i >= 0; i--
設問2 プログラムの動作について, 次の記述中の に入れる正しい答えを解答群の中から選べ。
関数 add を用いて以下の (1) に示す二つの多倍長整数を加算する場合,
プログラム中のα部分は
![]() e 〜g に関する解答群 オ 4 カ 5 キ 6 ク 7
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|
