2013-06-27 45 views
2
#include <stdio.h> 

int main(int argc, const char * argv[]) 
{ 
    int x =10, y =20, b = 500; 
    int z = x*y; 
    int f = z/b; 

    // insert code here... 
    printf("x is:%d, y is:%d, b is %d\n",x,y,b); 
    printf("x times y is: %d\n",z); 
    printf("z divided by b is: %d\n",f); 
    return 0; 
} 

打印出f = 0。爲什麼?c中的新手和整數問題

+3

因爲它*是* 0. – Telastyn

+0

Int表示整數。整數點後面是否有一些數字? –

回答

5

int類型是一個整數,其保持值,你可以用於計數(1,2,3 ...)。它不處理小數點後的任何事物。

如果我有什麼過去的十進制值賦給int,都在小數點右邊的數字將被截斷:

int v = 3.14159 

會離開我的價值3v,因爲整數不能存儲.14159。

您的200/500值是0.4,當它被分配到int f時,它被截斷爲0。

爲了存儲小數值,您必須使用floatdouble類型。請注意,這些類型並不像您想象的那樣精確,所以如果您指定4.57的值,您可能會得到類似於4.569999999的實際值....

在您的代碼中,您希望將f的類型更改爲float,並且您可能想要從整數中進行強制轉換以浮動要分割的項目,以確保它們保留任何浮點信息。

所以,你的

int f = z/b; 

線將成爲

float f = (float)z/(float)b; 

,然後你會使用%.1fprintf作爲@BalogPal建議。

+0

謝謝,非常感謝。 – Arcanium

+1

請注意,如果'z'和'b'已經浮動,則不需要投射它們。 – Uooo

+0

@ user2527918 np,很高興我能幫上忙 – paul

-1

因爲當a小於b時,a和b的整數除法是0,你知道。你看到C的行爲與Python不同!

+0

所以我應該使用int以外的東西嗎? – Arcanium

0

整數除法是這樣定義的。它只剩下300/500的餘數,給你留下0。

+0

那麼如何讓它顯示0.4? – Arcanium

+0

使用%.1f格式並傳遞300.0/500.0作爲參數 –

+0

我如何在上面使用它? – Arcanium

2

我不是C語言的「流利」,但我認爲你應該使用float而不是int。 整數除以整數將返回一個整數。

還要注意的是,應使用%f,而不是%d中顯示浮子prinf

您的代碼應該是:

// 
// main.c 
// cmd4 
// 
// Created by Kevin Rudd on 27/06/13. 
// Copyright (c) 2013 Charlie Brown. All rights reserved. 
// 

#include <stdio.h> 

int main(int argc, const char * argv[]) 
{ 
    float x =10.0, y =20.0, b = 500.0; 
    float z = x*y; 
    float f = z/b; 

    // insert code here... 
    printf("x is:%f, y is:%f, b is %f\n",x,y,b); 
    printf("x times y is: %f\n",z); 
    printf("z divided by b is: %f\n",f); 
    return 0; 
} 
+0

我試過,但它只是返回0.00000 – Arcanium

+0

感謝您的「整數整數將返回一個整數」,現在有道理。但是float返回0。00000 – Arcanium

+0

我已經試過漂浮,雙倍和很多髒話 – Arcanium