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

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

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

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

Q&A

解決済

2回答

902閲覧

コンパイルしようとするとエラー表示が出てしまう

kaguya85

総合スコア3

C

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

0グッド

0クリップ

投稿2020/08/30 05:23

f0=0, f1=1のときに2 以上の整数nに対してfn=fn-1+fn-2で数列fiを定義して、引数が非負の整数nのときにfnを返す関数を作りたいのですが、コンパイルするとエラーが出てしまいます。
何が間違っているのでしょうか。

c

1 2#include <stdio.h> 3int main(void) 4{ 5 int fn(int n){if(n==0)return 0; 6elseif(n==1)return 1;elsereturnfn(n-1)+fn(n-2); 7} 8} 9

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

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

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

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

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

pepperleaf

2020/08/30 05:28

本当にこのコード? たとえば "elseif" と "else" と "if"の間にスペースがありません。その他、同様の箇所、多数。
hidezzz

2020/08/30 05:29

コンパイルするとどのようなエラーメッセージが出ますか?
kaguya85

2020/08/30 05:34

>>pepperleafさん すみません。コード間違えておりました。空白等追加しましたらエラーメッセージは表示されなくなりました。
kaguya85

2020/08/30 05:35

>>hidezzzさん すみません。こちらの不手際でコード自体を間違えており、訂正したらエラーメッセージは表示されなくなりました。
thkana

2020/08/30 07:17

行きがかり上、訂正したコードも記載しておいては? (質問は編集できますので追記すればよろしいかと) 十分な回答がついていると思ったので私は回答しませんでしたが、どのように訂正したのか気になります。
guest

回答2

0

ベストアンサー

何が間違っているのでしょうか。

  • C言語では、関数の中で別の関数を定義することはできません。あなたのコードでは、mainの中でfnを定義しようとしていますね。
  • C言語では、elseifは独立した予約語です。elseif(やelsifelif)のような予約語はありません。間に空白を入れてください。
  • 同様に、elsereturnも独立した予約語です。間に空白を入れてください。
  • returnと返り値(今回はfn(n - 1) + fn(n - 2))の間にも空白を入れてください。

mainからfnを呼び出すようにしたコードの例を示します。

C

1#include <stdio.h> 2 3int fn(int n) 4{ 5 if (n == 0) 6 return 0; 7 if (n == 1) 8 return 1; 9 return fn(n - 1) + fn(n - 2); 10} 11 12int main(void) 13{ 14 printf("%d\n", fn(10)); 15 return 0; 16}

投稿2020/08/30 05:41

Daregada

総合スコア11990

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

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

kaguya85

2020/08/30 05:56

とても分かりやすく書いて下さりありがとうございます。 特にある関数の中で別の関数を定義できないということは大変勉強になりました。 今回の助言を参考にし、c言語を勉強していきたいと思います。
guest

0

どこが悪いか多すぎて分かりませんが、とりあえず動くようにしてみましたので参考までに。

C

1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3 4int fn(int n) { 5 if (n == 0) { 6 return 0; 7 } else if (n == 1) { 8 return 1; 9 } else { 10 return fn(n - 1) + fn(n - 2); 11 } 12} 13 14int main(void) { 15 printf("%d", fn(10)); // 55 16 getchar(); 17 return 0; 18}

投稿2020/08/30 05:33

mjk

総合スコア303

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

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

kaguya85

2020/08/30 05:46

すみません。 参考コードにおいてgetchar()は何の役割をしているのですか?
mjk

2020/08/30 05:56

すみません消し忘れです。残ったままでも影響はありません。 printf()などの出力の際に出力したものをWin10のコマンドプロンプトの画面で確認する為です。 質問されるということはお使いの環境では無関係かと思いますので無視してください。
kaguya85

2020/08/30 06:00

了解しました。 今回はコメントありがとうございました。 教えていただいたことを参考にして勉強しなおそうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問