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

news2024/9/30 11:35:59

在这里插入图片描述

目录

🍊🍊一、什么是算法?

🍊🍊二、简单的算法举例

🍊🍊三、算法的特性

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


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

(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继续执行,否则算法停止。

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

三、算法的特性

(1)有穷性

(2)确定性

(3)有零个或多个输入

(4)有一个或多个输出

(5)有效性

四、怎样表示一个算法

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

流程图

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

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

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试项目实战经验附视频以及源码【商城项目,app项目,电商项目,银行项目,医药项目,金融项目】

前言: ​​大家好,我是凡叔。 很多初学的测试小白都在烦恼找不到合适的项目去练习,这也是难倒大部分测试小白的一个很常见的问题,项目经验确实是每一个测试非常宝贵的经验!这里凡叔给大家找了一些常用的项目合集&…

数据结构与算法十二 图进阶

一 有向图 在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前…

行业集体迈进全屋智能,华为的“空间智能跃升”独领风骚?

智能家居近年来发展飞速,市场正在从最初的单品智能向全屋联动智能切换。 据IDC数据,2022年中国全屋智能市场销售额突破100亿元,同比增长54.9%。一个住宅往往由卧室、客厅、厨房、卫生间、餐厅等多个基本功能区组成,全屋智能便是在…

企业进行产品管理内训至少有这5大好处

企业需要重视产品管理,建立完善的产品管理流程和标准,提高员工的产品管理能力,以应对各种挑战和机遇,在企业进行内训是最好的方式。 企业进行产品管理内训的目的是为了提高员工的产品管理能力,从而实现以下几个方面的好…

ChatGPT创始人采访 | GPT-4报告中文版

关于采访OpenAl Co创始人 Greg Brockman的要点记录分析,先介绍Gpt-4的基本内容,然后说下采访的重点部分,最后读一下154页Gpt-4的技术报告,这个大家可以在官网下载文档后,百度翻译支持每人限量一次的PDF翻译。面对文心一…

图(课堂笔记)

图的引入与术语 两种图 1. 有向图(Digraph):Each edge of arc has an associated direction. 2. 无向图(non-directed graph):Every edge or arc is two-way. 简单图是一种特殊的无向图。无向图没有自环…

即时设计是一款什么软件,有什么优势

即时设计是什么软件 即时设计是一款「专业UI设计工具」,不受平台限制,打开浏览器即可开始创作。它不仅具备精细化设计能力,还自带丰富的共享设计资源,同时支持多人实时协作、设计成果一键分享交付,让设计师在工作中每…

C++:使用位图处理海量数据

目录 一. 什么是位图 1.1 海量数据处理问题 1.2 位图的概念 二. 位图的实现 2.1 成员变量及成员函数 2.2 成员函数的实现 2.3 位图模拟实现完整代码 三. 关于位图处理海量数据的几个面试题 一. 什么是位图 1.1 海量数据处理问题 问题:假设有30亿个不重复的…

QT 学习笔记1 创建一个简单的cmd窗口界面

QT creator最大的特点是把界面和逻辑分开了 视频: 3、开发工具-QtCreator 目录 0、新建一个应用项目的步骤 一、设计相关: 1、控件 布局 Layouts 垫子 Spacers ​编辑 按钮 Buttons 单元视图 Item Views(Model-Based) 单元控件 Item Widgets(…

2023年美、英仍是最受欢迎的留学目标国家,硕士占比76%

2023年申请出国留学的时间已经不远了,要想顺利实现留学梦想,希望你能够把握好以下几个要点: 首先,要清楚自己的留学目标,要考虑到自己的学习能力、英语水平、专业设置、学费等因素,以便挑选一个最合适的国…

startActivityForResult被标记为废弃?Activity Result API闪亮登场!

本文已同步发表于我的微信公众号,搜索 代码说 即可关注,欢迎与我沟通交流。 文章目录 startActivityForResult()被标记为过时registerForActivityResult替代方案使用示例ActivityResultContract 场景自定义ActivityResultContract 源码浅析registerForAc…

(4.2)STM32中断系统

目录 1.中断基本概念 2.中断的意义 3.中断处理过程 4. 中断体系结构 5.NVIC 6.EXTI 1.中断基本概念 在处理器中,中断相当于对于突发事件的处理过程。 当遇到内部/外部的紧急事件需要处理时,暂时中止当前程序,转而去处理紧急事件, …

使用 ESP32 UWB DW3000进行测距和定位

什么是超宽带及其工作原理? UWB 是一种类似于蓝牙或 Wi-Fi 的短距离无线通信协议。它还使用无线电波进行通信并以非常高的频率运行。顾名思义,它还使用几 GHz 的宽频谱。可以将其想象成一种雷达,可以连续扫描整个房间并像激光束一样精确锁定物体以发现其位置并传输数据。 超…

08-用户权限控制

1、用户权限控制 权限控制是什么:控制用户对系统资源(URI)的操作。 前端的权限控制:对页面或页面元素的权限控制。 > 页面访问权限:哪些页面可以访问、哪些页面元素可见等等。 > 操作权限:如页面按钮是否可点击、是否可以增删改查等等 后端的权限控制:对接口及…

网络协议之HTTP详细解释

文章目录 前言一.Web发展的阶段二.http协议初识2.1 概念2.2 http的发展史2.3 http协议的作用2.4http协议的格式 三.抓包工具的介绍什么是抓包抓包工具的原理抓包工具的使用和下载- 具体下载过程:- 使用过程 四.HTTP请求请求行请求报头 五.HTTP响应状态行响应报头响应正文 前言 …

Java+Redis实现撤销重做功能

文章目录 1.背景2.需求分析3.实现逻辑分析4.统一过期时间设置5.初始图表栈6.记录图表变化7.撤销操作8.重做操作9.删除图表处理 1.背景 ​ 在一个编辑页面中,存在多个图表,对图表的配置操作允许撤销和重做;撤销和重做只是针对页面中图…

马斯克宣布将卸任推特 CEO:已找到接班人,自己要去当 CTO

作者 | 李冬梅 来源 | AI前线 ID | ai-front 当地时间 5 月 11 日,马斯克在特推上发文宣布,他将在 6 个星期后正式卸任推特 CEO 一职,并且已经找到了一位女性接班人,自己将转到技术岗位。 马斯克在推文中写道:“很…

Yolov5轻量级:EfficientViT, better speed and accuracy

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention 论文:https://arxiv.org/abs/2305.07027 代码:Cream/EfficientViT at main microsoft/Cream GitHub 🏆🏆🏆🏆🏆🏆Yolo轻量化模型🏆🏆🏆🏆🏆🏆 近些年对视觉Tra…

Java【网络原理3】TCP 协议的确认应答、超时重传机制

文章目录 前言一、确认应答1, 什么是确认应答2, 序列号和确认应答号 二、超时重传1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系…

【redis】redis为什么这么快?高性能设计之epoll和I/O多路复用深度解析

系列文章目录 文章目录 系列文章目录前言一、before 学习I/O多路复用之前多路复用 需要解决的问题 一对一性能差结论 需要让一个进程同时处理多个连接 二、I/O多路复用模型1、是什么?一句话 2、redis单线程如何处理那么多并发客户端连接,为什么单线程&am…