Arrays 我写了一个C程序来计算数组的标准偏差。我的代码给出了错误的答案。我做错了什么?
被注释掉的函数是我的函数,另一个是我从互联网上选择的函数。没有错误。代码只要求5个数字,然后要求操作4个操作中的一个,这里是标准偏差,然后运行该函数 根据我排除的问题,它没有读取数组的元素。它不是添加、删除或处理它们。当要求在该函数中打印其他内容时,它只打印出一个零 我是一个新手,正如我正在解决的问题的类型所暗示的,但是如果有人能在这里帮助我,那就太好了 谢谢Arrays 我写了一个C程序来计算数组的标准偏差。我的代码给出了错误的答案。我做错了什么?,arrays,c,function,math,Arrays,C,Function,Math,被注释掉的函数是我的函数,另一个是我从互联网上选择的函数。没有错误。代码只要求5个数字,然后要求操作4个操作中的一个,这里是标准偏差,然后运行该函数 根据我排除的问题,它没有读取数组的元素。它不是添加、删除或处理它们。当要求在该函数中打印其他内容时,它只打印出一个零 我是一个新手,正如我正在解决的问题的类型所暗示的,但是如果有人能在这里帮助我,那就太好了 谢谢 #include<stdio.h> #include<math.h> int arr[5]; in
#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);
}
#包括
#包括
int-arr[5];
int curnum,i;i=0;
char op;
整数计入;incount=5.0;
int main();
int main(){
对于(i=0;i您试图处理函数中的10个元素std()
,而函数中只有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);
}
不是设置gloval变量初始值的正确方法。
应该是
int incount = 5.0;
同样的事情也适用于全局i
,很抱歉,绝对是个错误。正如我在测试中所说,它没有从数组中获取任何值。这是因为我没有在for循环中使用的函数内创建变量(i)
我刚才补充说
int i;
在函数内部,瞧。当您使用调试器运行此函数时,它首先出错的是什么?int-incount;incount=5.0;
在文件范围内似乎是语法错误。哪个编译器接受此错误?@williampersell它实际上接受“警告:数据定义没有类型或存储类”在计算SD+=pow(arr[i]-mean,2)时,是否应将arr[i]
从int转换为float
;
是否尝试检查由于编译器强制数据类型转换而导致的逻辑问题?
int i;