2016-10-02 1 views
-1

Ich bekomme keine richtige Antwort mit dem folgenden Code unten. Kann jemand diesen Code debuggen? Wenn ich Radius = 5 eingegeben habe, lautet die Antwort 500,000000, während die ursprüngliche Antwort 523,80952 lauten sollte. Kann mir bitte jemand erklären, was hier nicht stimmt?Schreiben Sie ein Programm, das den Benutzer auf den Radius einer Kugel hinweist, und druckt sein Volumen

Volumen Sphere Formel = 4/3 (π xr^3)

#include <stdio.h> 

int main() 


    { 
    float radius = 0; 
    float volume; 
    float pie = 0; 

    printf("Enter radius"); 
    scanf("%f", &radius); 

    pie = 22/7; 

    volume = (4*pie*radius*radius*radius)/3; 
    printf("the volume is %f", volume); 

    return 0; 
    } 
+0

"die ursprüngliche Antwort sollte 523.80952 sein". Nein, es sollte eher "523.598776" (bis 6 Dezimalstellen) sein. 22/7 ist eine schlechte Annäherung an π. Ich würde vorschlagen, einen genaueren Wert zu verwenden. –

Antwort

1

sagen können Sie auch pie = 3.14 ; schreiben statt pie = 22/7 ;

Und denken Sie daran, dass: (a) für arithmetische Operationen zwischen zwei ganzen Zahlen gibt immer eine ganze Zahl . (b) Arithmetische Operation zwischen zwei reellen Zahlen gibt immer eine reelle Zahl zurück. (c) Die arithmetische Operation zwischen einer Ganzzahl und einer reellen Zahl gibt eine reelle Zahl zurück.

So wird pie = 22/7 500.000000 anstelle von 523.80952 zurückgeben. daher können Sie auch pie = 22.0/7 oder pie = 22/7.0 oder pie = 22.0/7.0 schreiben. Diese drei geben die ursprüngliche Antwort zurück.

+1

Danke, habe nicht daran gedacht! –

2

Das Problem in der Leitung ist

pie = 22/7; 

hier sowohl die Operanden der Division ganzzahlige Konstanten, Dies ist eine ganzzahlige Division und das Ergebnis wird float zugewiesen, was nicht das ist, was Sie wollen. Sie müssen Kraft eine Gleitkomma-Division durch

pie = ((float)22)/7; 
+0

Wenn beide Operanden Integer sind, bekomme ich immer einen ganzzahligen Wert? –

+0

Neugierig, warum rufen Sie '22' ein _integer Literal _ vs vielleicht _integer Konstante_? – chux

+1

@chux Nun, ich glaube nicht, [Integer Literal] (https://en.wikipedia.org/wiki/Integer_Literal) ist inkorrekt zu verwenden, aber nach dem Standard ist es Integer-Konstante. Jedenfalls bearbeitet. –

Verwandte Themen