c++ - float 组的中间模式平均计算

标签 c++ c

我已经编写了一个代码来计算 float 组的中间值、众数和平均值,但是就在我输入第一个数字时,我在 dev c.in vs 2012 中遇到了“...已停止工作”错误不起作用。为什么?

#include<stdio.h>
float avg(float [],int);
void mode(float [], int);
float middle(float [], int);
int main(){
    int i,t=5;
    float a[t];
    for (i=0;i<t;++i)
        scanf("%f", a[i]);
    printf("avg= %f\n", avg(a, t));
    printf("middle= %f\n", middle(a, t));
    //printf("mode= \n", mode(a[]));
    mode(a, t);
    return 0;
}
float avg(float a[], int t){
    float s;
    int i;
    for(i=0;i<t;++i)
        s+=a[i];
    return s/t;
}
 float middle(float a[], int t){
    int i,u;
    float h;
    for(i=0;i<t-1;++i)
        for(u=1;u<t;++u)
            if(a[i]>a[u]){
                h=a[i];
                a[i]=a[u];
                a[u]=h;
            }
    if(t%2==0)
        return (a[t/2]+a[t/2+1])/2;
    else
        return (a[(t+1)/2]);
}
void mode(float a[], int t){
    float b[t],h;
    int i,u;
    for(i=0;i<t;++i)
        b[i]=0;
    for(i=0;i<t;++i)
        for(u=0;u<t;++u)
            if (a[i]==a[u])
                b[i]++;
    for(i=0;i<t-1;++i)
        for(u=1;u<t;++u)
            if(a[i]<a[u]){
                h=a[i];
                a[i]=a[u];
                a[u]=h;
            }
    printf("%f\n", a[0]);
    for(i=1;i<t;++i)
        if(a[0]==a[i])
            printf("%f\n", a[i]);
}

最佳答案

scanf("%f", a[i]);

应该是

scanf("%f", &a[i]);

扫描到您要存储值的位置,这里是&a[i]

 float s;

s 在函数 avg() 中未初始化,使用未初始化的变量会导致未定义的行为。

关于c++ - float 组的中间模式平均计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224961/

相关文章:

c++ - 插槽未被使用

c# - 您如何向 C#/Java 开发人员解释 C++ 指针?

c++ - 在 Linux 上管理共享库的常用方法是什么?

c - 生成正确的 .DEF 文件以导出非静态函数和全局变量

c - 如何给字符串赋值?

c++ - 如何引用类的静态私有(private)对象?

c++ - Qt Creator,调用一个函数

c++ - 在 C++ 中如何访问从 COM 对象返回的 VARIANT 数据类型中的 SAFE ARRAY?

c - 从文件中删除一条记录

c - 溢出: I just want to know how the computers correct the overflow