在【C語言】生成3的乘方表一題中需要調(diào)用冪函數(shù)計算3的乘方,并輸出結果。
如果是:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
printf("pow(3,%d) = %d\n", i, pow(3, i));
}
return 0;
}
輸入:
3
輸出(錯誤):
pow(3,0) = 0
pow(3,1) = 0
pow(3,2) = 0
pow(3,3) = 0
若改為:
#include <stdio.h>
#include <math.h>
int main()
{
int n, y;
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
y = pow(3, i);
printf("pow(3,%d) = %d\n", i, y);
}
return 0;
}
輸入:
3
輸出(正確):
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
原因:
比較一下兩種寫法,可以發(fā)現(xiàn)當在輸出前先計算pow(3,i)的值,然后再把它轉換成int型的值,最后再用%d輸出,結果正確。這是因為printf()在輸出時不會進行類型轉換,而pow()的返回值是一個double型的值。根據(jù)double和int的儲存原理差距,導致printf()輸出的int值出現(xiàn)錯誤。
因此,要想得到正確的結果,我們可以將double型的值進行強制類型轉換:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
printf("pow(3,%d) = %d\n", i, (int)pow(3, i));
}
return 0;
}
C 強制類型轉換:
強制類型轉換是把變量從一種類型轉換為另一種數(shù)據(jù)類型。例如,如果您想存儲一個 long 類型的值到一個簡單的整型中,您需要把 long 類型強制轉換為 int 類型。您可以使用強制類型轉換運算符來把值顯式地從一種類型轉換為另一種類型,如下所示:
(type_name) expression