我正在使用C primer进行练习,其中涉及使用浮点数,我无法得到结果也是浮点数。我把它读入输入正常(据我所知)但问题必须在公式行中。谁能告诉我我做错了什么?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float inp1, inp2;
float result;
result = (inp1 - inp2) / (inp1 * inp2); /* formula */
printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);
printf("(%.3f - %.3f) / (%.3f * %.3f)\n", inp1, inp2, inp1, inp2);
printf("%f\n", result);
}
输出给出一些随机数(我不知道它叫什么),例如输入1.255和1.023我输出2656044210243861500000000000000000000.000000或类似的东西。倒数第二个printf正确显示输入。 我做错了什么?
我已经尝试过了,但我并没有真正理解投射操作员的工作方式。
result = ((float)inp1 - (float)inp2) / ((float)inp1 * (float)inp2); //formula
和
result = (float)(inp1 - inp2) / (inp1 * inp2);
答案 0 :(得分:4)
result = (inp1 - inp2) / (inp1 * inp2); /* formula */
printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);
那么,在scanf
赋值语句之前调用result = ...;
呢?
答案 1 :(得分:1)
result = (inp1 - inp2) / (inp1 * inp2); /* formula */
printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);
这不是像C这样的语言有用的方式;您没有为result
定义公式,当您阅读输入时,它会自动计算出来。相反,您首先阅读输入,然后计算值并将分配给result
:
printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);
result = (inp1 - inp2) / (inp1 * inp2); /* computation and assignment */
C是一种命令式语言,这意味着您必须明确列出其要遵循的指令,包括任何数学计算的指令。
答案 2 :(得分:1)
编程语言中数学公式的类比是函数(没有副作用)。这样,您可以在代码本身之前定义公式。例如:
#include <stdio.h>
#include <stdlib.h>
float formula(float inp1, float inp2)
{
return (inp1 - inp2) / (inp1 * inp2);
}
int main(void)
{
float inp1, inp2;
printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);
printf("(%.3f - %.3f) / (%.3f * %.3f)\n", inp1, inp2, inp1, inp2);
printf("%f\n", formula(inp1, inp2));
return 0;
}