2016-06-09 12 views
-5

Ich bin in der Lage, das Programm auszuführen, aber es tut nicht, was es soll. Es fragt weiter nach der Nummer. (In C)Warum fragt das Programm nach der Eingabe in C?

Algorithmus ich zu folgen versuche ist -
Schritt 1: Setzen Sie den Wert Vermutung 1.
Schritt 2: Wenn | Vermutung^2 - x | < ε, fahren Sie mit Schritt 4 fort. (Ε = Epsilon)
Schritt 3: Setzen Sie den Wert von rate auf (x/guess + guess)/2 und kehren Sie zu Schritt 2 zurück. Schritt 4: Die Schätzung ist die Annäherung von die Quadratwurzel.

This is the output I am getting

#include <stdio.h> 

float sqr_root(float n); 
float absolute_value(float n) ; 

int main(void) 
{ 
    float n ; 
    printf("Enter a positive number :"); 
    scanf("%f" , &n); 

    printf("Square root of %f is %f \n" , n , sqr_root(n)); 

} 


float absolute_value(float n) 
{ 
    if (n < 0) 
    { 
     n = -n ; 
    } 
    return (n) ; 
} 

float sqr_root(float n) 
{ 
    const float epsilon = 0.00001 ; 
    float guess = 1.0 ; 

    float value = absolute_value((guess * guess) - n) ; 

    while (value > epsilon) 
    { 
     guess = ((n/guess) + guess)/2 ; 
    } 


    return guess ; 
} 
+0

Zeigen Sie uns, was Sie sehen. –

+2

'while (Wert> epsilon)' Schleife tritt niemals ein/endet, weil 'Wert, epsilon' den Wert nicht ändert. Vielleicht neu berechnen' Wert = asolute_value ((raten * raten) - n); 'in Schleife? – chux

+0

Dies ist die Ausgabe http://i.stack.imgur.com/d4CsI.png –

Antwort

1

while (value > epsilon) Schleife tritt nie/endet, weil value, epsilon nicht Wert ändern.

Fügen Sie value = asolute_value((guess * guess) - n) ; hinzu, um die korrigierte Schreibweise zu wiederholen.

while (value > epsilon) 
{ 
    guess = ((n/guess) + guess)/2 ; 
    value = absolute_value((guess * guess) - n) ; 
} 
Verwandte Themen