題目要求
有以下程序
int fun1(double a){return a*=a;}
int fun2(double x,double y)
{double a=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main()
{double w;w=fun2(1.1,2.0);……}
程序執行後變量w中的值。
思路分析
此題考覈的是數值類型的定義與強制轉換。本題在進行調用函數 fun2()時,又對函數 fun1()進行了調 用,由於函數 fun1()定義爲整型,所以第一次調用 fun1()時返回的值爲 1,然後再將 1 賦值給 a,此時由於a 爲 double 型,則系統自動類型轉換,將 1 轉換成了 1.000000 賦值給了變量 a,以此類推,得 b 的值爲 4.000000, 然後通過“return(int)(a+b);”將 a+b 的值強制轉換爲 int 型 5 返回給主函數,此時又由 w 的類型爲 double, 所以返回的整型值 5 又被轉換爲 double 型。故輸出結果爲 5.000000。
很奇怪的一點,本人算了很多,驗證了多次,最後結果都爲5.000000,但是網上和題目上的答案全部都是5.0,所以這題僅供參考,所得數據結果沒有什麼實際意義,猜想應該是最後輸出printf("%f"),不可能是%d,輸出%d將毫無意義
參考代碼
#include<stdio.h>
int fun1(double a)
{
return a*=a;
}
int fun2(double x,double y)
{
double a=0,b=0;
a=fun1(x);
b=fun1(y);
return(int)(a+b);
}
int main()
{
double w;
w=fun2(1.1,2.0);
printf("%lf\n",w);
}