这是我第一次编程,我迷路了。我正在尝试进行这种数学运算,但它一直出错,我不确定问题出在哪里。另外,我无法弄清楚如何将所有数字输出分成两个小数位。请帮忙。这是我到目前为止所做的。
{{1}}
答案 0 :(得分:1)
如果要使用2位小数,则需要使用double或float变量。您也忘了提及csis
变量的类型(FILE*
)。
fprintf()
将您错过的FILE*
句柄作为第一个参数。要在输出中使用两位小数,只需使用%.02f
中的printf()/fprint()
。
#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(425
到7
)也会产生一个整数值,向零舍入,因此产生60
。
如果您的编译器具有int
类型且不能支持超过32767
的值(C标准实际上不需要超过该值),则计算60*1600*3600
将溢出。其结果称为未定义的行为,一种可能的症状是&#34;错误输出&#34;。
如果您想要非整数实数值,请创建float
或double
类型的变量。并更改格式说明符,将其从%d
输出到%f
。要输出到2位小数,请使用格式%.02f
。