输入不超过20个非负整数

输入不超过20个非负整数(输入每个整数后按回车,以-1结束且不计入整数个数),用一维数组作函数参数编程实现如下功能:
(1)录入每个整数,函数原型:unsigned short ReadNumber(int num[]),num存储输入的整数,返回值为输入整数的个数;
(2)按由高到低的顺序排序,函数原型:void SortNumberDescending(int num[], unsigned short n),n为整数个数;
(3)对这些整数求和及平均值,函数原型:void SummingAveraging(int num[], unsigned short n, int *pSum, float *pAver),pSum指向和变量,pAver指向平均值变量;
(4)输出这些整数,函数原型:void PrintNumber(int num[], unsigned short n) 。
主函数中按以下示例形式提示输入、调用函数(1)、调用函数(2)、提示输出、调用函数(4)、调用函数(3)、输出整数和及平均值。
Input Numbers:
87
100
...
23
-1

Sort in descending order:
100
...
23

Sum=474,Aver=59.25

输入格式:
"Input Numbers:\n"
"%d"
输出格式:
"\nSort in descending order:\n"
"\nSum=%d,Aver=%.2f\n"
"%d\n"
想问一下下面程序哪里有问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ReadNumber(int num[]);
void SortNumberDescending(int num[],int n);
void SummingAveraging(int num[],int n, int *pSum, float *pAver);
void  PrintNumber(int num[], int n);
int main()
{
    int num[20],sum=0;
    int n;
    float Aver=0;
    int *pSum=&sum,*pAver=&Aver;
    printf("Input Numbers:\n");
    n=ReadNumber(num[20]);
    SortNumberDescending(num[n],n);
    SummingAveraging(num[n],n,*pSum,*pAver);
    printf("\nSort in descending order:\n");
    PrintNumber(num[n],n);
    printf("\nSum=%d,Aver=%.2f\n",*pSum,*pAver);
}
int ReadNumber(int num[])
{
    int i;
    int n=0;
    for(i=0;;i++)
    {
        scanf("%d\n",&num[i]);
        n++;
        if(num[i]==-1)
            break;
    }
    return n;
}
void SortNumberDescending(int num[],int n)
{
    int i,j,temp;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if (num[j]>num[i])
            {
                temp=num[j];
                num[j]=num[i];
                num[i]=temp;
            }
        }
    }
}
void SummingAveraging(int num[],int n, int *pSum, float *pAver)
{
    int i,sum=0;
    for(i=0;i<n;i++)
    {
        *pSum=*pSum+num[i];
    }
    *pAver=(float)*pSum/n;
}
void  PrintNumber(int num[], int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d\n",num[i]);
    }
}

#include<stdio.h>

unsigned short ReadNumber(int num[]){
    unsigned short count = 0;
    int n = 0;
    do{
        scanf("%d", &n);
        if(n != -1 && count < 20){
            num[count++] = n;
        }
    }while(n != -1 && count < 20);
    return count;
}

void SortNumberDescending(int num[], unsigned short n){
    int temp = 0, i = 0, j = 0;
    for(i = 0; i < n-1; i++){
        for(j = i+1; j < n; j++){
            if(num[i] < num[j]){
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }
}

void SummingAveraging(int num[], unsigned short n, int *pSum, float *pAver){
    int sum = 0, i = 0;
    for(i = 0; i < n; i++){
        sum += num[i];
    }
    *pSum = sum;
    *pAver = (float)sum/n;
}

void PrintNumber(int num[], unsigned short n){
    int i = 0;
    for(i = 0; i < n; i++){
        printf("%d ", num[i]);
    }
    printf("\n");
}

int main(){
    int num[20], sum = 0;
    float aver = 0.0f;
    unsigned short count = 0;

    //提示输入
    printf("Please input up to 20 non-negative integers, end with -1:\n");

    // 调用函数1,读取数字并统计个数
    count = ReadNumber(num);

    // 调用函数2,将数字排序
    SortNumberDescending(num, count);

    // 提示输出
    printf("The numbers in descending order are: ");

    // 调用函数3,将排序后的数字输出
    PrintNumber(num, count);

    // 调用函数4,求和及平均值
    SummingAveraging(num, count, &sum, &aver);

    // 输出整数和及平均值
    printf("The sum of these numbers is: %d\n", sum);
    printf("The average of these numbers is: %.2f\n", aver);

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    该程序没有明显的语法错误,但存在以下问题:

    1. 没有对输入的非负整数的范围进行限制,可能会导致程序出错。

    2. 未检查输入的数组长度是否超过20个,可能会导致程序出错。

    3. 排序函数SortNumberDescending()没有检查数组长度n是否为0,可能会导致程序出错。

    4. 在求和平均值函数SummingAveraging()中,指针pSum和pAver未检查是否为NULL,可能会导致程序出错。

    5. 在输出平均值时,未指定小数点后保留位数,可能会导致输出错误。

    为了解决以上问题,可以对程序进行如下修改:

    #include <iostream>
    #include <iomanip>  // 加入iomanip库,用于输出控制
    
    using namespace std;
    
    unsigned short ReadNumber(int num[]);
    void SortNumberDescending(int num[], unsigned short n);
    void SummingAveraging(int num[], unsigned short n, int *pSum, float *pAver);
    void PrintNumber(int num[], unsigned short n);
    
    int main()
    {
        int num[20];
        unsigned short n = ReadNumber(num);
        SortNumberDescending(num, n);
        PrintNumber(num, n);
        int sum;
        float aver;
        SummingAveraging(num, n, &sum, &aver);
        cout << "The sum is " << sum << endl;
        // 设置小数点后保留两位
        cout << fixed << setprecision(2) << "The average is " << aver << endl; 
        return 0;
    }
    
    // 限制输入的非负整数的范围
    unsigned short ReadNumber(int num[])
    {
        cout << "Please enter no more than 20 non-negative integers" << endl;
        unsigned short count = 0;
        int input;
        while(cin >> input && input >= 0 && count < 20) {  // 判断输入是否合法
            num[count] = input;  // 将输入存入数组
            count++;
        }
        return count;  // 返回输入的数量
    }
    
    // 检查数组长度n是否为0,避免程序出错
    void SortNumberDescending(int num[], unsigned short n)
    {
        if(n == 0) {
            return;  // 直接返回,不进行操作
        }
        // 排序算法
        for(int i = 0; i < n - 1; i++) {
            for(int j = i + 1; j < n; j++) {
                if(num[j] > num[i]) {
                    int tmp = num[i];
                    num[i] = num[j];
                    num[j] = tmp;
                }
            }
        }
    }
    
    // 检查指针pSum和pAver是否为NULL,避免程序出错
    void SummingAveraging(int num[], unsigned short n, int *pSum, float *pAver)
    {
        if(pSum == NULL || pAver == NULL) {
            return;  // 直接返回,不进行操作
        }
        int sum = 0;
        for(int i = 0; i < n; i++) {
            sum += num[i];
        }
        *pSum = sum;
        *pAver = (float)sum / n;
    }
    
    void PrintNumber(int num[], unsigned short n)
    {
        cout << "The numbers are: ";
        for(int i = 0; i < n; i++) {
            cout << num[i] << " ";
        }
        cout << endl;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^