2013-03-05 92 views
2

我编写了一个使用大部分math.h库函数来创建一种科学计算器的程序。但是,我没有得到所需的输出。在输出结束时,我总是得到0.000000。请帮我确定我的错误,谢谢。使用函数的C中的科学计算器

#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)); 
} 

回答

4

您已经声明这四个变量为整数:

int x,y,n,answer; 

n是你真正当作一个整数唯一的一个。声明xyanswerfloat

int n; 
float x, y, answer; 
2

如果启用-Wall和-Wconversion,我看到下面的警告,如果你解决,将解决你的问题:

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. 
1

你宣布为x和其他变量为int。尝试声明为float而不是

3
#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; 
}