2014-09-26 63 views
-1

我正在做C练习从C引起加上涉及使用浮动,我不能得到的结果也是一个浮动。我得到它在输入罚款阅读(据我所知),但问题必须在公式行。谁能告诉我我做错了什么?浮点数学在c得到随机数

#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); 

回答

4
result = (inp1 - inp2)/(inp1 * inp2); /* formula */ 

printf("enter two values\n"); 
scanf("%f %f", &inp1, &inp2); 

那么,怎么样把scanf调用之前result = ...;赋值语句?

+0

谢谢,工作!是否因为计算机在输入输入之前计算结果? – 2014-09-26 18:59:10

+2

@Zak。计算机程序通常从上到下运行,而不是根据预定义的公式计算值 – 2014-09-26 19:12:14

+0

@LưuVĩnhPhúc:并非必然(XSLT不),但对于C函数内部来说肯定是正确的。 (当在'main'之前放置函数时,*函数*当然不会运行“first”。) – usr2564301 2014-09-26 20:52:51

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是一种命令式语言,这意味着你必须明确地列出说明它遵循,包括那些用于任何数学计算的。

+0

“C是命令式语言”......与最近的http://stackoverflow.com/q/26027585/2564301中的错误相同。我想知道这两个海报是否都在做相同的课程,或者有类似的编程历史。什么说明性的语言可能会出现? – usr2564301 2014-09-28 10:27:02

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; 
}