C语言学习过程中几种常用的算法,计算机应用技术论文_第1页
C语言学习过程中几种常用的算法,计算机应用技术论文_第2页
C语言学习过程中几种常用的算法,计算机应用技术论文_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言学习过程中几种常用的算法,计算机应用技术论文内容摘要:C语言是一门构造化的程序设计语言,在解决实际问题时,除了把握扎实的基本语法知识,更重要的是要学习怎样编写程序。本文针对C语言程序设计课程实践教学中存在的问题,从算法设计的角度,对常用的递归算法,排序算法,迭代法,打擂台法,辗转相除法等进行描绘叙述和分析。设计程序不仅保证算法的正确性,还要考虑算法的质量。所以怎样编写高效且正确的程序是至关重要的。

本文关键词语:C语言;算法;程序设计;

著名计算机科学家Wirth提出算法+数据构造=程序。这一公式对于构造化设计语言是适用的[1]。算法是解决做什么和怎么做的问题,数据构造是加工对象。所以不了解算法就谈不上程序设计。随着教学内容的增加,程序设计的难度随之增大,对特定问题设计相应的算法尤为重要。利用C语言的知识在解决实际问题时,除了考虑算法和数据构造外,还应采用构造化程序设计的方式方法进行程序设计。

C语言程序设计作为大学生的一门基础必修课程,对提升大学生计算机编程能力至关重要,也是后续专业课程学习的先修课程。在C语言教学经过中,学生对程序设计往往显得力不从心,十分是在程序设计实验课上,对于一道程序难度不大的编程题,部分学生却不知道怎样下手去做。在教学经过中,于清[2]建议以算法优先并结合案例教学的形式开展C语言的教学。屈婉玲[3]对算法课程的教学改革进行的总结。其他学者对C语言设计的递归算法[4,5]、排序算法[6]等分别进行了研究。

结合个人的实际教学情况,本文对常见的几种算法进行分析。

1算法与分析

该课程教学中,牵涉的典型算法有递归算法,排序算法,迭代法,打擂台算法,辗转相除法等。

1.1递归算法

递归的概念是,在调用一个函数的经过中,直接或间接调用该函数本身。递归算法的执行经过分为回溯和递推两个阶段[1]。在第一个回溯阶段,把较复杂的问题求解到比原问题简单的一些问题。这个阶段,必需要有结束递归的条件。在第二个递推的阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂的解。

递归调用方式有直接递归调用和间接递归调用。常见应用于求解斐波那契数列[7]、汉诺塔问题[8,9]、树的遍历[10,11]、求阶乘(见示例1)等。

递归一般能够代替循环语句使用,固然程序构造优美,但执行效率较低,消耗损费计算机内存资源,难以阅读和维护[12]。当效率处在第一位的时候,还须慎重使用递归。

示例1:求阶乘

1.2排序算法

排序方式方法根据排序的规律可分为升序和降序。排序的方式方法[13,14,15]有很多,如希尔排序、堆排序、快速排序、冒泡排序、选择法排序等。在C语言课程教学中,主要介绍的是冒泡法排序和简单项选择择法排序两种。

冒泡法升序排列若干个数的基本思想:每次将相邻两个数比拟,将小的调在前头。排序算法如下(示例2所示):

S1:比拟第一个数与第二个数,若前者大于后者,则交换;然后比拟第二个数与第三个数;依次类推,直至第n-1个数和第n个数比拟为止,结果最大的数被安置在最后一个元素位置上;

S2:对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置;

S3:重复上述经过,共经过n-1趟冒泡排序后,排序结束。

示例2:对n个数使用冒泡法排序(升序)

简单项选择择法排序的思想是:先将n个待排序中的最小数与第一个数对换;再将剩余n-1个数中的最小数与第二个数交换;如此往复,找出一个未经排序的数中最小的一个。共比拟n-1轮结束。示例3所示:

示例3:对n个数使用选择法排序(升序)

冒泡法排序的效率不及快速排序和堆排序,花费大量的时间,但编写容易且稳定性高,可应用在规模较小的排序算法中。简单项选择择法排序所需移动记录的次数较少,稳定性好,算法速度慢。

1.3迭代算法

迭代法[16,17]是求解方程或方程近似根的一种常用的算法设计方式方法。例如用迭代法求,求平方根的迭代公式(示例4):

S1:设定一个x的初值x0;

