質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

4回答

1007閲覧

フィボナッチ数列をC言語で表したいのですが、うまくいきません。

sho888

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/10/18 22:45

前提

フィボナッチ数列とは,漸化式 an=an-1+an-2 で定められる数列であり,たとえば次のような数列を指す.

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

2, 5, 7, 12, 19, 31, 50, 81, ...

キーボードから3つの整数 p, q, n を読み取って,初項 a1=p, 第2項 a2=q で定められるフィボナッチ数列の,第 n 項を出力するプログラムを作成せよ. p,q,n はいずれも正の整数であると仮定してよい(エラーチェックをする必要はない).

なお,この課題では 3つの引数 p, q, n を取る関数 int fibcompute() を作成して,用いること.

この課題を解くには、どうしたらよいですか?
コードは自分なりに作りました。
改善案ください。お願いいたします。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

発生している問題・エラーメッセージ

エラーメッセージ

#include <stdio.h>

int a1,a2;

int fibocompute(int p,int q, int n);

int main(void){
int d,p,q,n;
scanf("%d%d%d", &p, &q, &n);

d= fibocompute(p,q,n);

printf("The answer is: %d",d);

return 0;

}
int fibocompute(int p,int q, int n){

a1=p; a2=q; int i; for(i=0;i<n;i++){ a2=i+a1; a1=i; i=a1;

}

return 0;

}

C言語

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2022/10/18 22:56

コード全体を「```」だけの行で囲んでください。現状では読みにくいです。 現状のコードで、どういう動作をすると期待していて、実際はどういう動作をするのでしょうか。
PondVillege

2022/10/18 23:08

ループの中でiはフィボナッチ数の演算に不要で,漸化式のindexでしかないので書き直してみましょう i番目時点のフィボナッチ数を入れるa3を作るのがいいかもしれませんね
y_waiwai

2022/10/18 23:16

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答4

0

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int p = 2, q = 5, n = 6; 6 while (--n > 0) q += p, p = q - p; 7 printf("%d\n", p); 8}

fibocompute の参考になりますか?

投稿2022/10/19 12:42

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fibocompute()の戻り値を変数dに入れてますが、fibocompute関数の最後でreturn 0となっており、
変数dには0しか入らない点と、フィボナッチ数列の計算部分を直せば解けると思います。
参考:フィボナッチ数の計算

投稿2022/10/19 00:48

編集2022/10/19 01:00
ALOHAMS

総合スコア195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

課題ならまんまな記述は避けますが、

c

1#include <stdio.h> 2int main(void) { 3 int p=2, q=5, n=6; 4 5 int j=0; 6 int a[]={p,q}; 7 for(int i=0; i<n-1; i++, j^=1) a[j] += a[j^1]; 8 printf("The answer is: %d\n", a[j]); 9 return 0; 10}

plain

1The answer is: 31

とか出ます。

投稿2022/10/19 11:31

jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

n>2 条件判定を増やす

int a1,a2; int fibocompute(int p,int q, int n); int fibocompute(int p,int q, int n){ a1=p; a2=q; int i; int temp=0;//tempは一時変数 //a1=2,a2=5 を例にとる for(i=0;i<n-2;i++){ temp=a1+a2;//temp=2+5=7 a1=a2;//a1=5 a2=temp;//a2=7 } return a2; //n=3 の場合、3 番目の項 2、5、7、7 が結果です。 } int main(void){ int d,p,q,n; scanf("%d%d%d", &p, &q, &n); if(n==1){ printf("The answer is: %d",p);//answer is 2 return 0; } if(n==2){ printf("The answer is: %d",q);//answer is 5 return 0; } if(n>2){ d= fibocompute(p,q,n); printf("The answer is: %d",d); return 0; } return 0; }

投稿2022/10/19 02:35

編集2022/10/20 01:36
fenyun

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/10/19 11:06

n が 1 と 2 の場合に fibocompute() を用いていないのは条件に反するように思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問