【C程序设计】——程序=算法+数据结构

这篇具有很好参考价值的文章主要介绍了【C程序设计】——程序=算法+数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C程序设计】——程序=算法+数据结构

【C程序设计】——程序=算法+数据结构

目录

🍊🍊一、什么是算法?

🍊🍊二、简单的算法举例

🍊🍊三、算法的特性

🍊🍊四、怎样表示一个算法


 一个程序主要包括以下两方面的信息:

(1)对数据的描述。在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构(data structure)。

(2)对操作的描述。要求计算机进行操作的步骤,也就是算法(algorithm)。

著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:

 算法+数据结构=程序

一、什么是算法?

计算机算法可分为两大类别:数值运算算法非数值运算算法。数值运算的目的是求数值解,例如求方程的根、求一个函数的定积分等,都属于数值运算范围。非数值运算涉及的面十分广泛,最常见的是用于事务管理领域,例如对一批职工按姓名排序、图书检索、人事管理和行车调度管理等。目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。

由于数值运算往往有现成的模型,可以运用数值分析方法,因此对数值运算的算法的研究比较深入,算法比较成熟。对各种数值运算都有比较成熟的算法可供选用。人们常常把这些算法汇编成册(写成程序形式),供用户调用。

非数值运算的种类繁多,要求各异,难以做到全部都有现成的答案,因此只有一些典型的非数值运算算法(例如排序算法查找搜索算法等)有现成的、成熟的算法可供使用。许多问题往往需要使用者参考已有的类似算法的思路,重新设计解决特定问题的专门算法。

二、简单的算法举例

【例1】求1×2×3×4×5。

可以用最原始的方法进行:

步骤 1:先求1乘以 2,得到结果 2。

步骤2:将步骤1得到的乘积2再乘以 3,得到结果6。

步骤3:将6再乘以4,得24。

步骤4:将 24 再乘以 5,得120。这就是最后的结果。

这样的算法虽然是正确的,但太烦琐。如果要求1×2×…×1000,则要写999个步骤。显然是不可取的。而且每次都要直接使用上一步骤的具体运算结果(如2,6,24等),也不方便,应当能找到一种通用的表示方法。

不妨这样考虑:设置两个变量、一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而是直接将每一步骤的乘积放在被乘数变量中。今设变量t为被乘数,变量 i为乘数。用循环算法来求结果。可以将算法改写如下:

S1:令t=1,或写成1→t(表示将1存放在变量t中)

S2:令i=2,或写成2→i(表示将2存放在变量i中)

S3:使t与i相乘,乘积仍放在变量t中,可表示为:*i→t

S4:使i的值加1,即i+1→i

S5:如果i不大于5.返回重新执行S3及其后的步骤S4和S5;否则,算法结束。最后得到t的值就是5!的值。 
上面的S1,S2...代表步骤1、步骤2……S是Step(步)的缩写。这是写算法的习惯用法。

 由于计算机是高速运算的自动机器,实现循环是轻而易举的,所有计算机高级语言中都有实现循环的语句。因此,上述算法不仅是正确的,而且是计算机能方便实现的较好的算法。

【例2】判定2000——2500年中的每一年是否为闰年,并将结果输出。

先分析闰年的条件:

(1)能被4整除,但不能被100整除的年份都是闰年,如2008年、2012年、2048年都是闰年;

(2)能被400整除的年份是闰年,如1600年、2000年是闰年。

不符合这两个条件的年份是闰年,如2009年、2100年不是闰年。

设 year 为被检测的年份。算法可表示如下:

S1:2000→year

S2:若year不能被4整除,则输出year的值和“不是闰年”。然后转到S6,检查下一个年份

S3:若year能被4整除,不能被100整除,则输出year的值和“是闰年”。然后转到S6

S4:若year能被400整除,输出year的值和“是闰年”,然后转到S6

S5:输出year的值和“不是闰年”

S6:year+1→year

S7:当year≤2500时,转到S2继续执行,否则算法停止。

【C程序设计】——程序=算法+数据结构

 从图中可以看出:“其他”这一部分,包括不能被4整除的年份,以及能被4整除,又能被100整除,但不能被400整除的那些年份(如1900年),它们都是非闰年。

三、算法的特性

(1)有穷性

(2)确定性

(3)有零个或多个输入

(4)有一个或多个输出

(5)有效性

四、怎样表示一个算法

常用的表示方法并且通俗易懂的方法:

流程图

流程图是用一些图框来表示各种操作。用图形表示算法,直观形象,易于理解

