《C语言学习过程中几种常用的算法,计算机应用技术论文.docx》由会员分享,可在线阅读,更多相关《C语言学习过程中几种常用的算法,计算机应用技术论文.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言学习过程中几种常用的算法,计算机应用技术论文内容摘要:C语言是一门构造化的程序设计语言, 在解决实际问题时, 除了把握扎实的基本语法知识, 更重要的是要学习怎样编写程序。本文针对C语言程序设计课程实践教学中存在的问题, 从算法设计的角度, 对常用的递归算法, 排序算法, 迭代法, 打擂台 法, 辗转相除法等进行描绘叙述和分析。设计程序不仅保证算法的正确性, 还要考虑算法的质量。所以怎样编写高效且正确的程序是至关重要的。 本文关键词语:C语言; 算法; 程序设计; 著名计算机科学家Wirth提出 算法+数据构造=程序 。这一公式对于构造化设计语言是适用的1。算法是解决 做什么 和 怎么做
2、的问题, 数据构造是加工对象。所以不了解算法就谈不上程序设计。随着教学内容的增加, 程序设计的难度随之增大, 对特定问题设计相应的算法尤为重要。利用C语言的知识在解决实际问题时, 除了考虑算法和数据构造外, 还应采用构造化程序设计的方式方法进行程序设计。 C语言程序设计作为大学生的一门基础必修课程, 对提升大学生计算机编程能力至关重要, 也是后续专业课程学习的先修课程。在C语言教学经过中, 学生对程序设计往往显得力不从心, 十分是在程序设计实验课上, 对于一道程序难度不大的编程题, 部分学生却不知道怎样下手去做。在教学经过中, 于清2建议以算法优先并结合案例教学的形式开展C语言的教学。屈婉玲3
3、对算法课程的教学改革进行的总结。其他学者对C语言设计的递归算法4,5、排序算法6等分别进行了研究。 结合个人的实际教学情况, 本文对常见的几种算法进行分析。 1 算法与分析 该课程教学中, 牵涉的典型算法有递归算法, 排序算法, 迭代法, 打擂台算法 , 辗转相除法等。 1.1 递归算法 递归的概念是, 在调用一个函数的经过中, 直接或间接调用该函数本身。递归算法的执行经过分为回溯和递推两个阶段1。在第一个回溯阶段, 把较复杂的问题求解到比原问题简单的一些问题。这个阶段, 必需要有结束递归的条件。在第二个递推的阶段, 当获得最简单情况的解后, 逐级返回, 依次得到稍复杂的解。 递归调用方式有直
4、接递归调用和间接递归调用。常见应用于求解斐波那契数列7、汉诺塔问题8,9、树的遍历10,11、求阶乘 (见示例1) 等。 递归一般能够代替循环语句使用, 固然程序构造优美, 但执行效率较低, 消耗损费计算机内存资源, 难以阅读和维护12。当效率处在第一位的时候, 还须慎重使用递归。 示例1:求阶乘 1.2 排序算法 排序方式方法根据排序的规律可分为 升序 和 降序 。排序的方式方法13,14,15有很多, 如希尔排序、堆排序、快速排序、冒泡排序、选择法排序等。在C语言课程教学中, 主要介绍的是冒泡法排序和简单项选择择法排序两种。 冒泡法升序排列若干个数的基本思想:每次将相邻两个数比拟, 将小的
5、调在前头。排序算法如下 (示例2所示) : S1:比拟第一个数与第二个数, 若前者大于后者, 则交换;然后比拟第二个数与第三个数;依次类推, 直至第n-1个数和第n个数比拟为止, 结果最大的数被安置在最后一个元素位置上; S2:对前n-1个数进行第二趟冒泡排序, 结果使次大的数被安置在第n-1个元素位置; S3:重复上述经过, 共经过n-1趟冒泡排序后, 排序结束。 示例2:对n个数使用冒泡法排序 (升序) 简单项选择择法排序的思想是:先将n个待排序中的最小数与第一个数对换;再将剩余n-1个数中的最小数与第二个数交换;如此往复, 找出一个未经排序的数中最小的一个。共比拟n-1轮结束。示例3所示
6、: 示例3:对n个数使用选择法排序 (升序) 冒泡法排序的效率不及快速排序和堆排序, 花费大量的时间, 但编写容易且稳定性高, 可应用在规模较小的排序算法中。简单项选择择法排序所需移动记录的次数较少, 稳定性好, 算法速度慢。 1.3 迭代算法 迭代法16,17是求解方程或方程近似根的一种常用的算法设计方式方法。例如用迭代法求, 求平方根的迭代公式 (示例4) : S1:设定一个x的初值x0; S2:用上述公式求出x的下一个值x1; S3:再将x1代入以上公式右侧的xn, 求出x的下一个值x2; S4:重复这一经过, 直到前后两次求出的x之差的绝对值小于一个给定的精度。 示例4:设有两个值x0
7、和x1, 令x的初值x0=a/2。程序代码如下: 在迭代经过中, 对方程有解或者无解时应加以区别对待。假如方程有解, 但是迭代公式选择不恰当, 或者迭代的初始近似根选择不合理, 也会导致迭代的失败。假如方程无解, 算法求出的近似根序列就不会收敛, 迭代经过会变成死循环, 所以在迭代之前应首先考察方程能否有解, 并在编写程序时对迭代的次数加以限制。 1.4 打擂台 算法 该算法1应用于求解一维数组或二维数组若干个元素的最值问题。其思想是, 将一组数据以为是介入打擂台的比赛者, 先让第一个人站在台上, 第二人上去与之比武, 胜者留在台上。再上去第三个人, 与台上的人 (即刚刚的得胜者) 比武, 胜
8、者留在台上, 败者下台。以后每一个人都是与当时留在台上的人比武。直到所有人都上台比过为止, 最后在台上的就是冠军。 示例5:设有一个整型M行N列的二维数组, 找出其最大值 1.5 辗转相除算法 求最大公约数能够用到辗转相除法18, 也称欧几里德法。设有两整数a和b: S1:a%b得余数c; S2:若c=0, 则b即为两数的最大公约数; S3:若c 0, 则a=b, b=c, 转向执行S1。示例6所示: 示例6:求a和b两个数最大公约数 if (a b) /保证a大于b 2 趣味性案例及求解算法 在学习经过中, 常介绍一些趣味性的程序设计题目, 例如猴子吃桃子、求解杨辉三角、n阶魔方阵的问题等。
9、这些题目对提高学生的学习兴趣也起到了至关重要的作用。 还有一些实际应用题目也包含了相应的算法思想, 比方:穷举法求解 百钱买百鸡 问题, 回溯法求解 n皇后 问题等, KMP算法求解 字符串 匹配问题等。 3 结论与瞻望 上述主要介绍和分析了学生学习C语言经过中几种常用的算法, 并给出了详细实例。另外简单介绍了C语言中的一些趣味性实例对应的求解算法。为了有效地解决实际问题, 不仅需要保证算法的正确性, 还要考虑算法的质量等要素, 所以在编写程序的经过中, 逐步教会或引导学生设计一个正确且有效的算法是至关重要的。 以下为参考文献 1谭浩强.C程序设计 (第四版) M.清华大学出版社.2018.
10、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孙义欣, 宋大伟.斐波那契数
11、列问题的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
12、) :223-225. 12Stenphen Prata.C Primer Plus (第五版) 中文版M.人民邮电出版社.2005. 13宋美英.基于C语言的冒泡排序算法讨论J.当代计算机 (专业版) , 2018 (29) :48-49+55. 14王敏.改良的双向选择排序算法J.信息技术, 2018 (3409) :21-24+79. 15毛广敏.常用C语言排序算法解析J.软件导刊, 2020 (1111) :51-54. 16李向军, 杨花娥.求解一元三次方程近似根的几种算法的C语言实现J.西安联合大学学报, 1999 (02) :65-69. 17马丽娟.常用计算机算法简介及C语言举例J.电脑知识与技术, 2018 (611) :2655-2659+2662. 18柳小强.基于C语言最大公约数算法的设计与实现J.当代计算机 (专业版) , 2018 (11) :53-56.