2016-04-02 8 views
1

私の課題の1つでは、x^2、x^4、xの立方根(xは0〜100)の値を取得するはずです。これまでのところ、私はこの。 (5つの数字とテスト)C - 数値の立方根を見つける

#include <stdio.h> 
#include <math.h> 

int powers(int n) 
{ 
    return (n < 0) || (powers(n-1) && printf("%d\t%d\t%d\t\t%d\n", n, n*n, n*n*n*n, cbrt(n))); 
} 

int main(void) 
{ 
    printf("number\tx^2\tx^4\t\tx^(1/3)\n"); 
    powers(5); 

    return 0; 
} 

MY OUTPUT

number x^2 x^4  x^(1/3) 
0   0  0   0 
1   1  1   0 
2   4  16   -108170613 
3   9  81   1225932534 
4   16  256  -1522700739 
5   25  625  -1124154156 

だから、私の広場とそれがあるが、私は立方根で動作するように取得傾けるほど単純で働いているquatric。私が別にキューブのルートを実行すると、それは動作します。 printf("Cube root of 125 is %f\n, cbrt(125));は、Cube root of 125 is 5.0000である。

なぜ私の機能ではうまくいかないのですか? Cプログラミングの初心者ですので親切にしてください。 コンパイラ:ボーランドC++およびIDE:C-無料5.0)問題はcbrtが受け入れることで、cbrt(n)が自動的に渡す前にfloat/doublenを変換することを意味しますfloatまたはdouble値を返します

+4

'' double'を返しcbrt': '% f'、 '%g'、または'%e'です。このような印刷形式や引数の種類の不一致については、警告を有効にしてください。 –

+0

@ColonelThirtyTwoどのヘッダーを使用しますか? –

+0

@MOehm Ohmygod。出来た。 –

答えて

2

それを関数に渡します。この関数はfloat/doubleを返しますが、あなたは、あなたが直接その値は、それが実際にfloat/doubleであってもintとして解釈される%dを指定printfにそれを渡している、バックintへの変換を強制的にどこにでも保存されていません。

単純なキャストで十分でしょう:(int)cbrt(n)、または%fまたは%g指定子を使用して、実際のタイプとして印刷できます。

また、同じ変換動作につながる一時変数に格納し

:あなたは浮動小数点形式のいずれかで結果を印刷する必要がありますので、

int v = cbrt(n); 
printf("%d\n", v); 
+0

まあまあ、 'printf("%f \ n "、cbrt(n))'%f'は浮動小数点を取るので、トリックをしますか? –

+1

@ImtiazRaqib:それはもう少し複雑です: 'printf'は可変的な関数であり、そのような関数の引数は「昇格」されています。 'char'と' short'は 'int'に昇格し、' float'は 'double'に昇格します。これは、 'float'と' double'の両方に '%f'と'%g'を使用できるということです。警告を有効にして、間違ったフォーマットについてコンパイラに伝えさせてください。 –

+0

@MOehmそれはたくさんの意味があります。私のコンパイラでは、彼らは 'int intを倍増させる'という言葉を続けていましたが、その意味を理解できませんでした。ありがとうございました。 –

関連する問題