【C語言】關于pow()在printf()中直接輸出遇到的問題

【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
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容