Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我写了一个C程序来计算数组的标准偏差。我的代码给出了错误的答案。我做错了什么?_Arrays_C_Function_Math - Fatal编程技术网

Arrays 我写了一个C程序来计算数组的标准偏差。我的代码给出了错误的答案。我做错了什么?

Arrays 我写了一个C程序来计算数组的标准偏差。我的代码给出了错误的答案。我做错了什么?,arrays,c,function,math,Arrays,C,Function,Math,被注释掉的函数是我的函数,另一个是我从互联网上选择的函数。没有错误。代码只要求5个数字,然后要求操作4个操作中的一个,这里是标准偏差,然后运行该函数 根据我排除的问题,它没有读取数组的元素。它不是添加、删除或处理它们。当要求在该函数中打印其他内容时,它只打印出一个零 我是一个新手,正如我正在解决的问题的类型所暗示的,但是如果有人能在这里帮助我,那就太好了 谢谢 #include<stdio.h> #include<math.h> int arr[5]; in

被注释掉的函数是我的函数,另一个是我从互联网上选择的函数。没有错误。代码只要求5个数字,然后要求操作4个操作中的一个,这里是标准偏差,然后运行该函数

根据我排除的问题,它没有读取数组的元素。它不是添加、删除或处理它们。当要求在该函数中打印其他内容时,它只打印出一个零

我是一个新手,正如我正在解决的问题的类型所暗示的,但是如果有人能在这里帮助我,那就太好了

谢谢



#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;