実数 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
改善点のご指摘、改善方法を教えていただきたいです
どのようにうまくいかないのか具体的に書いてください。
例: コンパイルすると〜というエラーメッセージが出る
例: 実行して〜と〜を入力すると、〜と結果が表示されるはずが、〜と出る。
.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
このようにエラーが出ます。
まず、『うまくいきません』ではないです。
上手くいかないっていうのは『主観』です。
うまくいかないって言ってもいろんなものがあります。
また、エラーメッセージぐらいは読みましょう。
エラーメッセージにはヒントが隠されています。
関数 f() は main() の中で定義してあるようですが、それは意図的ですか?
C 言語では、関数の内部で別の関数を定義することは基本的にできないです。
質問文改変して退会しおった・・・。通報しておきます
うろおぼえなので確信はないですけども、同じ (または似た) 名前で過去に質問していた人がいませんでしたか? Teratail の RSS は質問者の ID は書いてないので記録から質問者の名前が分からないんですよね……。
あー、やっぱり『努力なんぞしたくない。楽して儲けたい』っていう人だったか。
(だから簡単に退会する)