[英]I wrote a C program to calculate the standard deviation of an array. My code is giving the wrong answer. What am I doing wrong?
注释掉的函数是我的函数,另一个是我从网上挑的。 没有错误。 代码只要求输入 5 个数字,然后要求操作 4 个操作之一,这里 (s) 是标准差,然后运行该函数。
根据我的故障排除,它没有读取数组的元素。 它不是添加、删除或对它们做任何事情。 当要求在该函数中打印其他内容时,它只是打印出一个零。
我是一个新手,正如我正在解决的问题类型所暗示的那样,但如果有人能在这里帮助我,那就太好了。
谢谢!
#include<stdio.h>
#include<math.h>
int arr[5];
int curnum, i; i = 0;
char op;
int incount; incount = 5.0;
int main();
int main(){
for (i=0; i<incount; i++)
{
printf("Enter a number : ");
scanf("%d", &arr[i]);
}
printf("What would you like to calculate? Average(a), Max(M), Min(m), Std. Dev.(s) : ");
scanf(" %c", &op);
float average(int arr[]);
float std(int arr[]);
switch (op){
case 'a':
printf("The average is %f \n", average(arr)); break;
case 'M':
printf("The Max number is %d \n", max(arr)); break;
case 'm':
printf("The Min num is %d \n", min(arr)) ; break;
case 's':
printf("the Standard Deviation is %f \n", std(arr)); break;
default:
printf("Invalid function \n"); break;
}
return 0;
}
float average(int arr[]){
float netsum;
netsum = 0;
for (i=0; i<incount; i++)
{
netsum = netsum + arr[i];
}
return (netsum/5);
}
int max(int arr[]){
int maxnum;
maxnum = arr[0];
for (i=0; i<incount; i++)
{
if (arr[i] > maxnum) maxnum = arr[i];
}
return maxnum;
}
int min(int arr[]){
int minnum;
minnum = arr[0];
for (i=0; i<incount; i++)
{
if (arr[i] < minnum) minnum = arr[i];
}
return minnum;
}
// float std(int arr[]){
// float currsq, sqsum, stdeviation; currsq = 0; sqsum = 0;
// for (i=0; i<incount; i++){
// currsq = arr[i] - average(arr);
// currsq = currsq*currsq;
// sqsum = sqsum + currsq;
// }
// stdeviation = pow (sqsum/incount, 0.5);
// return stdeviation;
// }
float std(int arr[]) {
float sum = 0.0, mean, SD = 0.0;
int i;
for (i = 0; i < 10; ++i) {
sum += arr[i];
}
mean = sum / 10;
for (i = 0; i < 5; ++i)
SD += pow(arr[i] - mean, 2);
return sqrt(SD / 10);
}
您正在尝试处理函数std()
10 个元素,而只有 5 个。
您应该使用incount
而不是幻数。
float std(int arr[]) {
float sum = 0.0, mean, SD = 0.0;
int i;
for (i = 0; i < incount; ++i) {
sum += arr[i];
}
mean = sum / incount;
for (i = 0; i < incount; ++i)
SD += pow(arr[i] - mean, 2);
return sqrt(SD / incount);
}
函数average
也使用了幻数,但没有造成危害,因为使用了5
。
还要注意的是
int incount; incount = 5.0;
不是设置 gloval 变量初始值的正确方法。 它应该是
int incount = 5.0;
同样的事情适用于全局i
。
对不起,绝对是菜鸟错误。 正如我在测试中所说,它没有从数组中获取任何值。 那是因为我没有在 for 循环中使用的函数内部创建变量 (i)。
我刚加
int i;
在函数内部,瞧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.