数学运算?

时间:2016-02-05 04:46:55

标签: c math decimal

这是我第一次编程,我迷路了。我正在尝试进行这种数学运算,但它一直出错,我不确定问题出在哪里。另外,我无法弄清楚如何将所有数字输出分成两个小数位。请帮忙。这是我到目前为止所做的。

{{1}}

2 个答案:

答案 0 :(得分:1)

如果要使用2位小数,则需要使用double或float变量。您也忘了提及csis变量的类型(FILE*)。 fprintf()将您错过的FILE*句柄作为第一个参数。要在输出中使用两位小数,只需使用%.02f中的printf()/fprint()

另请参阅printf()fprintf()

的参考资料
#include <cstdlib>
#include <cstdio>

int main(void) {
  double distance, time, speed, mts_per_mile, sec_per_mile, mts, mps;
  FILE* csis = fopen("csis.txt", "w");

  distance = 425.5;
  time = 7.5;
  speed = distance / time;
  mts_per_mile = 1600;
  sec_per_mile = 3600;
  mts = distance * mts_per_mile;
  mps = mts / sec_per_mile;

  printf("The car going %.02f miles in %.02f hours is going at a speed of %.02f mph.\n", distance, time, speed);
  fprintf(csis, "The car going %.02f miles in %.02f hours is going at a speed of %.02f mph.\n", distance, time, speed);
  printf("The car has traveled %.02f meters total, at a rate of %.02f meters per second.", mts, mps);
  fprintf(csis, "The car has traveled %.02f meters total, at a rate of %.02f meters per second.", mts, mps);
  fclose(csis);
  return 0;
}

将输出:

  

汽车在7.50小时内行驶425.50英里的速度为56.73   英里。这辆车总共行驶了680800.00米,速度为189.11   每秒米。

答案 1 :(得分:1)

所有变量都是int类型,只存储整数值。

425.5将转换为int 425(向零舍入)。同样,7.5也会转换为7

潜水两个int s(4257)也会产生一个整数值,向零舍入,因此产生60

如果您的编译器具有int类型且不能支持超过32767的值(C标准实际上不需要超过该值),则计算60*1600*3600将溢出。其结果称为未定义的行为,一种可能的症状是&#34;错误输出&#34;。

如果您想要非整数实数值,请创建floatdouble类型的变量。并更改格式说明符,将其从%d输出到%f。要输出到2位小数,请使用格式%.02f