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

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

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

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

Q&A

2回答

1061閲覧

C言語 関数f(x, n)

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

1グッド

0クリップ

投稿2021/07/07 07:18

編集2021/07/08 05:20

実数 x と 自然数 nを入力し、x^nを計算する関数f(x, n)を作りたいです。

#include<stdio.h> int main (void){ double x; int n; printf("x="); scanf("%lf", &x); printf("n="); scanf("%d", &n); int f(float x, int n) { if (n == 1) { return x; } if (n % 2 == 0) { int fvalue = f(x, n/2); return fvalue * fvalue; } else { int fvalue = f(x, (n-1)/2); return fvalue * fvalue * x; } } printf("x^nは,%fです。¥n",fvalue); printf("x^nは,%fです。¥n",f); }

以下の方法に従う必要があります。
f(x, 1) = x
f(x, n) (n>1) は、
nが偶数なら f(x, n/2)の2乗
nが奇数なら f(x, (n-1)/2)の2乗 * x
改善点のご指摘、改善方法を教えていただきたいです

退会済みユーザー👍を押しています

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

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

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

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

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

int32_t

2021/07/07 07:23 編集

どのようにうまくいかないのか具体的に書いてください。 例: コンパイルすると〜というエラーメッセージが出る 例: 実行して〜と〜を入力すると、〜と結果が表示されるはずが、〜と出る。
退会済みユーザー

退会済みユーザー

2021/07/07 07:24

.c: In function ‘main’: .c:27:36: error: ‘fvalue’ undeclared (first use in this function) printf("x^nは,%fです。¥n",fvalue); ^~~~~~ .c:27:36: note: each undeclared identifier is reported only once for each function it appears in このようにエラーが出ます。
BeatStar

2021/07/07 07:46

まず、『うまくいきません』ではないです。 上手くいかないっていうのは『主観』です。 うまくいかないって言ってもいろんなものがあります。 また、エラーメッセージぐらいは読みましょう。 エラーメッセージにはヒントが隠されています。
Bull

2021/07/07 08:07

関数 f() は main() の中で定義してあるようですが、それは意図的ですか? C 言語では、関数の内部で別の関数を定義することは基本的にできないです。
K_3578

2021/07/07 08:07

質問文改変して退会しおった・・・。通報しておきます
SaitoAtsushi

2021/07/07 08:13

うろおぼえなので確信はないですけども、同じ (または似た) 名前で過去に質問していた人がいませんでしたか? Teratail の RSS は質問者の ID は書いてないので記録から質問者の名前が分からないんですよね……。
BeatStar

2021/07/07 09:17

あー、やっぱり『努力なんぞしたくない。楽して儲けたい』っていう人だったか。 (だから簡単に退会する)
guest

回答2

0

ソースコードがめちゃくちゃ。基礎が明らかにできていない

一つ目。なんでmain関数の中に関数(の定義)を書いているのでしょうか

C言語にはラムダ式とかみたいなものはありません。

二つ目。なんでエラーメッセージ読まないのでしょうか

エラーメッセージは怒声でも暴言でも罵倒でもハラスメントでもなく、
『コンパイラ等からのメッセージ』です。

今の状態は『相手の話を聞かずに逆ギレする人』です。

そんな人はコミュニケーションなんて取れませんよね。

三つ目。なんで宣言していない変数が出てきているのでしょうか

メッセージを読むと、

.c: In function ‘main’: .c:27:36: error: ‘fvalue’ undeclared (first use in this function) printf("x^nは,%fです。¥n",fvalue); ^~~~~~ .c:27:36: note: each undeclared identifier is reported only once for each function it appears in [訳] ???.c ファイルの main関数にて。 ???.c の 27行目にエラーあり。 "fvalue"が宣言されていない。(使う前に宣言せよ) printf( ... ); にある "fvalue"。

つまり、『fvalueとやらが宣言されていない』のが原因。

簡単に言えば『宣言していないものを使おうとしている』。

コンパイラはそのシチュエーションから妄想してくれる……わけではないです。

宣言しないってことは存在しないのと一緒。

存在しないものを『読み込め』とか言われても無理でしょ。

つまり、『基礎がまったくできていない』。

基礎からやり直してください。

(そうしないと、丁寧な説明をしてもわからないので。足し算すら理解できない人に微積分を説明するようなものだし)

投稿2021/07/07 07:55

BeatStar

総合スコア4962

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

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

0

  • 変数はそれを宣言したブロックの終わりまでがスコープです。 ブロックの外からは見えません。 fvalue をブロックの外で参照しようとしていることから ‘fvalue’ undeclared とエラーメッセージで示されています。
  • 関数の中で関数を定義することは出来ません。 (宣言だけなら出来ます。) main の中で f を定義することは出来ません。 ただし、一部の処理系 (gcc など) では許容するように拡張されていることもあります。
  • この場合は printf で表示すべきなのは変数 fvalue の値ではなく関数 f を呼出した結果 (返却値) です。

投稿2021/07/07 07:52

SaitoAtsushi

総合スコア5684

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問