2017-07-19 66 views
-1
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    { 
     float test1Marks, test2Marks, test3Marks, averageMarks; 
     averageMarks = (test1Marks + test2Marks + test3Marks)/3; 

     printf("Test 1 Marks:"); 
     scanf("%f", &test1Marks); 

     printf("Test 2 Marks:"); 
     scanf("%f", &test2Marks); 

     printf("Test 3 Marks:"); 
     scanf("%f", &test3Marks); 

     printf("Average Marks of tests are:%f", averageMarks); 

    } 
    return 0; 
} 

一切都好,但最終的產出給一般是錯誤的。 但是,當我給兩個變量賦值並通過scanf語法輸入第三個值時,它給出的平均值不是。這個C程序給出零均值。它有什麼錯誤?

+4

您需要在計算平均值之前將值讀入您的變量*。 –

+1

可能不會幫助未來的讀者... –

+0

對於大多數堆棧溢出用戶,這個問題可能太基本:) – MCG

回答

5

移動averageMarks=(test1Marks+test2Marks+test3Marks)/3;最後scanfprint聲明中你要打印的之前平均值後!

int main() 
{ 
    float test1Marks,test2Marks,test3Marks,averageMarks; 

    printf("Test 1 Marks:"); 
    scanf("%f",&test1Marks); 

    printf("Test 2 Marks:"); 
    scanf("%f",&test2Marks); 

    printf("Test 3 Marks:"); 
    scanf("%f",&test3Marks); 

    /* Now with determined test1Marks, test2Marks, and test3Marks 
     values we can compute their average: 
    */ 
    averageMarks=(test1Marks+test2Marks+test3Marks)/3; 

    printf("Average Marks of tests are:%f",averageMarks); 

    return 0; 
} 
+2

'test1Marks'是未初始化的,不一定是0.嘗試在初始化/賦值之前讀取'test1Marks'是UB。 – chux

+1

@chux,呃,我的錯。感謝您指出! –

+0

@AGNGazer謝謝,我明白了! –

-3

如果你只是除以「3」,你將不會得到一個浮點數作爲輸出。嘗試更改3到3.0。

+1

這不是這個代碼的問題。 –

+0

代碼中唯一的部門是FP部門,因爲分子是'浮動'。更改爲除數爲3.0不能解決OP代碼。 – chux

+0

是的,如果你用float分隔一個float,你會得到一個float作爲輸出。 – klutt

1

你需要計算平均值@John Bode 1

計算averageMarks=(test1Marks+test2Marks+test3Marks)/3;讀值前後讀值到您的變量。

在另一種語言中,此方法可能有效,但C需要進行順序評估。

+0

我明白了,謝謝! –

0

averageMarks=(test1Marks+test2Marks+test3Marks)/3;不是一個函數,它是一系列的語句做一些事情,它在它運行,然後由3將時間增加了這些變量的值,並將結果averageMarks分配。

當你在讀取值,scanf放任何值執行時,它讀取到的變量,然後打印出averageMarks,這是已經計算,並與你的第一份陳述作出的空變量前面存儲。

相關問題