gpt4 book ai didi

c - 为什么它不能正确计算成员的平均值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:59 27 4
gpt4 key购买 nike

这是代码:

#include <stdio.h>

int group, regular_group, regular_members, shutdown, special_group,
special_members;
float average_special, average_regular;
main()
{
do
{
printf("How many members are in the group?\n");
scanf("%d", &group);

if (group >= 15)
{
regular_group = regular_group + 1;
regular_members = regular_members + group;
printf("Do you want to add another group? yes = 1, no = 0 \n");
scanf("%d", &shutdown);
}

else
{
special_group = special_group + 1;
special_members = special_members + group;
printf("Do you want to add another group? yes = 1, no = 0 \n");
scanf("%d", &shutdown);
}
}

while (shutdown == 1);

average_regular = regular_members / regular_group;
average_special = special_members / special_group;

printf("\nTotal regular members:\n%d\n", regular_members);
printf("\nTotal special members:\n%d\n", special_members);

printf("\nAverage regular members in a group:\n%f\n", average_regular);
printf("\nAverage special members in a group:\n%f\n", average_special);
fflush(stdin);
getchar();

}

如果一个组大于 15,则自动成为常规组,但如果小于 15,则自动成为特殊组。我需要每个类别的内存总数。成员总数工作正常。但我还需要一组这两个类别的平均大小。但平均值始终为 0,000000。但是我找不到错误..请帮助我

非常感谢!

最佳答案

这是因为

  1. 您将两个整数相除 regular_members/regular_group,相除后得到一个整数。如果分子将变得小于分母,那么您将得到 0 作为结果。
  2. 您没有初始化变量 regular_groupregular_membersspecial_groupspecial_membersaverage_specialaverage_regular

而不是使用

average_regular = regular_members/regular_group;
average_special = special_members/special_group;

试试这个

average_regular = (float)regular_members/regular_group;
average_special = (float)special_members/special_group;

同时删除 fflush(stdin)。它将调用未定义的行为。
声明你的变量

int group, regular_group, regular_members, shutdown, special_group,
special_members;
float average_special, average_regular;

main 函数中

main()
{
int group, regular_group, regular_members, shutdown, special_group, special_members;
float average_special, average_regular;
....
....
}

并且不要忘记初始化变量:regular_groupregular_membersspecial_groupspecial_members average_specialaverage_regular0


这是你的工作代码(经过一些修改)

#include <stdio.h>

int main()
{
int group, regular_group = 0, regular_members = 0, shutdown, special_group = 0,
special_members = 0;
float average_special = 0, average_regular = 0;

do
{
printf("How many members are in the group?\n");
scanf("%d", &group);

if (group >= 15)
{
regular_group = regular_group + 1;
regular_members = regular_members + group;
printf("Do you want to add another group? yes = 1, no = 0 \n");
scanf("%d", &shutdown);
}

else
{
special_group = special_group + 1;
special_members = special_members + group;
printf("Do you want to add another group? yes = 1, no = 0 \n");
scanf("%d", &shutdown);
}
} while (shutdown != 0);

if(regular_group != 0) //to stop division by zero
average_regular = (float)regular_members / regular_group;
if(special_group != 0) //to stop division by zero
average_special = (float)special_members / special_group;

printf("\nTotal regular members:\n%d\n", regular_members);
printf("\nTotal special members:\n%d\n", special_members);

printf("\nAverage regular members in a group:\n%f\n", average_regular);
printf("\nAverage special members in a group:\n%f\n", average_special);

return 0;

}

关于c - 为什么它不能正确计算成员的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18833388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com