10个数下标排序:最大值、最小值与平均值(上)

张开发
2026/4/6 21:26:42 15 分钟阅读

分享文章

10个数下标排序:最大值、最小值与平均值(上)
从键盘输入10个整数按照从大到小的顺序输出并统计最大值及其下标、最小值及其下标、平均值以及小于平均值的数字个数。#include stdio.hint main(){int nums[10];int i, j, t, max, min, sum 0, less_average 0;int max_id 0, min_id 0;float average 0;printf(请输入10个整数\n);for (i 0; i 10; i){printf(请输入第%d个数, i 1);scanf(%d, nums[i]);}for (i 0; i 9; i){for (j 0; j 9 - i; j){if (nums[j] nums[j 1]){t nums[j];nums[j] nums[j 1];nums[j 1] t;}}}sum 0;for (i 0; i 10; i){sum nums[i];}average (float)sum / 10;for (i 0; i 10; i){if (i 0){max nums[i];max_id i;}if (i 9){min nums[i];min_id i;}if(nums[i] average){less_average;}}printf(\n从大到小排序后的结果为\n);for (i 0; i 10; i){printf(%d , nums[i]);}printf(\n);printf(最大值%d下标%d\n, max, max_id);printf(最小值%d下标%d\n, min, min_id);printf(平均值%.2f\n, average);printf(小于平均值的数字个数%d\n, less_average);return 0;}我们可以把它想象成一个“智能数据整理机器人”它的工作流程非常严谨分为四个步骤接收原料、加工排序、统计分析和输出报表。下面我为你逐段详细解析 第一步接收原料输入数据功能程序首先开辟了一个能装10个整数的“盒子”数组nums[10]。流程利用for循环像流水线一样依次让用户输入10个数字并把它们整齐地放进数组里。 第二步加工排序冒泡排序功能这是经典的冒泡排序算法(在这里就不过多说明)核心逻辑注意这里的判断条件是if (nums[j] nums[j 1])。意思是如果前一个数比后一个数小就交换它们。结果通过不断的交换小的数字会被慢慢“挤”到后面去大的数字会“浮”到前面。最终数组变成了从大到小降序排列 第三步统计分析计算核心这一部分分为两个连贯的动作先算总和与平均值再利用循环找最大最小值。1. 计算总和与平均值细节这里先清空sum循环累加完所有数字后再计算average。(float)的作用这是一个强制类型转换。因为sum和10都是整数直接相除会丢弃小数部分。加上(float)是为了告诉电脑“我要精确的小数结果”这样average才能保留两位小数。2. 寻找最大值、最小值与统计巧妙之处因为前面已经排好序了从大到小所以第1个数下标0一定是最大值最后1个数下标9一定是最小值。代码逻辑我·没有重新写循环去比大小而是直接利用if (i 0)和if (i 9)在遍历过程中“顺手”把最大最小值取出来。这是一种很聪明的做法节省了计算资源。统计同时循环还会检查每个数是否小于平均值如果是计数器less_average就加1。 第四步输出报表打印结果功能最后把整理好的数据打印给用户看。修正这里的循环条件i 10是正确的保证了10个数字都能被打印出来。 总结这段代码是一个完全正确且逻辑通顺的版本。它展示了C语言中数组操作的三个核心考点排序算法如何通过双重循环实现降序排列。数据精度如何正确使用(float)进行平均值计算。算法优化如何利用“已排序”的特性直接获取最大值和最小值而不是盲目遍历。最后我有两个问题留给大家第一在寻找最大值、最小值时因为这道题的特殊原因我的循环条件分别写的是i 0和i 9如果是一般情况循环条件该怎么写呢第二如果使用者在输入的时候没有按从大到小的顺序那么在总程序中需要设计一段验证程序,这段程序该怎么写呢

更多文章