【C程序设计】——程序=算法+数据结构

 连接点(小圆圈)是用于将画在不同地方的流程连接起来

【例2】中的算法,我们可以用下图来表示:

【C程序设计】——程序=算法+数据结构文章来源地址https://www.toymoban.com/news/detail-455276.html


到了这里,关于【C程序设计】——程序=算法+数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】设计循环队列

      🧑‍🎓 个人主页:简 料   🏆 所属专栏:C++   🏆 个人社区:越努力越幸运社区   🏆 简       介: 简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~ C/C++学习路线 (点击解锁) ❤️ C语言阶段(已结束) ❤️ 数据结构与算法(ing) ❤

    2024年01月17日
    浏览(33)
  • 数据结构算法设计——哈希表(散列表)

            哈希表 又叫 散列表 ,他们两个是同一个东西,本文全文采用“散列表”的叫法。散列表的本质其实就是一个 数组 ,他的作用就像使用数组时一样,输入下标可以得到对应元素,散列表可以实现 输入一个的时候得到这个的地址信息 。 下面是百科给出

    2024年02月03日
    浏览(50)
  • 算法+数据结构=程序,程序员怎样才能学好算法?

    🌹欢迎来到 爱书不爱输的程序猿 的博客, 本博客致力于知识分享,与更多的人进行学习交流 🚩🚩🚩 点击直达福利 数据结构和算法是计算机科学的基石,是计算机的灵魂,要想成为计算机专业人员,学习和掌握算法是十分必要的。 计算机科学家尼古拉斯·沃斯在计算机领

    2024年02月04日
    浏览(38)
  • 有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”

    作为IT程序员,学习算法的原因主要有以下几点: 提升问题解决能力:算法可以帮助程序员分析、优化和解决复杂问题。了解算法原理和实现方式将有助于程序员更快地找到合适的解决方案。这对于解决实际工作中的问题是非常有帮助的。 提高代码效率:通过学习不同的算法

    2024年02月13日
    浏览(25)
  • 《数据结构与算法分析》课程设计——迷宫问题

    中国矿业大学信控学院   补一下我之前在博客园发布的内容  懒得调了, 想复制完整代码直接复制最下面的 ,想复制分布代码去看我博客园链接吧 《数据结构与算法分析》课程设计——迷宫问题 - 刷子zz - 博客园 一、  问题描述 问题中迷宫可用方阵[m,n]表示,0表示能通过

    2024年02月10日
    浏览(37)
  • 链表综合算法设计(c++数据结构)

      一、设计内容 已知简单的人事信息系统中职工记录包含职工编号(no)、职工姓名(name)、部门名称(depname)、职称(title)和工资数(salary)等信息(可以增加其他信息),设计并完成一个简单的人事信息管理系统,要求完成但不限于以下功能: (1)    增加一个职工信息

    2024年02月02日
    浏览(45)
  • 软件设计师:05-数据结构与算法

    本章难度在软件设计师中最高,推荐最后一章进行学习 章节 章节 01 - 计算机组成原理与体系结构 07 - 法律法规与标准化与多媒体基础 02 - 操作系统基本原理 08 - 设计模式 03 - 数据库系统 09 - 软件工程 04 - 计算机网络 10 - 面向对象 05 - 数据结构与算法 11 - 结构化开发与UML 06

    2024年02月03日
    浏览(48)
  • java入门,程序=数据结构+算法

    一、前言 在学习java的时候,我印象最深的一句话是:程序=数据结构+算法,对于写java程序来说,这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型: 整型 byte 、short 、int 、long 浮点型 float 、 double 字符型 char 布尔型 boolean 还有包

    2024年02月05日
    浏览(47)
  • 【软件设计师06】数据结构与算法基础

    考点:数组与矩阵、 线性表 、广义表、 树与二叉树 、图、 排序与查找 、 算法基础与常见的算法 数组类型 存储地址计算 一维度数组a[n] a[i]的存储地址为a+i*len 二维数组a[m][n] a[i][j]的存储地址;按行存储:a+(i*n+j)*len;按列存储:a+(j*m+i)*len 采用上三角或者下三角的形式存储

    2023年04月11日
    浏览(28)
  • 数据结构与算法课程设计---最小生成树的应用

    1.问题 假定有这么一个问题,有11个城市,城市之间有一些天然气管道,铺设天然气管道需要花费不同的金额,现在要你选择其中一些天然气管道,使得所有城市可以互相联通且花费最小。 2.分析 我们把这个问题抽象为一张图,每个城市是一个顶点,城市与城市之间的管道是

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包