MATLAB 在C 语言教学中的应用研究

2020-11-02 07:49彭石
现代计算机 2020年26期
关键词:圆盘C语言图形

彭石

(中山大学南方学院电气与计算工程学院,广州510900)

0 引言

多媒体技术的发展使教学活动发生了显著的变化,许多先进的教学设备和教学软件系统纷纷走进了今天的课堂[1],教师的地位在发生着悄悄的变化,为了提高教学效率,针对不同的课程选择合适的教学手段成为了教师要思考的问题。增强学生学习的积极性,活跃课堂的气氛,将教学内容变抽象为具体、变难懂为易懂,可以取得简明高效的教学效果。本文针对C 语言教学之中存在的具体问题,作了深入分析,提出了使用MATLAB 来辅助教学活动的方案[2],实践表明,该方案可以解决上述问题。

1 C语言和MATLAB的特点

C 语言和其它计算机语言相比,具有很多自己的特点。例如它有丰富的数据类型,有自己独特的运算符,如++,--,有功能强大又很神秘的指针和编译器;它还有许多和程式逻辑息息相关的操作是编译器定义加上去的,使惯于循序思考的学生容易不知所措,总之C语言具有自己独特的特性,对于没有相关背景的初学者,难度很大[3]。

强大的绘图功能是MATLAB 的特点之一,这是C语言不具备的。它提供了一系列的绘图函数,即使是初学的用户,只需要掌握一些基本参数就能得到所需图形[4]。此外,MATLAB 可以采用不同的坐标系,如直角坐标、对数坐标、极坐标等,它包含了许多制作动画和视频常用的函数,用户可以很方便的使用这些函数实现自己的目的而不必去思考具体的实现细节。

针对C 语言教学之中的种种问题,接下来本文将会结合具体案例进行仔细分析。

2 使用MATLAB解决C语言教学问题的案例

2.1 循环语句之for循环用法

循环结构可以将重复书写的代码的变得简单,用来描述重复执行某段过程的问题,这是程序设计中可以充分发挥计算机特长的程序结构,C 语言中主要包含四种循环,即goto 循环、while 循环、do while 循环和for 循环。

在MATLAB 中,最基本而且应用最为常见的绘图函数为plot,利用它可以在二维平面上绘制出各种曲线。为了说明for 循环的作用,本例子用MATLAB 绘制了5 个不同颜色的同心圆,图1 演示了使用for 循环绘制5 个同心圆的过程。

图1 使用for循环绘制的同心圆

其中,x 和y 是单个圆进行40 次采样的位置坐标数组,C 是设置颜色的数组,从图形可以看出,使用MATLAB 可以方便的绘制出不同色彩的图形方便学生理解,弥补了C 语言的不足。

2.2 函数递归之汉诺塔问题

函数递归是一种强大又复杂的编程技巧,它将大的问题分解为一组相似的小问题,每个小问题都有一个简单解。递归函数是会直接调用自身的一种函数,一般来说,递归函数反复调用自身直到问题最终解决。

“汉诺塔”是程序设计中一个经典的递归问题,是一个著名的益智游戏,描述如下:塔上有A、B、C 三根柱子和直径依次递减的空心圆盘,开始时A 柱子上的所有圆盘都按从大到小的顺序排列,通过每次移动一个圆盘到另一根柱子上,最终把所有圆盘移动到C 柱子上,过程中大的圆盘不能放在小圆盘上[5]。使用C 语言可以求出汉诺塔移动的过程,可是由于缺少绘图API,无法将整个运行流程动态的展现出来,因此本文采用了MATLAB 语言来编程实现这个问题。

首先是MATLAB 写的汉诺塔递归函数hanoi.m 文件,在这个函数里面引用了绘图函数arr.m。

其次是绘图函数文件arr.m,这个函数分别绘制了三个柱子上的圆盘放置情况,以及动态的变化过程,其中a,b,c 是三个存放盘子信息的数组,pause(2)是程序休眠;clf 代表清屏。

最后是程序启动的运行代码。

图2 使用MATLAB制作的汉诺塔演示动画

图形动画演示如图2 所示,左边是程序开始的截图,右边是程序运行结束的图形,从图形里可以看出,整个汉诺塔包含三根柱子,从左边挪到右边大概需要3分钟,层数越多,程序运行需要的递归次数越多,因而时间也越久。动画完整地展示了汉诺塔的运行流程,可以说MATLAB 让复杂的数学问题变得清晰易懂。

2.3 具体应用之动态规划问题

动态规划是求解决策过程最优化的数学方法,日常生活之中经常会碰到需要求解结果最优的问题,由于这类问题涉及到的技巧性,使用C 语言研究多阶段决策过程的优化问题,在各类编程竞赛和数学建模之中屡见不鲜[6]。最优化原理把多阶过程转化为一组简单的单阶段问题,利用各阶段之间的关系,逐个求解,这就是动态规划。

本文举一个经典的动态规划例子,下面有一组数字三角形,要求计算一条从顶部到底部的路径,使得路径上所经过的数字和最大,路径的每个点都只能往相邻的左下或右下走,求出这个最大路径的和即可,不需要具体的路径;三角形的行数介于1-100,各个点数字为0-99。

图3

这里简化程序的输入输出过程,直接使用给出的数据,构造一个模型可以适用于任意输入数据组合,算法的思想是先求解最下一行的最大路径值,接着逐行往上求解,使用MATLAB 编程如下所示:

图4 动态规划输入输出对比演示

用MATLAB 得到的结果如图4 所示,使用MAT⁃LAB 绘制矩阵图形,左边是输入的数据,右边是求得的结果数组;计算得到最终结果g 值为30,各阶的结果矩阵A2。左右对比可以很容易看出动态规划的求解过程以及递归过程,因此使用MATLAB 可以将复杂的数学问题变得清晰易懂,它可以在C 语言的教学过程之中起到十分重要的辅助作用。

3 结语

C 语言是一门抽象的程序设计语言,它作为开发语言被应用在不同的领域;它结构的复杂性和学习的独特性质,注定了初学者会遇到这样那样的问题,即使是具有一定编程经验的程序员,在遇到复杂的数学问题时候,往往也会一筹莫展。因此选择一种具有完整的图形界用户面和方便的编程接口的语言作为辅助教学开发工具,具有十分重要的作用,可以大大简化理解的难度和开发的复杂度,方便教学的顺利开展,为了解决这个问题,本文研究了使用MATLAB 语言来解决C语言教学之中遇到的一些问题,并且对具体的案例提出了解决方案,分析表明MATLAB 在C 语言的学习开发过程之中,具有十分重要的辅助作用,是课堂教学的重要工具。

猜你喜欢
圆盘C语言图形
Scratch制作游戏
“C语言程序设计”课程混合教学探索
基于C语言的计算机软件编程技术探究
中职C语言单片机课堂教学中的趣味性探讨
计算机原理中C语言的应用价值
奇怪的大圆盘
分图形
找图形
图形变变变
图形配对