慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

C 语言天罡三十六题 - 基础九题(2021-4-10)

许多同学在学完 C 语言之后,感觉会比较迷茫,不知道该怎样进行下一步练习。接着学《数据结构》像听天书一样,无论怎么努力都学不通透。这都是因为缺少足够的练习所致。本文总结出有限的 36 个练习程序,能独立完成这些程序,再学《数据结构》,会让你有醍醐灌顶的感觉。

这些题目的难度是递增的。如果觉得前面的题目比较简单,可以直接跳过。练习的目标,是可以独立写出代码量超过 2000 行的项目。在这个基础上,再学习数据结构、面向对象等进阶内容,才能真正理解其意义。

很遗憾,这些题目没有标准答案。每个题目都可以根据自己的理解来完成,完成后可以和其他人交换代码相互学习,以期提高。

这 36 个练习程序我会根据大家的反馈逐步完善,标题中的日期就是当前文档的最后更新日期,希望大家根据最新版本练习。

题目分为四组:

祝大家早日完成封神九题,成为众人仰慕的大神!

怎样开始

请先阅读正文第一题“画七巧板图案”。

如果你知道怎样编码实现,只是觉得写代码稍微有点繁琐,那么你可以忽视以下步骤,直接开始写程序。

如果你不知道怎样做第一题,请先逐步完成以下步骤。不要纠结用什么操作系统、用什么编译器、能否用 VSCode 等问题,请务必逐项完成以下任务:

  1. 使用 Win10 或 Win7 或 WinXP 系统。
  2. 安装 VC2008 或 VC2010 或 VC2013 Express版,推荐使用 VC2010 Express,下载地址: https://appzip.cn/w/vc2010 ,补丁包 https://appzip.cn/w/vs2010sp1
  3. 安装 EasyX 绘图库: https://easyx.cn
  4. 打开 VC2010,创建一个新项目,并成功画一个圆。具体操作可以参考: https://easyx.cn/how-to-vc2010
  5. 修改上一步的代码,实现画一个矩形、画一条线等。相关语句请参考: https://docs.easyx.cn

至此,环境配置和基本使用学习已经完成,可以开始下面的练习。

友情提示

在没有完成前面的题目时,不要看后面的题目,避免被吓到。每个题目都只比前一个题目难一点点,要是直接看后面的题,难度陡增,怕是会让你很受打击。

基础九题

1. 天魁星

任务:画七巧板图案。

七巧板是一种古老的中国传统智力玩具,其历史至少可以追溯到公元前一世纪,到了明代基本定型。明、清两代在中国民间广泛流传,清陆以湉《冷庐杂识》卷一中写道:近又有七巧图,其式五,其数七,其变化之式多至千余。体物肖形,随手变幻,盖游戏之具,足以排闷破寂,故世俗皆喜为之。” 在18世纪,七巧板流传到了国外。李约瑟说它是东方最古老的消遣品之一,至今英国剑桥大学的图书馆里还珍藏着一部《七巧新谱》。

现在,用基本的画线语句,画出任意一个七巧板的图案。例如,可以是下图这样:

画任何自己从网上搜到的七巧板图案都行。图案的整体大小、颜色填充等,自己设计。

可以使用 line 函数画线,使用 setfillcolor 和 floodfill 函数实现颜色填充。

难点:如果最大的三角形的直角边的长度为 100,那么斜边的长为 100 * sqrt(2),于是很多坐标的计算就会显得有些繁琐。怎样使代码看上去更漂亮,是个学问。剩下的,就是基本的坐标学习和对耐心的练习。

2. 天罡星

任务:用五条直线画出一个正五角星。

五角星是一个古老的符号,在军队、国旗、五行图,甚至在游戏里,都经常见到。该任务要求绘制的五角星为正五角星,由 5 条直线构成。

难点:计算五角星的 5 个顶点坐标是该题目的重点。5 个顶点均匀分布在五角星的外接圆上,利用三角函数可以轻松求得圆周上的五等分点坐标。这个计算方法在许多程序中都会用到。

3. 天机星

任务:画标准国旗(框线图)。

中华人民共和国国旗法:中华人民共和国国旗是五星红旗。中华人民共和国国旗是中华人民共和国的象征和标志。每个公民和组织,都应当尊重和爱护国旗。

在该任务中,要求精确地计算出国旗中的每个元素的大小、位置、旋转角度等,并绘制出如下框线图:

难点:需要根据网格精确地计算每个小五角星的旋转角度。同时,将绘制五角星的代码封装为函数,方便反复调用。

4. 天闲星

任务:多边形与圆。

先清空屏幕,在屏幕中央输出数字 3,并画一个正三角形。

然后延时 200 毫秒,清空屏幕,在屏幕中央输出数字 4,画一个正四边形。

再延时 200 毫秒,清空,输出数字 5,画正五边形。

……

延时 200 毫秒,清空,输出数字 50,画正 50 边形。

在整个过程中,请确保若干正 n 边形的外接圆的半径相同。

可以使用 Windows API 函数 Sleep 简单实现延时功能。

可以使用 swprintf 函数实现将整型变量格式化输出至 wchar_t 字符串,通过 textwidthtextheight 计算出字符串占用的空间大小,再通过 outtextxy 函数将字符串输出至屏幕中央位置。

5. 天勇星

任务:模拟 45 度反弹的小球。

在屏幕里画一个大矩形。

在矩形内的随机位置生成一个小球,小球沿着某个 45 度方向匀速前进,碰到矩形边框后做 45 度反弹,反弹后速度不减,再次碰撞后再次反弹,如此往复循环。模拟这个动画过程。

6. 天雄星

任务:模拟物理弹跳的小球。

从屏幕左边向右抛出一个小球,自己指定小球 x 方向和 y 方向的初始速度。

小球在 y 方向的速度受重力加速度影响。小球碰到底部以及两侧边框时会反弹,反弹时 x 方向和 y 方向的速度会受阻力影响。模拟这个动画过程,直到小球停止运动。

7. 天猛星

任务:画正弦波、等比螺旋线、等差螺旋线。

首先画出数学的二维坐标轴,并在坐标轴上相应的标出刻度。

然后,用红色画出一条正弦波,用绿色画出一条等比螺旋线,用蓝色画出一条等差螺旋线。

8. 天威星

任务:模拟太阳、地球、月亮三个天体的运动。

画一个黄色的圆表示太阳。

画一个绿色的圆表示地球。地球以椭圆形轨道围绕太阳旋转。

再画一个黄色的小圆表示月亮,月亮以椭圆轨道围绕地球旋转。

模拟这三个天体运动的过程。

9. 天英星

任务:模拟指针形式的钟表。

自己设计一个钟表表盘并画出来,包括表盘上的刻度、数字等。

然后根据当前时间,画出时针、分针、秒针,并实现钟表的持续走时。

进阶九题

https://codebus.cn/yangw/a/36-tasks-g2

分享到

添加评论