用C语言编写程序,用for循环查找用户定义的平均值

用C语言编写程序,用for循环查找用户定义的平均值,c,C,平均呼叫未输出正确的平均值。有人能帮我找出我做错了什么吗 #include <stdio.h> void main() { int num=0; int counter=0; int sum=0; int i=0; float avg=0; printf("Numver of values to be entered: \n"); scanf("%d", &counter); for (num=1;num&

平均呼叫未输出正确的平均值。有人能帮我找出我做错了什么吗

#include <stdio.h>
void main()
{

    int num=0;
    int counter=0;
    int sum=0;
    int i=0;
    float avg=0;

    printf("Numver of values to be entered: \n");
    scanf("%d", &counter);

    for (num=1;num<=counter;num++)
    {
        printf("Please enter value %d :",num);
        scanf("%d",&i);
        sum +=i;
    }
    avg=sum/num;//This portion isnt working and I cant figure out why
    printf("The average is : %f\n",avg);
}
#包括
void main()
{
int num=0;
int计数器=0;
整数和=0;
int i=0;
浮动平均值=0;
printf(“要输入的数值的数值:\n”);
scanf(“%d”和计数器);

for(num=1;numsum和num都是整数,因此将提供整数答案,即使您随后将其分配给浮点


将sum更改为float或double,它允许使用十进制值。

当您计算
sum/num
时,两个参数的类型都是
int
,因此执行整数除法,这意味着任何小数部分都会被截断。这发生在将结果分配给
avg
之前

您需要将至少一个参数强制转换为
float
,以执行浮点除法:

avg = (float)sum/num;

sum/num
是一个整数除法。请使用目标的类型。我更喜欢避免强制转换,因为它们会在代码更新时意外截断信息

avg = sum;
avg /= num;

// alternative
avg = 1.0*sum/num;
没有什么理由在这里使用
float
作为商数,建议使用
double

// float avg=0;
double avg=0;
按1关闭,使用
计数器


迭代到
一些示例输入和输出如何?请给出输入、预期和实际输出的示例。什么是“用户定义的平均值”?要么是平均值,要么不是。你不想做
sum/counter
吗,因为
num
将在循环过程中递增超过
counter
。这并不能解决其平均值不正确的问题。此外,如果我在for循环中进行更改,语句请输入值:读数为0、1、2等等。人们不会谈论l类似的。@HenryGibbs这个答案并不建议“请输入值0”,而是建议“请输入值1”。可能使用
num=0;num@HenryGibbs这个答案确实解决了原始代码如何计算平均值的问题。循环后,您的代码是什么样子的?输入、看到和期望的值是什么?我得到的输出。/workspace$gcc-o AvgFor AvgFor.c/workspace$。/AvgFor要输入的值的数量:2请输入value 1:10请输入值2:10平均值为:6.000000我期望的是10+10=20。然后是20/2=10@HenryGibbs6将跟随您的原始代码。
avg=sum;avg/=counter;
结果为10。
avg = sum;
avg /=counter;
// for (num=1;num<=counter;num++)
for (num=0; num<counter; num++)
  printf("Please enter value %d :",num+1);