ページ 1 / 1
配列
Posted: 2015年7月07日(火) 16:27
by よわい
フィボナッチ数列を30番目まで計算して配列fibに格納した後、キーボードから何番目かを指定して表示するプログラムを作成してください。
要素を表示する処理は何回も繰り返しおこなえるようにして、キーボードから1~30以外の数値が入力されれば終了する。
_____の部分がわからないです><;;;
よろしくお願いします
#include<stdio.h>
int main()
{
int n,fib[23] = {1,1};
for(___________){
______________
}
printf("数の入力:");
scanf("%d",&n);
while(_______){
printf(___________);
printf("数の入力:");
scanf("%d",&n);
}
printf("終了\n");
}
Re: 配列
Posted: 2015年7月07日(火) 18:03
by Dixq (管理人)
フィボナッチ数列を手書きでかけば書けますか?
どういうアルゴリズムで計算されているか分かりますか?
「___」はとりあえず気にせず1から書いた方が分かりやすいと思いますから、
分かる部分からまず書いてみましょう。
以下のようなプログラムなら書けますか?
これが書ければ答えは出来た様なものです。
1項を表示
2項を表示
1項+2項を表示
2項+3項を表示
...
これを10項まで繰り返して表示
Re: 配列
Posted: 2015年7月07日(火) 18:08
by Aozora0630
課題の丸投げっぽい?
又、コードはコードタグで囲ってください。
フィボナッチ数列が何か分かっていますか?
フィボナッチ数列は、前の数+その前の数 の数列です。
例えば、1,1,2,3,5・・・
つまり、ループ内で配列の要素に1つ前と2つ前の要素を足したものを入れればいいのです。
霊:iがループカウンタ
コード:
配列[i] = 配列[i-1]+配列[i-2];
の様な感じです。
また、while文の中と前に
コード:
printf("数の入力:");
scanf("%d",&n);
を書くのではなく、必ず一回実行してから条件によってループするdo~while文を使ったらどうでしょうか?
コード:
do{
ループ処理
}while(条件)
霊:ループ処理を行う→条件があっていたら→ループ処理を行う...
そして、条件式は入力された値のnが1~30でない場合です。
頑張ってください。
追記:
上のDixqさんの方法(手書き)もいいと思います。
もし、プログラミングの練習でもないのに全てのPCで毎回同じ値を出すアルゴリズムを書くなんて非効率ですから。
Re: 配列
Posted: 2015年7月07日(火) 22:17
by みけCAT
まず、30番目まで計算しないと行けないのに、fibは23要素しかないので、この配列は使えないダミーですね。
例えばこのようにするといいでしょう。
コード:
#include<stdio.h>
int main()
{
int n,fib[23] = {1,1};
for(;;){
int seq[31] = {0, 1};
/* ここに計算・入出力処理を書く */
return 0;
}
printf("数の入力:");
scanf("%d",&n);
while(0){
printf("");
printf("数の入力:");
scanf("%d",&n);
}
printf("終了\n");
}
Re: 配列
Posted: 2015年7月07日(火) 22:23
by みけCAT
Aozora0630 さんが書きました:上のDixqさんの方法(手書き)もいいと思います。
もし、プログラミングの練習でもないのに全てのPCで毎回同じ値を出すアルゴリズムを書くなんて非効率ですから。
OEISをコピペしてもいいかもしれません。
【訂正】計算するという条件があるので、コピペではダメでしょう。
Re: 配列
Posted: 2015年7月10日(金) 22:21
by みけCAT
よわい さんが書きました:フィボナッチ数列を30番目まで計算して配列fibに格納した後
すいません、「配列fibに格納した後」という条件を見落としていました。
ついでに警告対策の修正も行いました。
コード:
#include<stdio.h>
int main()
{
int n,fib[23] = {1,1};
for(;;){
int fib[31] = {0, 1};
/* ここに計算・入出力処理を書く */
return 0;
}
printf("数の入力:");
scanf("%d",&n);
while(0){
printf("%d",fib[0]);
printf("数の入力:");
scanf("%d",&n);
}
printf("終了\n");
}
Re: 配列
Posted: 2015年7月12日(日) 18:13
by よわい
みなさま、たくさんのヒントありがとうございます!!
わざわざ時間をかけて返信をくださって、、、、
圧倒的感謝です><