2017-07-19 69 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,这是已经计算,并与你的第一份陈述作出的空变量前面存储。

相关问题