Search code examples
cfunctionimperative-programming

C program to find roots error


I am writing a function in C with the below specifications:

float find_root(float a, float b, float c, float p, float q);

find_root takes the coefficients a,b,c of a quadratic equation and an interval (p, q). It will return the root of this equation in the given interval.

For example: find_root(1, -8, 15, 2, 4) should produce a root "close to" 3.0

I have written the below code, and I don't understand why it doesn't work:

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

main()
{
    printf("Hello World");
}

float find_root(float a, float b, float c, float p, float q) {

    float d,root1,root2;  
    d = b * b - 4 * a * c;
    root1 = ( -b + sqrt(d)) / (2* a);
    root2 = ( -b - sqrt(d)) / (2* a);

    if (root1<=q || root1>=p)
    {
        return root1;
    }
    return root2;
}

Please let me know what the error is.


Solution

  • Your program doesn't work, because, you never called find_root() from your main().

    find_root() is not suppossed to run all-by-itself. Your program statrs execution from main(). You need to call your sub-function from main() in order to make them execute.

    Change your main to have a call to find_root(), something like below.

    int main()                              //put proper signature
    {
    
    float anser = 0;
    
    answer = find_root(1, -8, 15, 2, 4);   //taken from the question
    printf("The anser is %f\n", answer);        //end with a \n, stdout is line buffered
    
    return 0;                                 //return some value, good practice
    
    }
    

    Then, compile the program like

    gcc -o output yourfilename.c -lm
    

    Apart from this, for the logical issue(s) in find_root() function, please follow the way suggested by Mr. @paxdiablo.