搜索
查看: 2442|回复: 4
打印 上一主题 下一主题

C语言一天一练--26.august

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-26 19:14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
编程题——平均数、中位数以及众数
-----------------------------------------------------------------------------------------------------------------
输入一个正整数N和N个正整数
打印这N个数的平
均数(取整)、中位数以及众数(如果没有则输出NO)
------------------------------------------------------------------------------------------------------------------
【样例输入1】
5
7 3 4 5 8
【样例输出1】
5 5 NO

【样例输入2】
5
12 325 15 12 28
【样例输出2】
72 15 12



沙发
发表于 2012-8-27 11:25:18 | 只看该作者
众数的概念是什么  如果2 3 3 4 4 这算有多个众数,如3,4都算众数,还是无
板凳
 楼主| 发表于 2012-8-30 18:54:48 | 只看该作者
vcwuyang 发表于 2012-8-27 11:25
众数的概念是什么  如果2 3 3 4 4 这算有多个众数,如3,4都算众数,还是无

呃,程序需要,就先选择靠前的一个,例如这个就是3
地板
发表于 2012-11-26 12:04:34 | 只看该作者
[ 本帖最后由 henk 于 2012-11-26 13:15 编辑 ]\n\n[ 本帖最后由 henk 于 2012-11-26 13:14 编辑 ]\n\n
#include<stdio.h>
#include<stdlib.h>
/*快速排序*/
int quick_sort(int *a, int n, int left, int right) {
    int s, i, j;
    int temp;
    if(left < right) {
        s = a[left];
        i = left;
        j = right + 1;
        while(1) {
            while(i + 1 < n && a[++i] > s);
            while(j - 1 > -1 && a[--j] < s);
            if(i >= j) {
                break;
            }
            temp = a;
            a = a[j];
            a[j] = temp;
        }
        a[left] = a[j];
        a[j] = s;
        quick_sort(a, n, left, j - 1);
        quick_sort(a, n, j + 1, right);
    }
    return 0;
}
/*求平均数*/
void get_avg(int *a,int n)
{
  int i;
  float sum=0;
  for(i=0;i<n;i++)
  {
      sum+=a;
  }
        
  printf("平均数=%.2f\t",(sum/n));
}
/*求中位数*/
void find_middle(int *a,int n)
{
    float middle;
    if(n%2==1)
    {
        middle=a[n/2];
    }
    else
    {
        middle=(a[n/2]+a[n/2-1])/2.0;
    }
    printf("中位数=%.1f\t",middle);
}
/*求众数*/
int find_max_seq(int *a, int n)
{
    int i, elem;
    int count = 0, count1 = 0;
    for(i = 0; i < n;i++ )
    {
        while(a==a[i+1])
        {
            count++;
            i++;
        }
         
        if(count > count1)
        {
            count1 = count;
            elem = a;
            
        }
        /*
        因为暂时没想到如何当阵列里没有众数时,印出NO,于是就用当阵列里没有众数时,将elem赋值为-1,
        在main函式中判断elem的大小,当elem=-1时,则印出NO,否则印出elem;
        */
        else if(count1==0)
        {elem=-1;}      
        
        count = 0;               
    }  
        return elem;
}

int main()
{
    int n,max;
    printf("请输入一个整数n:");
    scanf("%d",&n);
    int arr[n];
    int i;
    printf("请输入%d个整数(整数间用空格分开):",n);
    for(i = 0; i < n; i++)
    {
        scanf("%d",&arr);
    }
    quick_sort(arr, n, 0, (n-1));
    get_avg(arr,n);
    find_middle(arr,n);
    max=find_max_seq(arr, n);
    if(max!=-1)
    {printf("众数=%d",max);}
    else
    {printf("NO");}
    system("pause");
    return 0;
}
5#
发表于 2012-12-3 15:32:03 | 只看该作者
[mw_shl_code=c,true]
#include<stdio.h>
#include<stdlib.h>
/*快速排序*/
int quick_sort(int *a, int n, int left, int right) {
    int s, i, j;
    int temp;
    if(left < right) {
        s = a[left];
        i = left;
        j = right + 1;
        while(1) {
            while(i + 1 < n && a[++i] > s);
            while(j - 1 > -1 && a[--j] < s);
            if(i >= j) {
                break;
            }
            temp = a;
            a = a[j];
            a[j] = temp;
        }
        a[left] = a[j];
        a[j] = s;
        quick_sort(a, n, left, j - 1);
        quick_sort(a, n, j + 1, right);
    }
    return 0;
}
/*求平均数*/
void get_avg(int *a,int n)
{
  int i;
  float sum=0;
  for(i=0;i<n;i++)
  {
      sum+=a;
  }
        
  printf("平均数=%.2f\t",(sum/n));
}
/*求中位数*/
void find_middle(int *a,int n)
{
    float middle;
    if(n%2==1)
    {
        middle=a[n/2];
    }
    else
    {
        middle=(a[n/2]+a[n/2-1])/2.0;
    }
    printf("中位数=%.1f\t",middle);
}
/*求众数*/
int find_max_seq(int *a, int n)
{
    int i, elem;
    int count = 0, count1 = 0;
    for(i = 0; i < n;i++ )
    {
        while(a==a[i+1])
        {
            count++;
            i++;
        }
         
        if(count > count1)
        {
            count1 = count;
            elem = a;
            
        }
        /*
        因为暂时没想到如何当阵列里没有众数时,印出NO,于是就用当阵列里没有众数时,将elem赋值为-1,
        在main函式中判断elem的大小,当elem=-1时,则印出NO,否则印出elem;
        */
        else if(count1==0)
        {elem=-1;}      
        
        count = 0;               
    }  
        return elem;
}

int main()
{
    int n,max;
    printf("请输入一个整数n:");
    scanf("%d",&n);
    int arr[n];
    int i;
    printf("请输入%d个整数(整数间用空格分开):",n);
    for(i = 0; i < n; i++)
    {
        scanf("%d",&arr);
    }
    quick_sort(arr, n, 0, (n-1));
    get_avg(arr,n);
    find_middle(arr,n);
    max=find_max_seq(arr, n);
    if(max!=-1)
    {printf("众数=%d",max);}
    else
    {printf("NO");}
    system("pause");
    return 0;
}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表