讀古今文學網 > 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
;
}
  

結論:大部分庫函數都很簡單,人們都能正確地使用它們。常常發生問題的原因是對庫函數里定義的數據類型沒有掌握,或者在引用時,自己另外對它們進行了定義,而這些定義又與原定義不符。