配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
よわい

配列

#1

投稿記事 by よわい » 10年前

フィボナッチ数列を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");
}

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 配列

#2

投稿記事 by Dixq (管理人) » 10年前

フィボナッチ数列を手書きでかけば書けますか?
どういうアルゴリズムで計算されているか分かりますか?
「___」はとりあえず気にせず1から書いた方が分かりやすいと思いますから、
分かる部分からまず書いてみましょう。

以下のようなプログラムなら書けますか?
これが書ければ答えは出来た様なものです。

1項を表示
2項を表示
1項+2項を表示
2項+3項を表示
...
これを10項まで繰り返して表示

Aozora0630
記事: 85
登録日時: 10年前
住所: 日本
連絡を取る:

Re: 配列

#3

投稿記事 by Aozora0630 » 10年前

課題の丸投げっぽい?
又、コードはコードタグで囲ってください。

フィボナッチ数列が何か分かっていますか?
フィボナッチ数列は、前の数+その前の数 の数列です。
例えば、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で毎回同じ値を出すアルゴリズムを書くなんて非効率ですから。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列

#4

投稿記事 by みけCAT » 10年前

まず、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");
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列

#5

投稿記事 by みけCAT » 10年前

Aozora0630 さんが書きました:上のDixqさんの方法(手書き)もいいと思います。
もし、プログラミングの練習でもないのに全てのPCで毎回同じ値を出すアルゴリズムを書くなんて非効率ですから。
OEISをコピペしてもいいかもしれません。

【訂正】計算するという条件があるので、コピペではダメでしょう。
最後に編集したユーザー みけCAT on 2015年7月11日(土) 12:32 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列

#6

投稿記事 by みけCAT » 10年前

よわい さんが書きました:フィボナッチ数列を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");
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

よわい

Re: 配列

#7

投稿記事 by よわい » 10年前

みなさま、たくさんのヒントありがとうございます!!
わざわざ時間をかけて返信をくださって、、、、
圧倒的感謝です><

閉鎖

“C言語何でも質問掲示板” へ戻る