【问题标题】:Calculate the average score计算平均分
【发布时间】:2014-12-14 09:56:44
【问题描述】:

为什么我计算的平均分是错误的?

我有一个函数:

int student_average_scope() {
  char name[50];
  int group;
  int exam;
  int average = 0;
  int digit = 0;
  int counter_digits = 0;

  for (int i = 0; i < 4; i++) {
    sscanf(student_list[i], "%d %[^0-9] %d", &group, name, &exam);

    while (exam > 0) {
      digit = exam % 10;
      average += digit;
      counter_digits++;
      exam = exam / 10;
    }

    printf("%.1f\n", (double)average / counter_digits);
  }

  return 0;
}

student_list[i] = "4273 Константинопольский А. А. 4333 знзнз" 的平均值等于 3.9,但正确答案是 3.2!如果我做简单的函数,计算平均分数给我正确的输出(3.2)。我哪里出错了?

int student_average_scope() {
    int exam = "4333";

    int average = 0;
    int digit = 0;
    int counter_digits = 0;

    while (exam > 0) {
        digit = exam % 10;
        average += digit;
        counter_digits++;
        exam = exam / 10;
    }

    printf ("%.1f\n", (double) average / counter_digits);

    return 0;
}

【问题讨论】:

  • “它不起作用”不是一个很好的解释。包括更多细节,比如你得到的输出是什么
  • @CoolGuy 哦,对不起,谢谢。我会修改我的答案
  • 第一个给了我正确的答案?
  • 当我做13/4(average/counter_digits)时得到3.3

标签: c average


【解决方案1】:

问题是当您在for 循环中从一条记录移动到下一条记录时,您未能将变量重置为零。你应该做的是:

  for (int i = 0; i < 4; i++) {
    average = 0;
    counter_digits = 0;
    ...

【讨论】:

  • 哦!是的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 2013-11-05
  • 2017-12-03
  • 1970-01-01
相关资源
最近更新 更多