织梦保险网站源码,推广做网站莱芜,网店平台排名,网站前置审批 查询博客主页#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 #x1f4af;前言#x1f4af;题目描述输入格式输出格式输入输出示例 #x1f4af;两种代码实现及其对比我的代码实现代码分析优点与不足 老师的代码实现代码分析优点与不足 #x1f4af;两种实现的对… 博客主页 [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 前言题目描述输入格式输出格式输入输出示例 两种代码实现及其对比我的代码实现代码分析优点与不足 老师的代码实现代码分析优点与不足 两种实现的对比总结优化与拓展优化后的代码优化点 小结 前言
在学习C编程的过程中实践题目往往是提高编程思维和熟悉语法的有效方法。本次我们讨论了一道关于球弹跳高度和总路程的计算题目分析了题目要求以及两种不同的解法。通过对比代码设计和逻辑实现我们总结出优化方法并进一步拓展相关编程知识。本文将以完整的结构带领读者梳理这道题目的思路、实现和优化方向。 C 参考手册 题目描述
B2076 球弹跳高度的计算
题目要求如下
一球从一定高度整数高度单位为米自由下落每次落地后反弹回原高度的一半。经过 10 次落地后计算
球在第 10 次落地时共经过多少米的总路程第 10 次反弹的高度是多少
输入格式
输入一个整数表示球的初始高度。
输出格式
输出包含两行
第 10 次落地时共经过的米数保留小数。第 10 次反弹的高度保留小数。
输入输出示例
输入
20输出
59.9219
0.0195313两种代码实现及其对比
在本次学习中我们首先通过学生的代码完成了对题目逻辑的实现。随后又参考了老师的代码。两种解法都满足了题目需求但在变量使用、循环设计等细节上有所差异。下面我们分别分析两种代码的逻辑并总结其优缺点。
我的代码实现
以下是我的代码实现
#include iostream
using namespace std;int main() {int h;cin h; // 输入初始高度double s h, h2 h * 1.0 / 2; // 初始化总路程和第一次反弹高度int i 0; // 循环计数器do {s h2 * 2; // 每次反弹产生的路程h2 / 2; // 反弹高度减半i; // 计数器递增} while (i 9); // 循环 9 次第 1 次下落已单独处理cout s endl; // 输出总路程cout h2 endl; // 输出第 10 次反弹高度return 0;
}代码分析 变量定义 h表示球的初始高度输入后赋值给变量。s记录总路程初始值为第一次下落的高度。h2记录当前反弹高度初始值为第一次反弹高度即 h / 2。 逻辑结构 使用 do-while 循环确保至少执行一次循环。在每次循环中 累加当前反弹的路程 h2 * 2下落一次、反弹一次。更新 h2 为下一次反弹高度减半。 循环 9 次配合初始的第 1 次下落共计 10 次。 输出 总路程保存在 s 中。第 10 次反弹的高度保存在 h2 中。
优点与不足 优点 程序逻辑清晰分步骤计算。使用浮点类型 double能够处理小数精度问题。 不足 使用了额外变量 h2略显冗余。do-while 循环的计数逻辑不够直观计数从 0 开始循环 9 次。缺乏对输出精度的控制。
老师的代码实现
以下是老师提供的代码实现
#include iostream
using namespace std;int main() {double h 0; // 初始化 h 为 0接收输入的高度cin h;int i 1; // 循环计数器从第 1 次开始double total h; // 总路程先加上第一次下落的高度do {h / 2; // 反弹高度减半total h * 2; // 加上反弹两次的路程i; // 次数 1} while (i 9); // 循环到第 9 次为止共 10 次落地cout total endl; // 输出总路程cout h / 2 endl; // 输出第 10 次反弹高度return 0;
}代码分析 变量定义 h表示当前高度初始为输入高度。total记录总路程初始为第一次下落的高度。 逻辑结构 使用 do-while 循环计算剩余的 9 次落地。每次循环 高度减半。累加当前反弹的路程 h * 2。 循环计数从 1 开始直到第 9 次。 输出 第 10 次反弹高度直接通过 h / 2 计算无需额外变量。
优点与不足 优点 变量定义更简洁直接使用 h 表示当前高度。计数逻辑更符合人类直觉从 1 开始计数。避免了不必要的变量。 不足 缺少对输出精度的设置。 两种实现的对比总结
比较维度我的代码老师的代码变量使用使用额外变量 h2 表示反弹高度直接复用 h 表示当前高度计数逻辑从 0 开始计数循环 9 次从 1 开始计数循环 9 次输出精度未控制输出精度未控制输出精度代码简洁性变量定义较多逻辑稍显冗余变量少逻辑更清晰 优化与拓展
结合两种实现的优点可以进一步优化代码
优化后的代码
#include iostream
#include iomanip // 引入格式化输出库
using namespace std;int main() {double h; // 球的初始高度cin h;double total h; // 总路程先加上第一次落地的高度int i 1; // 计数器从第 1 次开始do {h / 2; // 当前反弹高度为上一高度的一半total h * 2; // 累加上下两次路程i; // 次数 1} while (i 9); // 循环至第 9 次结束// 设置输出精度cout fixed setprecision(6);cout total endl; // 总路程cout h / 2 endl; // 第 10 次反弹高度return 0;
}优化点
使用 fixed 和 setprecision 控制输出精度保证小数点后一致位数。避免了冗余变量直接使用 h 表示当前高度。计数逻辑更直观从 1 开始计数。 小结 本次讨论中我们通过一道关于球弹跳高度的计算题目探讨了如何用 C 编程实现数学逻辑。通过分析和优化我们发现
代码的简洁性和可读性很重要 减少冗余变量、优化计数逻辑能让代码更清晰。输出精度控制 使用 setprecision 是处理小数输出的重要技巧。逻辑设计与数学结合 通过循环和递归更新变量实现题目中数学模型的计算。 学习C是一段既充满挑战又令人收获颇丰的旅程。作为一门历史悠久且广泛应用的编程语言C不仅提供了强大的功能还以其复杂性闻名。因此在学习这门语言的过程中我深刻体会到了它的深度和广度同时也总结了一些心得希望对未来的学习者有所帮助。
初识C从基础开始
在接触C之前我对编程的了解仅限于一些基础的概念例如变量、循环和条件语句。C的学习从这些最基本的部分开始帮助我夯实了编程的基础。C的语法严格这在一开始可能会让人感到不适应但也正是因为这种严格性它迫使我养成了良好的编程习惯。例如必须明确变量的类型让我更注重程序的逻辑性和可读性。
掌握面向对象编程思想
C最具特色的部分之一就是面向对象编程OOP。初次接触类和对象时我对这种编程范式感到新奇而又困惑。OOP的核心思想是将现实世界中的事物抽象为类通过类的实例化生成对象从而以更直观的方式管理程序的复杂性。
我记得刚开始学习类时写了一个关于学生管理系统的小程序。通过定义学生类设置姓名、学号和成绩等属性再为类添加一些方法如打印信息和计算平均分我逐渐理解了OOP的实际应用价值。这种封装、继承和多态的思想让我感受到C的强大也让我认识到软件设计中的灵活性。
理解指针与内存管理
如果说C中有什么让我印象最深刻且花费最多时间去理解的内容那一定是指针和内存管理。指针是C的一大特色同时也是许多初学者的难点。我在学习过程中经常因为指针的误用导致程序崩溃甚至遇到一些难以调试的问题。
为了更好地理解指针我专门阅读了一些资料并亲手编写了许多练习程序。例如我通过编写动态数组、链表和二叉树等数据结构深刻体会到了指针在动态内存分配中的重要性。通过这些实践我不仅掌握了指针的使用还学会了如何使用new和delete进行内存管理以及如何避免内存泄漏。
学习STL的便利性
C的标准模板库STL是学习过程中的一个亮点。STL提供了许多现成的数据结构和算法例如向量vector、队列queue、栈stack以及哈希表unordered_map等。在学习STL之前我花了大量时间自己实现这些数据结构而STL的出现大大简化了我的开发过程。
通过学习STL我认识到了高效代码的重要性也学会了如何快速解决问题。例如在一次编程竞赛中我需要快速实现一个排序功能而STL中的sort函数帮助我节省了大量时间。与此同时我还了解了STL背后的一些实现原理例如迭代器的使用和时间复杂度的分析。
错误与调试不可避免的成长
在学习C的过程中错误和调试是不可避免的。无论是编译错误还是运行时错误几乎每次编写代码时都要面对各种各样的问题。这让我一开始感到沮丧但随着经验的积累我学会了如何分析错误信息并快速定位问题。
调试工具是我的好帮手。例如使用gdb调试器让我能够逐行检查代码的执行过程而现代的集成开发环境IDE如Visual Studio则提供了更直观的调试界面。此外我还养成了在代码中添加日志和断点的习惯这些技巧帮助我在处理复杂问题时更加得心应手。
提升编程效率的技巧
随着对C的深入学习我也总结了一些提升编程效率的技巧
模块化编程将代码分成多个文件使得每个模块专注于完成特定的任务从而提高代码的可读性和可维护性。注重代码规范遵循一致的命名规则和缩进风格让代码更易于理解。利用C11/14/17的新特性例如auto关键字简化了变量类型的声明智能指针std::shared_ptr和std::unique_ptr帮助更安全地管理内存。多阅读优秀代码通过阅读开源项目中的代码我学到了很多实用的编程技巧和设计模式。
总结与展望
学习C不仅让我掌握了一门编程语言更让我养成了严谨的思维方式。在这个过程中我学会了如何从问题中总结经验如何不断优化自己的代码以及如何以更高效的方式解决实际问题。
未来我希望能够继续深入学习C的高级特性例如模板编程和多线程开发同时也希望能够将C应用于更多实际项目中如游戏开发、嵌入式系统和高性能计算。我相信通过不断的实践和学习我将在C的世界中发现更多的乐趣和可能性。
总之C是一门值得花时间深入学习的语言。尽管它的学习曲线较陡但正是这种挑战让我更加热爱编程也让我在每次克服困难后获得了巨大的成就感。