2015-09-27 147 views
0

我非常难倒这个问题。我的总距离计算不正确。我不确定这是因为我错误地设置了我的循环,还是因为我做了其他错误。每次我平均得到-0。我在平均计算之前打印printf(" total distance = %lf , dailyflights = %d\n", totaldistance, dailyflights);,以确定它是不正确计算的totaldistance,而不是平均值。平均不嵌套for循环计算

所需的输出的一个例子:

How many days has your dragon been practicing? 
3 

How many flights were completed in day #1? 
2 
How long was flight #1? 
10.00 
How long was flight #2? 
15.00 
Day #1: The average distance is 12.500. 

How many flights were completed in day #2? 
3 
How long was flight #1? 
9.50 
How long was flight #2? 
12.00 
How long was flight #3? 
13.25 
Day #2: The average distance is 11.583. 

How many flights were completed in day #3? 
3 
How long was flight #1? 
10.00 
How long was flight #2? 
12.50 
How long was flight #3? 
15.00 
Day #3: The average distance is 12.500. 

我的代码:

//pre-processor directives 
#include <stdio.h> 

//Main function 
int main() 
{ 
    int days = 0, totaldays, flight_num, dailyflights; 
    double distance, cur_distance = 0, totaldistance = 0, average_dist; 

    printf("How many days has your dragon been practicing?\n"); 
    scanf("%d", &totaldays); 

    for(days=1; days <= totaldays; days++) { 
     printf("How many flights were completed in day #%d?\n", days); 
     scanf("%d", &dailyflights); 

     for (flight_num=1; flight_num <= dailyflights; flight_num++) { 
      printf("How long was flight #%d?\n", flight_num); 
      scanf("%ld", &distance); 
      totaldistance = distance + totaldistance; 
     } 
     printf(" total distance = %lf , dailyflights = %d\n", totaldistance, dailyflights); /*I printed this line to determine what isn't correct and I determined that totaldistance is not calculating correctly*/ 
     average_dist = totaldistance/(float) dailyflights; 
     printf("Day #%d: The average distance is %.3f.\n", days, average_dist); 

    } 

    return 0; 
} 
+1

您需要在每个内部循环开始之前将'totaldistance'设置为零。 –

回答

2

你必须使用%lf,而不是%lddouble值与scanfdistance

您应该使用%f而不是%lf打印的double值与printf因为float值自动展开,也没有需要区分它们。

此外,在内循环之前,您需要设置totaldistance = 0.0;,以便您累计每天的航班与每一天的航班分开,以获得平均距离计算的正确性。

+0

这些都是好的一点,但只是问题的一部分。该代码还需要在内循环开始之前将'totaldistance'设置为'0.0'。 –

+0

谢谢!这解决了所有数字的平均计算。我仍然收到十进制数字的错误。该程序将10 + 12.5 + 15解释为10 + 12 + 5 + 15,因此在任何有小数的航班的日子里,我都会得到错误的平均值。结合乔纳森的建议将totaldistance设置为0解决了问题 – tonomon

+0

@JonathanLeffler谢谢!这解决了我最后的问题。你能解释为什么重新设置totaldistance为0是需要的,因为我真的被难住了。 – tonomon