2016-04-04 17 views
0

関数を使用すると、数学方程式から同じ結果を得ることに問題があります。ここに私のコードです。私は、コードを実行するとCは関数の中でintをdoubleに変換します

#include <stdio.h> 
int main() 
{ 
    int a=5, b=2; 
    double c; 
    c = (double) a/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

int Divide(int value) 
{ 
    return value =(double) value/2; 
} 

は私が取得:

2.500000 
2.000000 

私は両方のために2.50000を取得しようとしています。私は機能を変更しようとしました

double Divide(double value) 

運がありません。私は新しいCと一般的にコーディングすると私は立ち往生した。私を助けることができる人に感謝します。

+0

return value =(double)value/2; '浮動小数点p oint除算を行い、結果は '2.5'となり、その値を' int'に切り詰めて '2'を返します。 'value ='部分を削除すると、意図した動作が得られます。 – owacoder

+0

ありがとうございます。あなたが書いたことは私にとって意味があります。この機能を働かせることができました – jojonac

答えて

1

2つの問題があります。関数の戻り値の型と最初に関係するものがあり、intを返すと常に浮動小数点値が切り捨てられます。

2番目の問題は、除算の結果を返さず、割り当て後に変数valueの値を返し、valueが切り捨てられた値を返すためです。代入をそれに戻します。return (double) value/2;

+0

ありがとうございました。私はあなたの助けを必要としたようにこの機能を働かせることができました。 – jojonac

0

キャストa次のように代入を戻して、戻り値の型を変更します。

#include <stdio.h> 
int main() { 
    int a=5, b=2; 
    double c; 
    c = ((double) a)/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

double Divide(int value) { 
    return value = ((double)value)/2; 
} 
+2

キャストは除算よりも[演算子の優先順位](http://en.cppreference.com/w/c/language/operator_precedence)が高いため、余分なカッコは問題になりません。 –

1
int Divide(int value) 

double Divide(double value) 

への変更あなたの値は整数型なので、それはあなたがこれを行うことができます2.0

+0

ありがとうございます。コーディングでは、文字通り何百万という方法で猫を肌に触れるようです。私はあなたの応答と他のいくつかのもので期待どおりに機能するように機能を得ることができました。 – jojonac

0

なりfloatに整数値を割り当てているので:

#include <stdio.h> 

double divide(double value) { 
    return value = value/2.0; 
} 

int main() 
{ 
    double a=5.0, c; 
    int b=2; 

    c = (double) a/b; 
    printf("%f\n", c); 

    c = divide(a); 
    printf("%f\n", c); 

    return 0; 
} 
関連する問題