资源描述
苏州科技学院成人教育学院本科生毕业设计(论文)
FLASH动画的C语言算法演示
摘 要
C语言作为一种计算机程序设计语言,既具有高级语言的特点,又具有汇编语言的特点,因此在C语言程序的教学中,各类排序算法的使用常常令初学者感到困惑,要突破这个难点,让C语言的学习直观生动起来,使用FLASH动画技术设计各种算法的动态演示效果,实现把复杂问题形象化的动画教学,激发学生的学习兴趣。
关键词: C语言;排序算法;FLASH动画
C language algorithm demo of Flash
Abstract
Features C language as a computer programming language, with both high-level language, but also has the characteristics of assembly language, so teaching C language program, the use of various types of sorting algorithms so that beginners often confused and difficult to break this let C language learning to life visually, using various algorithms FLASH animation design dynamic presentation effects, to achieve animation to visualize complex problems of teaching to inspire students' interest in learning.
Key words: Programming;C Sorting;FLASH
目录
第一章 绪论 1
1.1 开发选题背景 1
1.2 开发研究的目的意义 1
1.3 常用动画软件比较 1
1.3.1 FLASH 2
1.3.2 Fireworks 2
1.3.3 3D MAX 2
1.4 开发工具简介 3
1.4.1 Turbo C 3
1.4.2 Flash CS6.0中文版 4
第二章 总体设计 5
2.1 C语言程序设计中的“排序” 5
2.2 排序算法设计 5
2.2.1 交换法 6
2.2.2 选择法 6
2.2.3 插入法 8
2.3 FLASH动画设计 9
2.4 算法动画的制作流程 10
2.4.1 前期策划和撰写剧本 10
2.4.2 制作动画 10
2.4.3 后期处理 11
2.4.4 发布 11
第三章 详细设计 12
3.1 C语言程序设计 12
3.1.1 冒泡排序法设计 12
3.1.2 简单选择法设计 13
3.1.3 直接插入法设计 13
3.2 FLASH动画设计 14
3.2.1 主场景制作 14
3.2.2 制作欢迎界面和制作姓名图层 14
3.2.3 制作算法图层 15
3.3.3 制作数字动画图层 15
3.3.4 制作动画 15
第四章 总结 16
第六章 结束语和致谢 17
参考文献 18
18
第1章 绪论
1.1 开发选题背景
C语言作为一种计算机程序设计语言,既具有高级语言的特点,又具有汇编语言的特点,因此它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言。
由于C语言功能丰富,表达能力强,使用方便,应用广泛,因此,许多高校都把C语言作为计算机及相关专业学生学习程序设计的入门课程。但是,由于C语言的数据类型比较多,语法结构多样复杂,表达式灵活多样,因此,对于许多初学者来说,要真正的掌握好C语言并非易事,特别是函数的使用,各种排序算法的设计等等,如果在教学中,还是使用传统的黑板粉笔教学模式,很难达到理想的教学成果。
1.2 开发研究的目的意义
随着多媒体教学的不断发展,特别是动画在教学中的应用,因此本文考虑运用动画软件来实现C语言常用算法的教学演示,如此一来,既能够使初学者生动理解算法本身,又可以增加大家的学习兴趣,从而提高学习的效率。
本文通过对比几种动画软件工具,选择合适的动画制作软件,来实现C语言各种排序算法的演示,从而使原本生涩枯燥的排序算法一目了然,对学生的学习起到抛砖引玉的作用。
1.3 常用动画软件比较
考虑到动画软件的实用性和常用性,对比以下三款动画制作软件:
l FLASH
l Fireworks
l 3D MAX
1.3.1 FLASH
Flash是Adobe公司出品的一款专业动画制作软件,具有强大的矢量制作功能和灵活的交互功能,其功能强大,操作简单,作品广泛应用于网页、影视、动漫、游戏等各种领域,是同类软件中的佼佼者,受到众多的动画制作爱好者的好评与青睐。
因此,FLASH易学易掌握,操作简单,适用广泛,常常用于制作一些简单的演示类动画,丰富的动画格式选择,也使得用FLASH软件制作的动画与其他软件,例如OFFICE软件,可以产生很好的交互。
1.3.2 Fireworks
Fireworks是Macromedia公司发布的一款专为网络图形设计的图形编辑软件,它大大简化了图形设计的工作难度,无论是专业设计家还是业余爱好者,使用Fireworks都不仅可以轻松地制作出十分动感的GIF动画,还可以轻易地完成大图切割、动态按钮、动态翻转图等,因此,对于辅助网页编辑来说,Fireworks将是最大的功臣。
但是,Fireworks作为Macromedia家族的一员,三剑客之一,它的主要任务和特色就是制作矢量图为网页服务,因此,Fireworks制作的动画只是GIF图片格式的,严格来说,根本算不上动画。
总的来说,Fireworks更加适用于制作网页格式(GIF)的动画。
1.3.3 3D MAX
3D Studio Max,常简称为3DS Max或MAX,是Discreet公司开发的(后被Autodesk公司合并)基于PC系统的三维动画渲染和制作软件。其前身是基于DOS操作系统的3D Studio系列软件。
3D MAX是一款三维动画制作软件,3D MAX在动画方面的主要功能是做三维动画,如人物角色,游戏场景,游戏模拟,如CS场景,效果图的游走动画等。
因此来说,3D MAX是一款制作比较专业3D动画的软件。
1.3.4 动画软件的选择
通过以上对三种常用动画软件的比较,可以清楚的看到,Fireworks适用于制作GIF格式的动画,3D MAX多用于制作3维动画,对于我们需要做的算法演示类动画,选择用FLASH来制作,利用FLASH强大的影片编辑特征,能够很好的达到效果。
1.4 开发工具简介
1.4.1 Turbo C
Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。
Turbo C不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。
“Turbo C++ 3.0”的新功能:
1) Turbo C++ 3.0不仅能设计和编译C程序文件,而且修正了Turbo C 2.0中存在的一些Bug(如:不能正常使用float数组等问题)。
2) Turbo C++ 3.0还支持多窗口操作,窗口间可以快速切换。
3) 完全支持鼠标选择、拖放和右键操作,很好地照顾了习惯于图形操作环境的用户。
4) 建立了即时帮助系统,只需要选定关键字后按“Ctrl+F1”即可查看详细的帮助说明,并且每个函数都具有完整的示例解释说明,只需要复制到新文件即可运行,无论对C语言初学者还是C++高手都是不错的实例教材。
5) 可以自定义语句按照语法高亮多色显示,令代码编写、程序查错时更直观方便。
6) 程序编辑器的查找、替换等编辑功能更方便易用。
7) 建立和管理Project项目更方便容易。
1.4.2 Flash CS6.0中文版
Flash是Adobe公司出品的一款专业动画制作软件,具有强大的矢量制作功能和灵活的交互功能,其功能强大,操作简单,作品广泛应用于网页、影视、动漫、游戏等各种领域,是同类软件中的佼佼者,受到众多的动画制作爱好者的好评与青睐。
首先,FLASH中使用了矢量图形和流式播放技术,所以生成的动画(.swf)文件非常下,易携带和传输,这是FLASH软件的最大优点;其次,FLASH具有强大的影片编辑特征,影片的剪辑之间可以相互嵌套且互不干扰的独自播放,这使得在课件开发中可以清晰的划分不同的模块并实现重用,这样可以有效地提高编程的效率;此外,FLASH中的ActionScript是完善的面向对象的编程语言,有利于程序的开发;最后,FLASH程序与平台无关,因而由FLASH开发的课件可以方便地用于不同的平台中而无需做较大的改动。
第二章 总体设计
本文是以FLASH动画来实现C语言排序算法的动态演示的过程,,包括实现三种排序算法的动画演示。考虑到当今在高校教学授课中OFFICE软件的普遍使用,特别是PowerPoint软件,因此Flash动画制作好以后,可以直接将其插入到PPT演示文稿之中,最后以PPT的形式呈现出来。
2.1 C语言程序设计中的“排序”
排序是将同类型的数据集合按递增(升序)或者递减(降序)顺序排列的过程。
通常来说,排序有两种情况:
l 对单独的一组数进行排序,这种情形很简单,例如对若干整型或实型数据排序,或者对若干字符排序。在这种情形下,排序的对象只有一个,当需要交换时,彼此交换的数据项也只有一个。
l 排序的对象可能含有多个数据项,例如学生的信息,包括姓名、学号、数学成绩、语文成绩、英语成绩以及平均分等。这些信息可能用不同的数组来存储,也可能用数据结构来构造。无论使用哪种方式,需要排序的关键字总是其中的一小部分的数据项,例如按照平均分排序,这时“平均分”就是排序的关键字,而其他的数据项则无须排序。当需要进行位置交换时,彼此交换的应该是整个数据项。
2.2 排序算法设计
常用的排序算法有冒泡法(沉底法)、选择法、插入法、希尔法(shell)等,但是这些算法基本上可以分为以下三类:
l 交换法
l 选择法
l 插入法
2.2.1 交换法
这里假设有一叠带有数字的卡片等待排序,那么交换法就是将这堆卡片全部放到桌面上,并且有数字的一面朝上,然后来回的扫视,把不符合顺序的卡片互相交换位置,直到所有的卡片全部按照顺序排列好为止。
接下来,我们来介绍最典型的交换排序算法——冒泡排序法。
假设将待排序的数组元素定义为a1,a2,a3,…,an。那么,冒泡法排序的基本思想如下:
首先,定义为升序,那么从a1开始,依次比较两个相邻的数组元素,若ai>ai+1,则交换两个元素的位置,否则,不进行交换。这样,经过一遍处理之后,其中数值最大的元素已经移到了第n各位置上了。然后,对剩下的n-1个数组元素进行第2遍排序,重复上述处理过程,这样,第2遍之后,前n-1个元素中数值最大的元素就被移到了第n-1个位置上了。如此重复下去,直到排好了所有的元素的位置为止。整个排序的过程需要进行k(1≤k≤n)遍的冒泡排序。因此,判别冒泡排序结束的条件应该是“在一遍排序过程中没有进行过交换记录的操作”。
下面,我们用一个图形来完整的演示冒泡法排序。
图1冒泡排序法
2.2.2 选择法
这里假设有一叠带有数字的卡片等待排序,那么选择法就是将这堆卡片全部放到桌面上,并且有数字的一面朝上,然后来回的扫视,假设要求为升序排列,那么第一次从这些卡片中挑选出号码最小的一张,拿在手中,第二次再从剩下的那些卡片中挑选出最小的一张拿在手中,并放在第一张的后面,依此类推,重复这个过程,直到最后一张,这样,手中拿着的就是按照升序要求排好序的一叠卡片。
选择排序法的交换形式不同于交换法,它每次是在进行完一遍比较之后,才进行一次交换,因此从这个角度来说,选择排序法的执行效率要高于交换法。常见的选择排序法有简单选择排序、树形选择排序和堆排序等。
下面我们来介绍最常用的选择排序算法——简单选择排序法。
我们用一个图形来直观完整的演示简单选择法排序。
图2简单选择排序法
在简单选择排序过程中,所需要移动记录的次数比较少。在最好的情况下,即待排序记录初始状态就已经是正序排列时,则不需要移动记录了。
2.2.3 插入法
这里假设有一叠带有数字的卡片等待排序,并且全部卡片都拿在手中,那么插入法就是每次抽出一张卡片把它放到桌面上,有数字的一面朝上,每次把手中的卡片往桌面上放时,总是把它插入到大小合适的位置上,重复这个过程,直到手中的卡片全部放到桌面上为止,那么这时,在桌面上摊好的卡片就是按照要求排列有序的。
综合考虑,插入法排序有更好的排序效率。常用的插入排序法包括:直接插入排序法,二分插入排序法(又称折半插入排序法),链表插入排序法,希尔排序法(又称缩小增量排序法)。
接下来,我们来介绍最普遍的插入排序算法——直接插入排序法。
直接插入排序法的思想是:
首先,取出数组的第一个元素,然后从数组中取出第二个元素,那它与前面的第一个元素进行比较,然后将它插入到合适的位置。之后继续循环,再从数组中取出第三个元素,拿它与前面已经排好序的第二个元素和第一个元素比较,并将其插入到合适的位置,重复这个“取出——比较——插入”的过程。这种直接插入排序法适用于少量数据的排序。
下面,我们用一个图形来完整的演示直接插入法排序。
图3直接插入排序法
2.3 FLASH动画设计
通过运用FLASH动画,来直观的演示三种C语言常用排序算法的具体实现过程。
简单来说,就是将三种算法的图片演示过程变成更加容易理解的动画演示过程,方便理解和记忆。
具体的动画设计思想,框图如下所示:
图4 动画演示框图
2.4 算法动画的制作流程
对于制作整个算法演示的动画来说,制作动画的过程,可以简单分为以下几个步骤。
2.4.1 前期策划和撰写剧本
根据需求,要通过FLASH动画来清楚的演示冒泡排序法、简单排序法和直接插入排序法,首先必须有一个完整的动画的演示方案,如何通过直观的动画演示,能够使初学者生动理解C语言算法本身,又可以增加大家的学习兴趣,从而提高学习的效率。
2.4.2 制作动画
在完成剧本后,就可以按照剧本要求,将需要表达的剧情通过镜头语言表达出来。完整的通过镜头的不断切换,来表现整个算法演示的全过程。
整个过程包括:
建立和设置FLASH影片文件
动画编排
测试动画效果
2.4.3 后期处理
后期处理的主要任务就是,为动画添加各类不同的特效,添加背景音乐等。
2.4.4 发布
发布是FLASH动画创作的特有步骤,主要是优化文件大小,提高整个FLASH动画的运行效率等。
第三章 详细设计
3.1 C语言程序设计
根据排序算法的不同,C语言程序设计分为以下三部分:
l 冒泡排序法设计
l 简单选择法设计
l 直接插入法设计
3.1.1 冒泡排序法设计
#include <stdio.h>
main()
{
int i,j,t;
int flag=0;
ina a[8]={25,2,38,42,8,13,60,16};
for(i=0;i<8;i++){
flag=0;
for(j=0;j<8-i;j++) {
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=1;
}
}
if(flag==0) break;
}
for(i=0;i<8;i++) printf("%d\n",a[i]);
printf("\n");
}
3.1.2 简单选择法设计
#include <stdio.h>
main()
{
int i,j,k,t;
ina a[8]={25,2,38,42,8,13,60,16};
for(i=0;i<7;i++){
k=i;
for(j=i+1;j<8;j++) {
if(a[k]>a[j]) {
k=j;
}
}
if(i!=k) {
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<8;i++) printf("%d\n",a[i]);
printf("\n");
}
3.1.3 直接插入法设计
#include <stdio.h>
main()
{
int i,j,t;
ina a[8]={25,2,38,42,8,13,60,16};
for(i=1;i<8;i++){
t=a[i];
for(j=i-1;j>=0;j--) {
if(t<a[j]) {
a[j+1]=a[j];
}
a[j+1]=t;
}
}
for(i=0;i<8;i++) printf("%d\n",a[i]);
printf("\n");
}
3.2 FLASH动画设计
3.2.1 主场景制作
新建一个FLASH文档,新建主场景图存,用于表现主场景内容,并命名这个图存为“Beijing”。
将用于背景图层的图片“MathG.JPG”导入到库中,并拖到舞台中央。
3.2.2 制作欢迎界面和制作姓名图层
在主场景制作完成之后,分别新建图层“图层2”和“图层3”。
“图层2”用于制作欢迎界面,并输入相应的文字“C语言算法演示”,利用分离命令,将文字逐个分开,并制作逐个显示的动态文字效果。
“图层3”用于制作制作人姓名文字,手动在图层中添加“姓名”并增加背景显示,同时为这个图层添加滤镜的动画效果,使得姓名的显示逐步由模糊变得清晰。
3.2.3 制作算法图层
首先,建立一个新图层,命名为“maopao”,用于制作冒泡算法的演示。添加演示冒泡算法所需要的各类提示。
其次,建立一个新图层,命名为“选择”,用于制作选择算法的演示。添加演示选择算法所需要的各类提示。
最后,建立一个新图层,命名为“charu”,用于制作插入算法的演示。添加演示插入算法所需要的各类提示。
3.2.4 制作数字动画图层
首先,为数字——25、2、38、42、8、13,制作用于制作动画演示的图片文件(用OFFICE软件制作完成),然后导入到FLASH库中,等待使用。
分别将导入到库中的数字图片,手动转化为图形元件,并命名。
其次,为每个数字显示分别建立相对应的图层,命名为“25”、“2”、“38”、“42”、“8”、“13”。
3.2.5 制作动画
根据三个算法的不同,通过对于数字图层的调整,建立用于动画显示的各个步骤,并在其中,运用添加“补间动画”的形式,使得在算法的演示过程之中,穿插各类不同的动画效果。
第四章 总结
本次的毕业设计到此已经顺利结束。通过FLASH来制作动画,来实现C语言排序算法的直观演示。
通过前期在图书馆搜集相关资料,与指导老师多次讨论学习,对自己的提高很大,因此,制作完成的FLASH动画基本实现了动画演示的过程,实现了设计之初的目标,同时提高了自己的自学能力,在遇到问题时,通过各类方法,包括查阅资料,与老师沟通,上网学习等,逐步、各个解决,终于顺利完成设计,感到收获颇丰,来之不易。
第六章 结束语和致谢
在此,首先我要特别感谢我的指导老师!感谢老师给予我悉心的关怀与指导。老师认真负责的工作态度、严谨的治学风格、亲切平易近人的性格,使我深受启发,正是在老师的督促和耐心的指导下,才让我将毕业设计的各方面工作完成得最好。
最后,感谢同学们在制作毕业设计期间,给我的无私的帮助。曾经遇到过很多疑难,正是与同学们的相互探讨使我获益匪浅,才能让我继续前进的脚步。短短几个月时间内,除了学会了FLASH的使用外,更重要的是学到了兢兢业业,奋发向上的精神!这种精神将是我今后人生前进道路上的一种力量,所以我再次衷心地感谢给予我很多帮助的老师和我的同学们,谢谢你们这段时间给我的关心和帮助!
参考文献
1 顾治华 陈天煌编著. C语言程序设计 第2版. 机械工业出版社,2012
2 罗永龙 方 群著. C语言程序设计. 科学出版社,2013
3 李丽娟著. C语言程序设计教程(第四版). 人民邮电出版社,2013
4 朱丽兰 郭磊著.Flash动画设计与制作项目教程. 清华大学出版社, 2012.
5 陈志民著.Flash CS6标准教材. 北京希望电子出版社,2013
6 张晓景 柳立言著.Flash CS6 完全自学一本通. 人民邮电出版社,2013
7 谭浩强.C程序设计[M].清华大学出版社. 2001
8 陈冰.Flash第一步——Actionscript编程篇.清华大学出版社,2006
9 曹佳丽,陈显波译. Flash创意课. (英)未来出版社,2012
10 吕冰等编著. 中文版Adobe Flash教程. 清华大学出版社,2012
展开阅读全文