首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》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;}  

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