在【C語言】生成3的乘方表一題中需要調(diào)用冪函數(shù)計(jì)算3的乘方良蒸,并輸出結(jié)果遥巴。
如果是:
#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
輸出(錯(cuò)誤):
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)當(dāng)在輸出前先計(jì)算pow(3,i)的值悴务,然后再把它轉(zhuǎn)換成int型的值睹限,最后再用%d輸出,結(jié)果正確讯檐。這是因?yàn)閜rintf()在輸出時(shí)不會(huì)進(jìn)行類型轉(zhuǎn)換邦泄,而pow()的返回值是一個(gè)double型的值。根據(jù)double和int的儲(chǔ)存原理差距裂垦,導(dǎo)致printf()輸出的int值出現(xiàn)錯(cuò)誤顺囊。
因此,要想得到正確的結(jié)果蕉拢,我們可以將double型的值進(jìn)行強(qiáng)制類型轉(zhuǎn)換:
#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 強(qiáng)制類型轉(zhuǎn)換:
強(qiáng)制類型轉(zhuǎn)換是把變量從一種類型轉(zhuǎn)換為另一種數(shù)據(jù)類型特碳。例如诚亚,如果您想存儲(chǔ)一個(gè) long 類型的值到一個(gè)簡單的整型中,您需要把 long 類型強(qiáng)制轉(zhuǎn)換為 int 類型午乓。您可以使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符來把值顯式地從一種類型轉(zhuǎn)換為另一種類型站宗,如下所示:
(type_name) expression