2014-09-26 54 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; 
}