为什么这道题不能用while

B2054 求平均年龄

mezeli @ 2024-08-24 18:28:25

#include <bits/stdc++.h>
using namespace std;

int n;
double sum;

int main()
{
    cin >> n;
    while(n --)
    {
        int age;
        cin >> age;
        sum += age;
    }
    printf("%.2lf", sum / n);

    return 0; 
}

by cly312 @ 2024-08-24 18:29:16

@mezeli n减完了除了鬼啊


by Qinglan2011 @ 2024-08-24 18:31:52

@mezeli 减完了你除个什么?


by mezeli @ 2024-08-24 18:39:56

@Qinglan2011 忘了


by ptxy2352010111 @ 2024-08-24 18:41:31

#include <bits/stdc++.h>
using namespace std;

int n,s;
double sum;

int main()
{
    cin >> n;
   s=n;
    while(n --)
    {
        int age;
        cin >> age;
        sum += age;
    }
    printf("%.2lf", sum / s);

    return 0; 
}

也可以用while,不过要另存一个值。


by luogu_00 @ 2024-08-30 08:19:44

代码

#include <bits/stdc++.h>
using namespace std;

int n;
double sum;

int main()
{
  cin >> n;
  while(n --)
  {
    int age;
    cin >> age;
    sum += age;
  }
  printf("%.2lf", sum / n);

  return 0;
}

代码分析

10~15行的while循环执行完后,由于n != 0则表达式值为true,那么就会要求计算sum / 0,而除以0在C++中是不允许的。
正确代码应该先用一个常量存储n的值(因为常量不会被更改),循环结束后除以该常量。

正确代码

#include <bits/stdc++.h>
using namespace std;

int n;
double sum;

int main()
{
  cin >> n;
  const int NUM = n;
  while(n --)
  {
    int age;
    cin >> age;
    sum += age;
  }
  printf("%.2lf", sum / NUM);

  return 0;
}

|