C Day 24

第三次阶段检测,
用完整程序检验理解

今天复习 C 第 17—23 天的数组相关知识,最终取得 90 分。基础概念、输出预测和综合编程均满分,找错题提醒我继续练习完整检查与准确描述。

检测范围与成绩

本次没有引入新语法,范围包括数组与下标、输入遍历、最大最小值、sizeof 与 size_t、浮点平均值、查找计数、交换反转,以及冒泡排序和提前结束。按首次作答评分,订正不回补分数。

  • 基础概念:20/20。
  • 执行过程与输出预测:20/20。
  • 找错与修改:15/25。
  • 综合编程:35/35。

最终成绩 90/100。比上次 93 分低 3 分;本次失分集中在找错与修改,综合编程通过两组运行验证。

概念与输出预测:完整追踪数据

能够准确说明数组数量与下标、总字节数除以单个元素字节数的含义、%zu 的用途,以及全负数数组为什么不能用 0 初始化最大值。

四道输出题全部正确:区分整数除法后保存为 double 与除法前转换;完整写出匹配下标、次数和循环外的“结束”;追踪反转后的元素与左右下标;预测一轮冒泡的数组和交换次数。

找错题:检查不够完整的地方

输入题识别了循环边界,但漏掉 scanf_s 所需的 &。输入提示可以添加,却不能代替修正数组元素地址。最小值题知道不能初始化为 0,但回答没有明确写出 values[0] 与从下标 1 开始遍历的对应关系。

临时变量交换题完全正确。标记与计数器题中,正确识别了初始化位置需要互换,但后续移动位置的描述不够准确,也漏掉了原代码的作用域问题。订正时确认:比较计数在大小判断之前增加,交换标记只能在真正交换时设为 1。

每轮重新声明计数器会丢掉上一轮累计值,而且循环外无法访问这个局部变量;交换标记则必须在每轮开始时重新设为 0。最后能够准确补答:& 提供数组元素地址,不发生交换也仍然进行了一次比较。

独立综合编程:五个整数分析与排序

在 review_test_c3.c 中独立完成输入五个整数,计算总和、两位小数平均值、最大值和最小值;读取目标整数并统计全部匹配;最后进行带提前结束的升序排序,输出数组、比较次数和交换次数。

额外实现了首个匹配下标查找。首个查找可以用 break,全部计数则继续遍历,两段流程没有混淆。题目约定输入均为合法整数,本次不考非整数输入处理。

review_test_c3.c · 计算与初始化片段
double average = (double)total / count;
printf("平均值 = %.2f\n", average);

int maximum = numbers[0];
int minimum = numbers[0];

第一组:重复值、负数与完整排序

输入:4 -2 4 1 0
目标:4
总和:7       平均值:1.40
最大值:4     最小值:-2
首次下标:0   全部匹配下标:0、2
出现次数:2
排序结果:-2 0 1 4 4
比较次数:10  交换次数:6

先预测再运行,结果全部一致。四轮 swapped 依次为 1、1、1、0。最后一轮触发 break,程序显示“已经有序,提前结束”;但这次已经完成全部四轮,因此实际没有省下比较次数。

第二组:全负数、目标不存在与已有序

输入:-9 -7 -5 -3 -1
目标:0
总和:-25     平均值:-5.00
最大值:-1    最小值:-9
没有找到 0,出现次数:0
排序结果:-9 -7 -5 -3 -1
比较次数:4   交换次数:0

这组预测也全部正确。第一轮没有交换,立即结束排序。两组运行均正常退出,代码为 0;综合程序没有经过代写或修改,最终确认综合编程 35/35。

下一步继续加强什么

完整程序中的输入地址、首元素初始化、标记重置与累计计数位置都已写对。接下来重点练习阅读错误代码时逐项检查,明确写出修改后的语句,并说明为什么要改。

下一课进入 C 第 25 天函数入门:先学习简单函数的定义与调用,再逐步理解整数参数与返回值。