有一组整数数据,数量为1000个,范围-10000~10000,要求出这组数据中所有正数的平均值和正数中最大值、最小值的差值 。

C语言练习碰到的题

我认为的顺序是,读取数据,然后提取正数,从大到小排列,标记正数的个数,计算正数的平均数,最后计算最大值最小值差值


#include<stdio.h>
#include<stdlib.h>

int main()
{
    int array[1000] ;
    int Max = 0;
    int Min = 0;
    double Avg = 0;
    bool bFirst = false;
    int Count = 0;
    int Cha = 0;
    for ( int i = 0; i < 1000; ++i )
    {
        if (array[i] > 0 )
        {
            Avg += array[i] * 1.0;
            ++Count;
            if ( !bFirst )
            {
                Max = array[i];
                Min = array[i];
                bFirst = true;
            }
            if ( bFirst )
            {
                if ( Max < array[i] )
                {
                    Max = array[i];
                }
                if ( Min > array[i] )
                {
                    Min = array[i];
                }
            }
        }
    }
    if ( Count > 0 )
    {
        Avg /= Count;
    }
    Cha = Max - Min;
    printf("正数平均值:%lf,正数最大值:%d,正数最小值%d,差:%d\n", Avg, Max, Min, Cha);
    return 0;
}

解题代码如下,程序结果已验证,望采纳:

#include<stdio.h>
  
void main()
{
    int a[1000] = {0};
    int max=0,min=0,diff=0,sum=0,pos_num = 0,i;
    float aver=0;

    printf("请输入数字,最多1000个,范围-10000~10000(以超出范围作为结束输入):\n");
    for(i = 0;i <1000;i++){
        scanf("%d",&a[i]);
        if((a[i] < -10000)||(a[i]>10000)){
            a[i] = 0;
            break;
        }
    }

    max = a[0];
    min = a[0];
    for(i = 0;i < 1000;i++){
        if(a[i]>0){
            sum += a[i];
            pos_num++;
            if(max < a[i])
                max = a[i];
            if(min > a[i])
                min = a[i];
        }
    }
    aver = sum*1.0/pos_num;
    diff = max-min;
    printf("平均值:%f,最大值:%d,最小值:%d,差值:%d\n",aver,max,min,diff);
}


结果验证如下:
请输入数字,最多1000个,范围-10000~10000(以超出范围作为结束输入):
100
200
99
1
100000
平均值:100.000000,最大值:200,最小值:1,差值:199

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void calc(int *arr, int length, float *dmin, float *dmax)
{
    //由于最大数才10000,所以不用考虑越界
    double sum = 0, avg = 0;
    int count = 0;

    *dmin = *dmax = 0.f;
    for (int i = 0; i < length; ++i)
    {
        if (arr[i] > 0)
        {
            count++;
            sum += arr[i];

            //查找最小正数
            if (arr[i] < *dmin) 
            {
                *dmin = arr[i];
            }

            //最大正数
            if (arr[i] > *dmax)
            {
                *dmax = arr[i];
            }
        }
    }

    avg = sum / length;
    *dmin = *dmin - avg;
    *dmax = *dmax - avg;
}

int main(int argc, char** argv)
{
    srand(time(NULL));
    int array[1000];
    float dmin, dmax;
    //生成10000个随机测试数据
    for (int i = 0; i < 1000; ++i)
    {
        array[i] = rand() % 20000 - 10000;
    }

    calc(array, 1000, &dmin, &dmax);
    printf("dmin=%.1f, dmax=%.1f", dmin, dmax);
    return 0;
}

大家看我写的有问题吗?