我创建了两个if语句放入链接列表中,并检查有多少个数字高于平均值,有多少个数字低于平均值。当我运行程序以理解时,if语句仅计算一个数字。另外,在程序运行时,仅调用一个if语句,而不是两个都调用。也许我忽略了什么?
double CalAverage (NewNumber *start){
int res;
double average = 0;
double total = 0;
int n = 1;
int x = 1;
int y = 1;
/*if (res != 1){
fprintf(stderr, "Something bad happened in CalAverage()\n");
return add;
}*/
while (start->next){
average += start->newNum;
start = start->next;
++n;
}
average += start->newNum;
total = average/n;
if(total < start->newNum){
++x;
printf("Numbers greater than average: %d\n",x);
}else if(total > start->newNum){
++y;
printf("Numbers less than average: %d\n", y);
}
printf("The average is: %lf\n",total);
return total;
return x;
return y;
}
最佳答案
首先,通过在while循环中重写指针,您将丢失指向列表开头的指针。在开始遍历之前,请将其复制到一旁。
第二,将if语句放入另一个循环中(重新分配列表的开头之后)以计算低于/高于平均值。
double CalAverage (NewNumber *start){
double average = 0;
double sum = 0;
int n = 0;
int x = 0;
int y = 0;
NewNumber *temp = start;
while (temp){
sum += temp->newNum;
temp = temp->next;
++n;
}
average = sum / n;
temp = start;
while (temp){
if(average < temp->newNum){
++x;
}else if(average > temp->newNum){
++y;
}
temp = temp->next;
}
printf("The average is: %lf\n",average);
printf("Numbers greater than average: %d\n",x);
printf("Numbers less than average: %d\n", y);
return average;
}
关于c - “CalAverage”函数中的if语句存在问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39431408/