标题:求数组中的中位数,大家看看代码哪里出错了
只看楼主
吕家三少
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-1
结帖率:100%
已结贴  问题点数:20 回复次数:6 
求数组中的中位数,大家看看代码哪里出错了
题目:编程求数组各元素的中位数,要求如下:
(1)void array_input(double array[], int n)的功能是:输入double型数组array的各元素值,参数n是数组元素的个数;
(2)void select_sort(double array[], int n)函数实现从小到大选择排序功能,参数n是数组元素的个数;
(3)double median(double array[], int n)的功能是:求出有序数组array各元素的中位数,参数n是数组元素的个数;
(说明:中位数就是在已排序的各元素中,处于中间位置的元素值:当数组元素个数为奇数时,处于中间位置的元素只有一个,中位数就是该元素的值;当数组元素个数为偶数时,处于中间位置的元素只有两个,中位数就是这两个元素的简单算术平均数)
(4)主函数的功能:定义一个是长度为8的double型数组,通过调用array_input()输入各元素的值,再调用select_sort()对数组各元素排序,之后调用median()得到中位数,最后输出结果;
代码:
#include<stdio.h>
int main()
{
    void array_input(double array[], int n);
    void select_sort(double array[], int n);
    double median(double array[], int n);
    double d[8],a;
    int n=8;
    array_input(d,8);
    select_sort(d,8);
    a=median(d,8);
    printf("数组d各元素的中位数:%f",a);
    return 0;
}
void array_input(double array[], int n)
{
    int i;
    printf("请输入double型数组的个元素:");
    for(i=0;i<n;i++)
    {
        scanf("%f",&array[i]);
    }
}
void select_sort(double array[], int n)
{
    double t;
    int i;
    for(i=0;i<n;i++)
    {
        if(array[i]>array[i+1])
            t=array[i];
            array[i]=array[i+1];
            array[i+1]=t;
    }
}
double median(double array[], int n)
{
    double x,y;
    int i;
    if(n%2==0)
    {
        x=array[i/2]+array[i/2+1];
        y=x/2;
    }
    else
       y=array[(i+1)/2];
    return(y);
}




大家帮帮忙啊,看看哪里出错了。。。
搜索更多相关主题的帖子: double median 中位数 元素 
2012-12-01 21:05
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:20 
程序代码:
void select_sort(double array[], int n)
{
    double t;
    int i;
    for(i=0;i<n;i++)
    {
        if(array[i]>array[i+1])
            t=array[i];
            array[i]=array[i+1];
            array[i+1]=t;
    }
}
if下应该打上大括号:
if(array[i]>array[i+1])
{
            t=array[i];
            array[i]=array[i+1];
            array[i+1]=t;
}

I have not failed completely
2012-12-01 21:19
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:0 
程序代码:
double median(double array[], int n)
{
    double x,y;
    int i;
    if(n%2==0)
    {
        x=array[i/2]+array[i/2+1];
        y=x/2;
    }
    else
       y=array[(i+1)/2];
    return(y);
}

应改成i<n-1;因为只用比较7次嘛
程序代码:
double median(double array[], int n)
{
    double x,y;
    int i;
    if(n%2==0)
    {
        x=array[i/2]+array[i/2+1];
        y=x/2;
    }
    else
       y=array[(i+1)/2];
    return(y);
}

应初始化i
int i = 0;


I have not failed completely
2012-12-01 21:27
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:0 
我调试过了,结果正确

I have not failed completely
2012-12-01 21:28
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:0 
这里并不完善
程序代码:
void select_sort(double array[], int n)
{
    double t;
    int i;
    for(i=0;i<n-1;i++)
    {
        if(array[i]>array[i+1])
            t=array[i];
            array[i]=array[i+1];
            array[i+1]=t;
    }
}

例如如果输入3 3 2
 则程序只能把它变为 3 2 3
哎,干脆我把修改后的代码全发过来算了...
程序代码:
#include<stdio.h>
int main()
{
    void array_input(double array[], int n);
    void select_sort(double array[], int n);
    double median(double array[], int n);
    double d[8],a;
    int n=8;
    array_input(d,8);
    select_sort(d,8);
    a=median(d,8);
    printf("数组d各元素的中位数:%f",a);
    return 0;
}
void array_input(double array[], int n)
{
    int i;
    printf("请输入double型数组的个元素:");
    for(i=0;i<n;i++)
    {
        scanf("%f",&array[i]);
    }
}
void select_sort(double array[], int n)
{
    double t;
    int i;
    int j = 0;

    while(!j)
    {
        j = 1;
    for(i=0;i<n-1;i++)
    {
        if(array[i]>array[i+1])
        {
            t=array[i];
            array[i]=array[i+1];
            array[i+1]=t;
            j = 0;
        }
    }
    }
}
double median(double array[], int n)
{
    double x,y;
    int i = 0;
    if(n%2==0)
    {
        x=array[i/2]+array[i/2+1];
        y=x/2;
    }
    else
       y=array[(i+1)/2];
    return(y);
}


还有一种方法,效率更高,但是有点绕脑,在这里就不打了
考虑到你可能没有<stdbool.h>这个头文件
所以用1和0来替代了true和false
不过它们本来也是这个值...

I have not failed completely
2012-12-02 08:52
吕家三少
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-1
得分:0 
回复 5楼 神龙赖了
怎么调式不正确的啊。。。。。调式出的结果出现很多的负数的?再次求救高手啊
2012-12-03 19:01
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    void number_input(double number[], int n);
    void select_sort(double number[], int n);
    double median(double number[], int n);
    double d[8],a;
    int n=8;
    number_input(d,8);
    select_sort(d,8);
    a=median(d,8);
    printf("数组d各元素的中位数:%lf",a);
    return 0;
}
void number_input(double number[], int n)
{
    int i;
    printf("请输入double型数组的个元素:");
    for(i=0;i<n;i++)
    {
        scanf("%lf",&number[i]);
    }
}
void select_sort(double number[], int n)
{
    double t = 0.0;
    int i;
     int j = 0;

    while(!j)
    {
       j = 1;
    for(i=0;i<n-1;i++)
    {
        if(number[i]>number[i+1])
            t=number[i];
            number[i]=number[i+1];
            number[i+1]=t;
            j = 0;
    }
}


double median(double number[], int n)
{
    double x,y;
    int i = 0;
    if(n%2==0)
    {
        x=number[i/2]+number[i/2+1];
        y=x/2;
    }
    else
       y=number[(i+1)/2];
    return(y);
}


I have not failed completely
2012-12-03 19:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-389238-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096746 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved