You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言新手编写数组运算函数无预期输出,求问题排查

问题分析与修复方案

1. printf输出缺失格式占位符

你的输出语句没有指定变量的格式符,导致程序无法正确打印计算结果,同时还存在拼写错误(largeest应为largest)。修改后的输出代码如下:

printf("\nsmallest number: %d", min);
printf("\nlargest number: %d", max);
printf("\nsum of numbers: %d", addition);
printf("\naverage: %f", avg);

2. 平均值计算的整数除法问题

average函数中,sum和input均为整数,直接执行sum / input会触发整数除法(舍弃小数部分),导致结果不准确。需将其中一个操作数转为浮点型,优化后的函数可以直接复用已实现的sum函数,避免重复代码:

float average(int numbers[], int input)
{
    return (float)sum(numbers, input) / input;
}

3. 输入边界的安全性问题

当用户输入input = 0时,smallest、largest函数中访问numbers[0]会导致数组越界,引发程序崩溃。需在main函数中添加输入验证:

printf("How many numbers do you want to work with?: ");
scanf("%d", &input);
if (input <= 0 || input > 100) {
    printf("Invalid input! Please enter a number between 1 and 100.\n");
    return 1;
}

修复后的完整代码

/**
 * Scrivere un programma che dato un insieme di numeri in ingresso (tastiera), effettua le seguenti operazioni:
 *
 * a. stampa a video la somma dei numeri inseriti
 * b. stampa a video il massimo dei numeri inseriti
 * c. stampa a video il minimo dei numeri inseriti
 * d. stampa a video la media dei numeri inseriti
 *
 */

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

int sum(int numbers[], int input)
{
    int total = 0;
    for (int i = 0; i < input; i++)
    {
        total = total + numbers[i];
    }
    return total;
}

int smallest(int numbers[], int input)
{
    int small = numbers[0];
    for (int i = 0; i < input; i++)
    {
        if (numbers[i] < small)
        {
            small = numbers[i];
        }
    }
    return small;
}

int largest(int numbers[], int input)
{
    int large = numbers[0];
    for (int i = 0; i < input; i++)
    {
        if (numbers[i] > large)
        {
            large = numbers[i];
        }
    }
    return large;
}

float average(int numbers[], int input)
{
    return (float)sum(numbers, input) / input;
}

int main()
{
    int array[100], input, number, min, max, addition;
    float avg;
    printf("How many numbers do you want to work with?: ");
    scanf("%d", &input);

    if (input <= 0 || input > 100) {
        printf("Invalid input! Please enter a number between 1 and 100.\n");
        return 1;
    }

    for (int i = 0; i < input; i++)
    {
        printf("Please enter the number: ");
        scanf("%d", &number);
        array[i] = number;
    }

    min = smallest(array, input);
    max = largest(array, input);
    addition = sum(array, input);
    avg = average(array, input);

    printf("\nsmallest number: %d", min);
    printf("\nlargest number: %d", max);
    printf("\nsum of numbers: %d", addition);
    printf("\naverage: %f", avg);

    return 0;
}

内容的提问来源于stack exchange,提问作者alex108

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:20:37