S2:用上述公式求出x的下一个值x1;

S3:再将x1代入以上公式右侧的xn,求出x的下一个值x2;

S4:重复这一经过,直到前后两次求出的x之差的绝对值小于一个给定的精度。

示例4:设有两个值x0和x1,令x的初值x0=a/2。程序代码如下:

在迭代经过中,对方程有解或者无解时应加以区别对待。假如方程有解,但是迭代公式选择不恰当,或者迭代的初始近似根选择不合理,也会导致迭代的失败。假如方程无解,算法求出的近似根序列就不会收敛,迭代经过会变成死循环,所以在迭代之前应首先考察方程能否有解,并在编写程序时对迭代的次数加以限制。

1.4打擂台算法

该算法[1]应用于求解一维数组或二维数组若干个元素的最值问题。其思想是,将一组数据以为是介入打擂台的比赛者,先让第一个人站在台上,第二人上去与之比武,胜者留在台上。再上去第三个人,与台上的人(即刚刚的得胜者)比武,胜者留在台上,败者下台。以后每一个人都是与当时留在台上的人比武。直到所有人都上台比过为止,最后在台上的就是冠军。

示例5:设有一个整型M行N列的二维数组,找出其最大值

1.5辗转相除算法

求最大公约数能够用到辗转相除法[18],也称欧几里德法。设有两整数a和b:

S1:a%b得余数c;

S2:若c=0,则b即为两数的最大公约数;

S3:若c0,则a=b,b=c,转向执行S1。示例6所示:

示例6:求a和b两个数最大公约数

if(ab)//保证a大于b

2趣味性案例及求解算法

在学习经过中,常介绍一些趣味性的程序设计题目,例如猴子吃桃子、求解杨辉三角、n阶魔方阵的问题等。这些题目对提高学生的学习兴趣也起到了至关重要的作用。

还有一些实际应用题目也包含了相应的算法思想,比方:穷举法求解百钱买百鸡问题,回溯法求解n皇后问题等,KMP算法求解字符串匹配问题等。

3结论与瞻望

上述主要介绍和分析了学生学习C语言经过中几种常用的算法,并给出了详细实例。另外简单介绍了C语言中的一些趣味性实例对应的求解算法。为了有效地解决实际问题,不仅需要保证算法的正确性,还要考虑算法的质量等要素,所以在编写程序的经过中,逐步教会或引导学生设计一个正确且有效的算法是至关重要的。

以下为参考文献

[1]谭浩强.C程序设计(第四版)[M].清华大学出版社.2018.

[2]于清,吐尔根依布拉音,等.算法为先的C语言教学形式讨论[J].计算机教育,2018(20):106-108+96.

[3]屈婉玲,王捍贫,段莉华.面向软件工程学科的算法课程建设[J].中国大学教学,2020(12):55-57.

[4]任伟,任正云.C语言中递归调用的算法研究[J].襄阳职业技术学院学报,2020(1303):27-30+34.

[5]李伟.浅析C语言递归算法[J].电脑知识与技术,2020(830):7229-7235.

[6]闫鑫,王琴竹.循序渐进学习C语言选择排序算法[J].当代计算机(专业版),2021(14):53-56.

[7]孙义欣,宋大伟.斐波那契数列问题的C语言教学施行讨论[J].电脑编程技巧与维护,2020(16):151-152+154.

[8]白会波,高瑞平.汉诺塔问题的算法分析及C语言演示程序的实现[J].电脑知识与技术,2018(609):2130-2131.

[9]肖桂云,袁亚丽.用C语言解决汉诺塔问题的方式方法及经过分析[J].河北北方学院学报(自然科学版),2006(03):71-73.

[10]王敏,赵晓雷.基于遍历搜索二叉树中最长途径的算法研究[J].当代电子技术,2018(3308):54-55+58.

[11]龚佳,袁赟,刘远军.一种二叉树非递归遍历算法的C语言实现[J].电脑知识与技术,2020(1001):223-225.

[12]StenphenPrata.CPrimerPlus(第五版)中文版[M].人民邮电出版社.2005.

[13]宋美英.基于C语言的冒泡排序算法讨论[J].当代计算机(专业版),2018(29):48-49+55.

[14]王敏.改良的双向选择排序算法[J].信息技术,2018(3409):21-24+79.

[15]毛广敏.常用C语言排序算法解析[J].软件导刊,2020(1111):51-54.

[

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论