映月读书网 > C语言解惑 > 8.2 与库函数的参数类型不匹配 >

8.2 与库函数的参数类型不匹配

【例8.2】这个程序是求30°的正弦值,分析是否正确。


#include <stdio.h>
#include <math.h>
int main 
( 
)
{
      float x
;
      x = sin
( 30.0 
);
      printf 
( "x=%f\n"
, x 
);
      return 0
;
}
  

如果程序包含的头文件是对的,下一步就要正确调用它。在使用库函数时,一定要弄清楚怎样才是正确的使用,怎样才能达到预期的目的。

从库函数手册中可知,函数sin的原型在math.h中,函数声明为


double sin 
( double arg 
)
  

由此可见,该程序调用方式不对,arg是弧度,返回值是double。


//
正确的程序
 #include <stdio.h>
 #include <math.h>
 int main 
( 
)
 {
     double x
;
     x = sin
( 30.0/180.0  * 3.14159 
);
     printf 
( "x=%.3f\n"
, x 
);
     return 0
;
 }
  

运行结果为:


x = 0.500
  

【例8.3】编写一个调用库函数求10除以3的余数的程序。


#include <stdio.h>
int main 
( 
)
{
    int x
, y
;
    float z
; 
    x = 10
;y = 3
;
    z=fmod
(x
, y
);
    printf 
( "z=%d
\n"
, z 
);
    return 0
;
}
  

从库函数手册中可知,函数的定义为:


double fmod 
( double x
, double y 
);
  

函数fmod()的原型在math.h中。它是求x/y的余数,返回求出的余数值。

该程序没有包含它的头文件,而且调用方式也不对。尽管给出的两个数是整数,但函数要求的是双精度数。正确的程序应为:


#include <stdio.h>
#include <math.h>
int main 
( 
)
{
     double x
, y
, z
;
     x = 10.0
;
     y = 3.0
;
     z=fmod
(x
, y
);  
     printf 
( "z=%2.1f\n"
, z 
);
     return 0
;
}
  

程序输出结果为:


z=1.0
  

下面是更简单的程序。


#include <stdio.h>
#include <math.h>
int main 
( 
)
{
    printf 
( "%2.1f\n"
, fmod
(10.0
, 3.0
) 
);
    return 0
;
}
  

结论:大部分库函数都很简单,人们都能正确地使用它们。常常发生问题的原因是对库函数里定义的数据类型没有掌握,或者在引用时,自己另外对它们进行了定义,而这些定义又与原定义不符。