C言語初学者です。
C言語の数列の問題で配列を使って解こうとするといつもエラーが出てしまい、自分で調べても何が間違えているのかわからなかったので質問させていただきました。
以下は与えられた問題です。
2つの数a0 = 0 a1 = 1が与えられたとき、an+2 = an +an+1 (n ≥ 0)で定義され る数列をフィボナッチ数列という。非負整数 n を入力すると 0 番目から n 番目ま でのフィボナッチ数列を表示するプログラムを作成せよ。
配列を利用して解くという問題指定もついていました。
最初に配列を指定するときの要素数をどうすればいいのかを特に教えてほしいです。
自分の能力不足は重々承知しているつもりですので優しく教えてほしいです。よろしくお願いします。
以下、エラーのコードです。
int main(){ int n,i,Fn; int a[]; printf("Enter the number:"); scanf("%d",&n); printf("0\n"); printf("1\n"); if (n>=2) { for (i=2; i<=n; i++) { a[i]=a[i-1]+a[i-2]; Fn=a[i]; printf("%d\n",Fn); } } return 0; }
> 最初に配列を指定するときの要素数をどうすればいいのかを特に教えてほしいです。
配列は不要です。
どのように配列を使えという指示があるなら、それによって数が変わってくるでしょう。
エラーが出た状態のコードと、実際に発生したエラーをご提示いただけませんでしょうか?
どのように配列を使えという指示はありませんでした。
ただ、「配列を使用する」と記述してありました。
n の入力後に int a[n]; とか…。
2 要素でデータをスライドしながら使うのも手ですが、3 要素のリングバッファを使いたいところです。
n 個の要素を確保するのであれば、int の最大値から、値がオーバーフローしない最大の n を求めるのが良いと思います。
そこまでしなくても、適当に大きい数を指定すれば、使いきれず終わると思います。
> 調べても何が間違えているのかわからなかった
「調べる」とは?
何が間違いなのかはエラーメッセージとして出ているのでは.
>最初に配列を指定するときの要素数をどうすれば
hoshi-takanori さんのコメントで十分な気がします。(出来る処理系か分かりませんが。)
可変長配列は C11 でオプションに格下げになったので(つまり方言扱いなので)、学習時に使用していいかは微妙かと。中学英語のテストで you のことを u と書くと不正解になるような。
C11 で可変長配列が削除されたのは知りませんでした。となると、選択肢は
・n の最大値を決めておく
・malloc などで動的に確保する
・処理系依存を承知で可変長配列
・長さ 3 の配列を使い回す
ってことになるでしょうか。
どれがいいかは出題者の意図を確認する必要があるかと…。
一つ目。「いつもエラーが出てしまい」とありますがどのようなエラーでしょうか?
エラーの種類によって対処が全く変わってきます。
http://blog.livedoor.jp/crackstars/archives/17846001.html
二つ目。「自分で調べても」とありますが、どのように調べ、どのように試したのでしょうか?
プログラマやSEは単に決まったコードを打つだけ…ではありません。不具合の原因を調査し修正することも含みます。デバッガで潜るとか、OS周りの調査とか。
質問者さんとしては何かしらの調査をしたのかもしれませんが、他のユーザは所詮赤の他人なのでどんな風に何をしたのかさえ言われないとわかりません。
三つ目。授業ではどこまで習ったか書きましょう。書かない場合は「実装できればいい」と考えられてしまいます。他の方も仰っているように教師が考えた答え以外は認めない場合もありますよ。
回答6件
あなたの回答
tips
プレビュー