A Scientific Calculator in C using functions

38,135

Solution 1

You have declared these four variables as integers:

int x,y,n,answer;

but n is the only one that you actually treat as an integer. Declare x, y and answer as float:

int n;
float x, y, answer;

Solution 2

#include <stdio.h>
#include <math.h>
#include<conio.h>
#define PI 3.14159265

float sine(float x)
{
return (sin (x*PI/180));
}
float cosine(float x)
 {
return (cos (x*PI/180));
}
float tangent(float x)
{
return (tan(x));
}
float sineh(float x)
{
return (sinh(x));
}
float cosineh(float x)
{
return (sinh(x));
}
 float tangenth(float x)
 {
return (sinh(x));
}
 float logten(float x)
{
return (log10(x));
}
 float squareroot(float x)
 {
return (sqrt(x));
}
float exponent(float x)
   {
  return(exp(x));
}
float power(float x, float y)
{
return (pow(x,y));
}
 int main(void)
  {
  int n;
    float x,y,answer;
   printf("What do you want to do?\n");
  printf("1.sin 2.cos 3. tan 4. sinh 5.cosh 6.tanh 7.1og10 8. square root. 

  9.exponent   10.power.");
    scanf ("%d",&n);
    if (n<9 && n>0)
    {
    printf("\n What is x? ");
    scanf("%f",&x);
    switch (n)
    {
        case 1: answer = sine(x);       break;
        case 2: answer = cosine(x);     break;
        case 3: answer = tangent(x);    break;
        case 4: answer = sineh(x);      break;
        case 5: answer = cosineh(x);    break;
        case 6: answer = tangenth(x);   break;
        case 7: answer = logten(x);     break;
        case 8: answer = squareroot(x); break;
        case 9: answer = exponent(x);   break;
    }
}
if (n==10)
{
    printf("What is x and y?\n");
    scanf("%f%f",&x,&y);
    answer = power(x,y);
}
if (n>0 && n<11)
    printf("%f",answer);
else
    printf("Wrong input.\n");
    getch();
return 0;
}

Solution 3

If I enable -Wall and -Wconversion, I see the following warnings, which, if you solved, would solve your problem:

foo.c:23:14: warning: format specifies type 'float *' but the argument has type 'int *' [-Wformat]
                scanf("%f",&x);
                       ~~  ^~
                       %d
foo.c:26:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 1: answer = sine(x);       break;
                                       ~ ^~~~~~~
foo.c:27:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 2: answer = cosine(x);     break;
                                       ~ ^~~~~~~~~
foo.c:28:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 3: answer = tangent(x);    break;
                                       ~ ^~~~~~~~~~
foo.c:29:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 4: answer = sineh(x);      break;
                                       ~ ^~~~~~~~
foo.c:30:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 5: answer = cosineh(x);    break;
                                       ~ ^~~~~~~~~~
foo.c:31:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 6: answer = tangenth(x);   break;
                                       ~ ^~~~~~~~~~~
foo.c:32:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 7: answer = logten(x);     break;
                                       ~ ^~~~~~~~~
foo.c:33:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 8: answer = squareroot(x); break;
                                       ~ ^~~~~~~~~~~~~
foo.c:34:21: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                        case 9: answer = exponent(x);   break;
                                       ~ ^~~~~~~~~~~
foo.c:40:16: warning: format specifies type 'float *' but the argument has type 'int *' [-Wformat]
                scanf("%f%f",&x,&y);
                       ~~    ^~
                       %d
foo.c:40:19: warning: format specifies type 'float *' but the argument has type 'int *' [-Wformat]
                scanf("%f%f",&x,&y);
                         ~~     ^~
                         %d
foo.c:41:12: warning: implicit conversion turns floating-point number into integer: 'float' to 'int' [-Wconversion]
                answer = power(x,y);
                       ~ ^~~~~~~~~~
foo.c:44:15: warning: format specifies type 'double' but the argument has type 'int' [-Wformat]
                printf("%f",answer);
                        ~~  ^~~~~~
                        %d
foo.c:51:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (sin (x*PI/180));
        ~~~~~~  ^~~~~~~~~~~~~~
foo.c:55:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (cos (x*PI/180));
        ~~~~~~  ^~~~~~~~~~~~~~
foo.c:59:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (tan(x*PI/180));
        ~~~~~~  ^~~~~~~~~~~~~
foo.c:63:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (sinh(x));
        ~~~~~~  ^~~~~~~
foo.c:67:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (sinh(x));
        ~~~~~~  ^~~~~~~
foo.c:71:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (sinh(x));
        ~~~~~~  ^~~~~~~
foo.c:75:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (log10(x));
        ~~~~~~  ^~~~~~~~
foo.c:79:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (sqrt(x));
        ~~~~~~  ^~~~~~~
foo.c:83:9: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return(exp(x));
        ~~~~~~ ^~~~~~
foo.c:87:10: warning: implicit conversion loses floating-point precision: 'double' to 'float' [-Wconversion]
        return (pow(x,y));
        ~~~~~~  ^~~~~~~~
24 warnings generated.

Solution 4

You declared x and other variables as int. Try declaring as float instead

Share:
38,135
Shail
Author by

Shail

I a N00b ;')) SOreadytohelp

Updated on July 05, 2022

Comments

  • Shail
    Shail almost 2 years

    I wrote a program which used most of the math.h library functions for creating a sort of scientific calculator. However, I am not getting the desired output. I always get 0.000000 in the end of the output. Please help me identify my mistake, Thank you.

    #include <stdio.h>
    #include <math.h>
    #define PI 3.14159265
    float sine(float  x);
    float cosine(float x);
    float tangent(float x);
    float sineh(float x);
    float cosineh(float x);
    float tangenth(float x);
    float logten(float x);
    float squareroot(float x);
    float exponent(float x);
    float power(float x,float y);
    int main()
    {
        int x,y,n,answer;
        printf("What do you want to do?\n");
        printf("1.sin 2.cos 3. tan 4. sinh 5.cosh 6.tanh 7.1og10 8. square root. 9.exponent 10.power.");
        scanf ("%d",&n);
        if (n<9 && n>0)
        {
            printf("\n What is x? ");
            scanf("%f",&x);
            switch (n)
            {
                case 1: answer = sine(x);       break;
                case 2: answer = cosine(x);     break;
                case 3: answer = tangent(x);    break;
                case 4: answer = sineh(x);      break;
                case 5: answer = cosineh(x);    break;
                case 6: answer = tangenth(x);   break;
                case 7: answer = logten(x);     break;
                case 8: answer = squareroot(x); break;
                case 9: answer = exponent(x);   break;
            }
        }
        if (n==10)
        {
            printf("What is x and y?\n");
            scanf("%f%f",&x,&y);
            answer = power(x,y);
        }
        if (n>0 && n<11)
            printf("%f",answer);
        else
            printf("Wrong input.\n");
        return 0;
    }
    float sine(float x)
    {
        return (sin (x*PI/180));
    }
    float cosine(float x)
    {
        return (cos (x*PI/180));
    }
    float tangent(float x)
    {
        return (tan(x*PI/180));
    }
    float sineh(float x)
    {
        return (sinh(x));
    }
    float cosineh(float x)
    {
        return (sinh(x));
    }
    float tangenth(float x)
    {
        return (sinh(x));
    }
    float logten(float x)
    {
        return (log10(x));
    }
    float squareroot(float x)
    {
        return (sqrt(x));
    }
    float exponent(float x)
    {
        return(exp(x));
    }
    float power(float x, float y)
    {
        return (pow(x,y));
    }