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
相关产品推荐
相关产品推荐

