c中的新手和整数问题

时间:2013-06-27 11:47:31

标签: c

#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 个答案:

答案 0 :(得分:5)

int类型是一个整数,它包含可用于计数的值(1,2,3 ......)。它不会处理小数点以外的任何内容。

如果我要将一个超过小数的值赋值给int,小数点右边的所有数字都会被截断:

int v = 3.14159

会为3留下v的值,因为整数不能存储.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;

然后您使用%.1f中的printf作为@BalogPal建议。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

整数除法就是这样定义的。它只剩下300/500的剩余部分,并留下0。

答案 3 :(得分:-1)

因为当a小于b时,a和b的整数除法是0,你知道。你看到C的行为与Python不同!