当前位置: 首页 > news >正文

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

从键盘输入10个整数,按照从大到小的顺序输出,并统计最大值及其下标、最小值及其下标、平均值以及小于平均值的数字个数。

上篇文章,有两个问题留给大家,

第一:在找最大值、最小值时,因为这道题的特殊原因,我的循环条件分别写的是 i == 0 和 i == 9,如果是一般情况,循环条件该怎么写呢?

第二:如果使用者在输入的时候没有按从大到小的顺序,那么在总程序中需要设计一段验证程序,这段程序该怎么写呢?

第一个问题

因为已经是从大到小排序,第1个数(i=0)肯定是最大值,所以用i == 0代替nums[i] > max

i== 9代替nums[i] < min,so,一般情况应该是

第二个问题:

我们可以设计一个输入检查环节。当用户输完10个数字后,程序先不急着排序,而是先检查一遍这组数据是否已经是“从大到小”排列的

  • 如果是:提示“检测到您输入的是有序序列,跳过排序”。
  • 如果不是:提示“检测到无序序列,正在执行排序...”。

代码如下:

#include <stdio.h>

int 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;

// 定义一个标记变量,用来记录是否已经是降序
int is_descending = 1;// 1代表是降序,0代表不是

printf("请输入10个整数:\n");
for (i = 0; i < 10; i++)
{
printf("请输入第%d个数:", i + 1);
scanf("%d", &nums[i]);
}

// ==========================================
// --- 新增:输入顺序验证 ---
// ==========================================

for (i = 0; i < 9; i++)
{
// 如果前一个数 < 后一个数,说明不是从大到小(降序)
if (nums[i] < nums[i + 1])
{
is_descending = 0;// 标记为“不是降序”
break;// 只要发现一个反例,就不用继续检查了
}
}

if (is_descending == 1)
{
printf("\n[系统提示] 检测到您输入的数据已经是【从大到小】排列,跳过排序步骤。\n");
}
else
{
printf("\n[系统提示] 检测到数据无序,正在执行冒泡排序...\n");

// --- 冒泡排序 (从大到小) ---
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;

// 获取最大值最小值及其下标
max = nums[0]; max_id = 0;
min = nums[9]; min_id = 9;

// 统计小于平均值的个数
for (i = 0; i < 10; 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;
}

这段新增的代码主要利用了标志位的思想:

  1. 假设成立
    我们先定义一个变量int is_descending = 1;,意思是“先假设用户输入的就是从大到小的”。
  2. 寻找反例
    使用一个for循环遍历数组。只要发现前一个数小于后一个数nums[i] < nums[i + 1]),就说明“从大到小”的假设不成立。
  3. 推翻假设
    一旦发现反例,立刻把is_descending设为0,并使用break跳出循环(因为只要有一个不对,整体就不对,没必要浪费时间继续查)。
  4. 根据结果行动
    最后通过if (is_descending == 1)来判断是直接跳过排序,还是执行排序算法。

这样设计不仅逻辑严密,还能在用户输入正确时节省计算机的运算资源(不需要重复排序)。

具体来说,这段代码有以下四大优点:

1. 算法优化:懂得“偷懒”(效率提升)

这是这段代码最核心的优点。

  • 普通程序:不管你输入的是什么(哪怕是已经排好序的),它都会傻傻地执行两重循环,进行几十次比较和交换。这叫“暴力计算”。
  • 这段程序:它利用is_descending标志位,先花一点点时间检查一下。
    • 如果发现已经是排好序的(比如用户输入10, 9, 8...),它直接跳过了最耗时的排序步骤。
    • 好处:在处理大量数据时,这种“能省则省”的逻辑能极大地节省计算机的CPU资源,提高运行速度。

2. 逻辑严密:利用“短路”机制(性能细节)

请注意这段代码中的一个细节:

  • 优点:一旦发现了第一个“反例”(比如5, 6,前一个比后一个小),程序立刻使用break跳出循环。
  • 通俗解释:就像检查一篮鸡蛋,只要发现一个是臭的,就不需要检查剩下的了,直接判定这篮鸡蛋不行。这种逻辑避免了无意义的后续检查,非常干练。

3. 用户体验:提供“即时反馈”(交互友好)

代码中加入了人性化的提示:

  • 优点:很多程序运行时黑乎乎的,用户不知道它在干嘛。这段代码会明确告诉用户:“哦,你已经排好了,我就不用再排了”或者“好的,我正在帮你排序”。
  • 好处:这种反馈让程序看起来更智能,用户用起来也更放心。
http://www.jsqmd.com/news/606588/

相关文章:

  • 【ComfyUI】Qwen-Image-Edit-F2P 惊艳案例:跨次元人脸融合生成效果对比
  • Nano-Banana效果实测:在A10 GPU上单图生成耗时<8秒(30步)
  • Wan2.2-I2V-A14B与MATLAB联合仿真:为科学可视化生成示意图
  • 火绒安全软件6.0 深度评测 | 安静、安全、纯粹的“反PUA型“杀毒软件
  • Qwen3.5-9B 128K上下文应用:整套API文档索引构建+精准接口调用推荐
  • 5个技巧让你轻松实现直播保存:DouyinLiveRecorder多平台全场景应用指南
  • 如何用MediaCreationTool.bat一键搞定Windows 11安装权限与TPM限制
  • 利用Llama-Factory与LoRA技术,低成本微调Qwen3-4B模型实现推理能力跃迁
  • 车载以太网协议栈开发倒计时:2025年UWB+以太网融合架构强制上车前,你必须掌握的4项C++20关键特性
  • AI Agent 智能体技能实战教程(非常详细),10个开发必备技能从入门到精通,收藏这一篇就够了!
  • 第3篇 | 破局物理极限:WDM波分复用——让一根光纤“变出”百条高速公路
  • seo网络推广课程有哪些
  • 终极网盘直链解析工具LinkSwift:一键获取八大平台高速下载地址的完整指南
  • LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南
  • WarcraftHelper完整指南:3步解决魔兽争霸3在现代电脑上的兼容性问题
  • 终极指南:如何免费在Windows 11上部署Android子系统并优化性能
  • LFM2.5-1.2B-Thinking-GGUF在学术写作中的应用:LaTeX公式与图表说明生成
  • CLIP-GmP-ViT-L-14图文匹配测试工具:单片机系统远程调用模型服务方案
  • 抖音内容批量下载工具:架构解析与实践指南
  • A59F防啸叫消回音模组15ms低延迟
  • QMCDecode终极指南:三步解锁QQ音乐加密格式,实现音频自由播放
  • 突破算力瓶颈:Transformers并行计算全攻略(多核CPU与GPU实战指南)
  • 医生和算法工程师都该看看:这个能‘看清’纹理的AI,如何让CBCT图像秒变高清CT?
  • 3步突破抖音无水印下载限制:面向内容创作者的高效解决方案
  • 隧道液氮速冻机哪家企业值得信赖
  • 5 种简单方法,将联系人从电脑/苹果电脑传输至三星手机
  • 城通网盘直连解析:3步实现免等待高速下载的完整指南
  • 抖音批量下载终极指南:3分钟掌握无水印内容保存技巧
  • AudioSeal实战案例:无障碍AI语音服务中水印与无障碍元数据共存方案
  • 告别《空洞骑士》模组管理噩梦:Lumafly如何让300+模组配置化繁为简