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...)。它不处理小数点后的任何内容。

如果我要为 an 分配一个小数点后的值,则小数点int右侧的所有数字都将被截断:

int v = 3.14159

会给我一个3for的值v,因为整数不能存储 .14159。

您的 200/500 值为 0.4,当它分配给int f.

为了存储十进制值,您必须使用floatordouble类型。请注意,这些类型并不像您想象的那么精确,因此如果您分配 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 语言中并不“流利”,但我认为您应该使用 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;
}
于 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 回答