在这里使用用户输入和函数计算数组的总和和平均值
初学C代码在这里,我想弄清楚我的代码究竟出了什么问题。我使用两个函数来计算用户输入的数组的总和和平均值。数组的大小由用户决定。我尝试查找示例,但没有找到许多有用的提示。更可能的是,我只是不理解我做错了什么。任何人都可以请给我一些建设性的批评和指导。谢谢!在这里使用用户输入和函数计算数组的总和和平均值
#include<stdio.h>
/*function declarations*/
int addNumbers(int number[]);
float avgNumbers(int sum, int n);
int main(){
int i, n, number[100], sum, result;
float average;
printf("How many numbers do you want to enter?\n");
scanf("%d",&n);
for (i = 0; i < n ; i++)
{
printf("Enter the numbers %d:\n", i+1);
scanf("%d",&number[i]);
}
for (i = 0; i < n ; i++)
{
sum = 0;
sum = addNumbers(&number);
average = avgNumbers(sum,n);
}
printf("Sum: %d\n",sum);
printf("Average: %f\n",average);
return 0;
}
/*function returning the sum of the numbers*/
int addNumbers(int number[])
{
int i, n, sum;
for (i = 0; i < n ; i++)
sum += number[i];
return sum;
}
/*function returning the average of the numbers*/
float avgNumbers(int sum, int n)
{
average = sum/n
return average;
}
调用addNumbers()和avgNumbers()时不需要for循环。你也发送地址代替价值的方法。用此代码替换您的代码。
sum = 0;
sum = addNumbers(number);
average = avgNumbers(sum,n);
如果您认为这是您的问题的解决方案。请注册。 – kunwar97
你的,因为你的主要功能已经在循环不需要循环您addNumber(int number[])
但你需要传递的元素数量的数组作为参数传递给addNumbers(int number[], int n)
这样。并且您每次都在for
循环中分配sum = 0
。在avgNumbers(int sum, int n)
中,您需要声明average
并将0赋值给它。
你的代码应该是这样的。
#include<stdio.h>
/*function declarations*/
int addNumbers (int number[], int n);
float avgNumbers (int sum, int n);
int main(){
int i, n, number[100], sum, result;
float average;
printf ("How many numbers do you want to enter?\n");
scanf ("%d", &n);
for (i = 0; i < n; i++){
printf ("Enter the numbers %d:\n", i + 1);
scanf ("%d", &number[i]);
}
sum = 0;
sum = addNumbers(number, n);
average = avgNumbers(sum, n);
printf ("Sum: %d\n", sum);
printf ("Average: %f\n", average);
return 0;
}
/*function returning the sum of the numbers*/
int addNumbers (int number[], int n){
int i, sum=0;
for (i = 0; i < n; i++)
sum += number[i];
return sum;
}
/*function returning the average of the numbers*/
float avgNumbers (int sum, int n){
float average = 0;
average = sum/n;
return average;
}
首先,您在计算平均值时使用返回类型float,但参数为int。在这种情况下,当你除以n时,只有整数部分被存储,因此你得到的平均值是不正确的。在实际执行分割之前,你必须改变你的价值。类型转换是非常必要的,否则可能会产生不正确的结果。
接下来的事情就是你DONOT需要循环在主函数
#include<stdio.h>
/*function declarations*/
int addNumbers (int number[], int n);
float avgNumbers (int sum, int n);
int main(){
int i, n, number[100], sum, result;
float average;
printf ("How many numbers do you want to enter?\n");
scanf ("%d", &n);
for (i = 0; i < n; i++){
printf ("Enter the numbers %d:\n", i + 1);
scanf ("%d", &number[i]);
}
sum = 0;
sum = addNumbers(number, n);
average = avgNumbers(sum, n);
printf ("Sum: %d\n", sum);
printf ("Average: %f\n", average);
return 0;
}
/*function returning the sum of the numbers*/
int addNumbers (int number[], int n){
int i, sum=0;
for (i = 0; i < n; i++)
sum += number[i];
return sum;
}
/*function returning the average of the numbers*/
float avgNumbers (int sum, int n){
float average = 0;
average = (float)sum/n;
return average;
}
谢谢!这里的每个人都让我更容易理解。现在我可以看到我做错了什么。 – Tina
的问题很可能是,当双方的争论'sum'和'N'是'int's,avgNumbers确实整数除法,四舍五入。你必须将参数中的任何一个转换为'float',即'(float)sum/n',而不是使用'double'作为平均值,因为并非所有的int范围都被float所覆盖。 –
而且,你不会将'n'作为参数传递给'addNumbers'。您遇到一些编译错误 - 需要将错误添加到问题中 –
请阅读[mcve]页面 –