課題 [12] ポインタ②(2/9)

問 2(提出プログラム名:ex1202.c)

このプログラム(ex1202.c)をダウンロードし,その中の関数 fill_geometric を完成させなさい

関数 fill_geometric は,指定された配列の内容を初項 a,公比 r の等比数列で埋めるものとする.
なお,この関数の引数は次の 3 つである:
  p:書き換え対象の配列を参照するポインタ
  a:初項
  r:公比

ただし,配列の長さはマクロ SIZE で定義されている.

【注意】
関数 main の内容は一切書き換えないこと.
あわせて,配列の長さについてはマクロ SIZE を使うものとし,5 といったこれに関連する数字を直接書いてはいけません.

【ヒント】
第 n 項の値は,第 n-1 項の値に r をかければ求まります
扱う数値はすべて実数(double型)なので,キャストの必要はありません
なお,配列の添字として有効な範囲は 0 以上 SIZE 未満(SIZE-1 以下)なので,この範囲外の要素(p[-1]p[SIZE])にアクセスしてしまうことの無いよう for 文や while 文での制御変数の初期値繰り返しの条件に注意してください.
具体的には,
  for ( i = 0; i < SIZE; i++ )
と書いた場合には i = 0 の時に p[i-1]p[-1] になってしまうこと,
  for ( i = 1; i <= SIZE; i++ )
と書いた場合には i = SIZE の時に p[i]p[SIZE] になってしまうこと(いずれも誤りです)にそれぞれ注意してください.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
大きさ 5 の配列を等比数列で埋めます.
初項と公比を入力してください:5.5 1.1
x[0] = 5.500
x[1] = 6.050
x[2] = 6.655
x[3] = 7.321
x[4] = 8.053
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
大きさ 5 の配列を等比数列で埋めます.
初項と公比を入力してください:3.14 -1
x[0] = 3.140
x[1] = -3.140
x[2] = 3.140
x[3] = -3.140
x[4] = 3.140

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
■ 不要なキャストが行われている.
■ 繰り返しの中で配列の範囲外(p[-1] や p[SIZE])を読み書きしてしまっている.
注意書きを見落としていて main 関数の中身を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問3 (ex1203.c) ]