1. 项目概述
这个C语言编程练习集包含了五个典型的算法问题,涵盖了基础物理模拟、数字处理、素数判断和字符串操作等多个方面。作为哈工大的编程练习,这些题目很好地体现了C语言在实际问题中的应用场景,也考察了学生对基础语法、循环控制、函数定义和数学运算的掌握程度。
我在实际教学中发现,这类基础编程练习对于培养编程思维至关重要。通过解决这些看似简单的问题,学生能够建立起对程序逻辑的直观理解,为后续更复杂的算法学习打下坚实基础。下面我将逐一分析每个问题的解题思路和实现细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心问题解析与实现
2.1 自由落体运动计算(Q559 & Q6442)
这两个问题都涉及自由落体运动的物理模拟,区别在于初始高度和落地次数的设定。核心算法思路是:
-
物理模型分析:
- 第一次下落:单程运动,距离=初始高度
- 后续每次:反弹高度减半,形成往返运动(上升+下降)
- 第n次落地时的总距离 = 初始高度 + 2*(h/2 + h/4 + ... + h/2^(n-1))
-
代码实现要点:
c复制float sum = high; // 初始下落距离
float current_height = high;
for(int i=1; i<n; i++) {
current_height /= 2;
sum += 2 * current_height; // 往返距离
}
注意:循环次数应为n-1次,因为第一次下落已经单独计算。这是初学者常犯的错误之一。
- 类型转换问题:
题目要求输入为整数,但计算过程需要浮点数精度。在C语言中,整数相除会丢失小数部分,因此必须进行显式类型转换:
c复制float current_height = (float)high; // 强制类型转换
2.2 数字首位提取(Q2447)
这个问题考察数字处理和绝对值运算,关键点在于:
-
算法思路:
- 对于正整数:不断除以10,直到商小于10
- 对于负整数:先取绝对值,处理方法同上,最后恢复符号
-
数学函数应用:
使用math.h中的fabs()函数处理负数情况:
c复制#include <math.h>
// ...
