2016-09-28 1953 views
3

絕對的初學者程序員,想知道您是否可以幫助我理解一些結果和術語。我試圖遵循程序邏輯以及它如何計算出某些值。以下案例是嘗試理解這些概念的示例。理解雙精度和整數

#include <stdio.h> 
void main() 
{ 
    int inum = 11; 
    double dnum = 2.56; 

    double dec_result; 
    int int_result; 

    dec_result = inum/4 + (3.0 * inum)/5; 
    printf("value in dec_result is %.2f\n", dec_result); 

    dec_result = (double) inum/4 + (3 * inum)/5; 
    printf("value in dec_result is %.2f\n", dec_result); 

    int_result = (int) dnum * 10 + 1; 
    printf("value in int_result is %d\n", int_result); 

    int_result = (int) (dnum * 10 + 1); 
    printf("value in int_result is %d\n", int_result); 

} 

我知道結果,因爲我通過Visual Basic運行它。我正在努力遵循的是它如何實現它。

我的工作方式:
inumdnum我相信是「爲價值觀的名字」,並可能互換使用說x或y。與int_resultdec_result相同。

首先dec_result是8.60

dec_result = inum/4 + (3.0 * inum)/5; 
     11 (an integer)/4 + (3.0 * 11)/5 
     11 (an integer)/4 + (33.0)/5 

然後我有點失落...... 2.75 + 6.6?

不知何故,由於inum是一個整數,如果寫成分數,值將被截斷。但隨着括號內的餘數先乘以後它變成小數位數?

它按佔位符指定的小數位顯示,並由數據類型double指定。

二dec_result是8.75

dec_result = (double) inum/4 + (3 * inum)/5; 
     = as double is a cast operator you change inum from int to double, so therefore: 

     = (double) inum/4 + (33)/5; 
Then = inum/4 becomes 2.75 + 33/5 

爲什麼五分之三十三位變成6? 它按佔位符指定的小數位顯示,並由數據類型double指定。

int_result = (int) dnum * 10 + 1; 
     = cast operator alters dnum a double to integer so 2.56 becomes 2 

     = 2 * 10 + 1 
     = 20 + 1 
     = 21 

應該是一個整數作爲支架之前,指定的,並且還%d佔位符裝置,以提供該值作爲數沒有小數點。

int_result = (int) (dnum * 10 + 1); 

我得到: =(int)的(2.56×10 + 1) =(int)的(25.6 + 1) =(INT)(26.6) = 26

,因爲該值應該是括號前面指定的整數,也是佔位符意味着提供值作爲沒有小數點的數字。

我的邏輯正確嗎?

回答

3

只有在兩個操作數都是整數(整數/整數,整數+整數等)的情況下,C編譯器纔會進行整數算術運算,否則將執行浮點運算(雙精度/整數,雙精度+整數等)

第一結果:

11 (an integer)/4 + (33.0)/5 

第一部分(11/4)被計算同的整數運算,所以答案是2 第二部分(33.0/5)計算與浮點運算,所以答案是6.6,總和是8。6

第二結果:

(double) inum/4 + (33)/5; 

「(雙)INUM/4」 是使用浮點運算來計算,所以答案是2.75。 「5分之33」是使用整數運算來計算,所以答案是6,和總和爲8.75

在下面:

int_result = (int) dnum * 10 + 1; 

可變dnum首先被澆鑄到一個整數,所以整數算術用於:2 * 10 + 1 == 21

最後:

int_result = (int) (dnum * 10 + 1); 

在這種情況下, 「dnum * 10 + 1」 被首先計算,這是使用浮動p完成oint運算:2.56 * 10 + 1 = 26.6。然後拋出 - (int) - 截去,以給出26.

2

當給算術運算符提供了兩個整數參數時,結果是一個 2.75`。但是,當您將整數與浮點結合使用時,首先將整數轉換爲浮點,然後返回浮點結果。

結果:

dec_result = inum/4 + (3.0 * inum)/5; 
      = 11 /4 + (3.0 * 11) /5 
      = 11 /4 + (3.0 * 11.0)/5 
      =  2 + 33.0 /5 
      =  2 +   6.6 
      =   8.6 
+0

謝謝兩位,我真的很努力理解的邏輯,但認爲我想起來了! – Newtoprogram