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 です。なぜですか?

4

4 に答える 4

5

タイプは整数で、intカウントに使用できる値 (1、2、3...) を保持します。小数点以下は扱いません。

小数点以下の値を に代入すると、小数点以下のintすべての数値が切り捨てられます。

int v = 3.14159

整数は .14159 を格納できないため、3forの値が残ります。v

200/500 の値は 0.4 で、に割り当てられると 0 に切り捨てられint fます。

10 進数値を格納するには、floatまたはdouble型を使用する必要があります。これらの型はあなたが思っているほど正確ではないことに注意してください。したがって、4.57 の値を割り当てると、実際の値は 4.569999999... のようになる可能性があります。

あなたのコードでは、 の型fを aに変更しfloatたいと思うでしょう。また、浮動小数点情報を確実に保持するために、分割する項目で整数から浮動小数点数へのキャストを実行したいと思うでしょう。

だから、あなたのライン

int f = z/b;

になるだろう

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

そして、@BalogPalが提案したよう%.1fに、あなたの中で使用します。printf

于 2013-06-27T12:19:27.073 に答える
2

私は C に「堪能」ではありませんが、int の代わりに float を使用する必要があると思います。整数を整数で除算すると、整数が返されます。

prinf で float を表示するには、%d の代わりに %f を使用する必要があることにも注意してください。

コードは次のようになります。

//
//  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;
}
于 2013-06-27T12:17:06.147 に答える
0

整数除算はそのように定義されています。残りを 300/500 に落として、0 のままにします。

于 2013-06-27T11:52:02.413 に答える
-1

a が b より小さい場合、a と b の整数除算は 0 になるためです。C の動作が Python とは異なることがわかります。

于 2013-06-27T11:51:52.870 に答える