山东省高中信息技术学业水平考试试题网 - 数据与计算|信息系统与社会|数据与数据结构|网络基础|数据管理与分析|移动应用设计|三维设计与创意|开源硬件项目设计|算法初步|智能系统初步

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 652|回复: 0
收起左侧

第十二讲 算法及其描述

[复制链接]

273

主题

672

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
QQ
发表于 2019-12-8 16:03:35 | 显示全部楼层 |阅读模式
第十二讲 算法及其描述
学习目标
, s9 M6 m8 {7 R1 v: \1.理解和概述算法的概念与特征;* |5 v4 T; w0 ]. q3 k1 Y* b
2.运用恰当的描述方法和控制结构表示简单算法。# k$ Q* m( P/ s- m7 n- ?
学习内容* Y: W/ Q; |; z" r. t+ {7 k- |
算法! O: {/ E9 E7 ^/ `) N* n
算法是指在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗地说,算法就是用计算机求解某一问题的方法,是能被机械地执行的动作或指令的有穷集合。2 a. w" x; s- V3 Z$ f( l7 L, @
例如,若要求方程6x+5y+4z=50的正整数解的个数,则解决问题的算法步骤如下:/ @3 D: h6 l$ `8 a1 D* `. |- {
①t=0;, C' {- y$ G& _/ r3 O( U
②x=1;
# s2 _: ~: w1 l③y=1;
( q9 I( R. S% ^/ I8 b1 z: j④z=1;
) J' w4 |9 y0 e⑤如果满足式子6x+5y+4z=50,则解的个数加1(即t=t+1,表示右边式子的值赋值给左边式子),并输出这个解(即输出t,x,y,z的值);
  s  X3 @3 N# N! X0 a3 f5 N⑥z=z+1;
* e+ y* M6 J8 ?* }+ t4 V2 Y/ d4 o⑦如果z≤12则转步骤⑤,否则继续步骤⑧;
' C- }$ Q7 Z& }( D- I7 {- m& s% ]⑧y=y+1;
) S+ a0 ?5 B- W3 X: q⑨如果y≤10则转步骤④,否则继续步骤⑩;
- p- _% n- X7 D( t7 |! D⑩x=x+1;
7 F# i( t4 Z) B$ O8 R+ o⑪如果x≤8则转步骤③,否则继续步骤⑫
! F' z- ^. D7 z, K) K+ Z⑫结束。
4 C+ h# m$ ]/ [; W0 @1 _, g算法的特征7 i1 f8 i- u2 |$ ^; O, j
算法作为能确实解决某个问题的策略,具有五个方面的重要特征:
' l: [; J4 X  d% e3 h(1)有穷性。一个算法在执行有穷步之后必须结束,即一个算法所包含的计算步骤是有限的。例如,在上面的算法中,x的值从1开始穷举,重复执行语句,直到x>8时终止执行。0 A/ T0 o9 _' `. T* j, H
(2)确定性。算法执行的每一个步骤必须有确切的定义,不能出现模棱两可的情况。例如,上面算法步骤⑤就明确规定:当满足式子6x+5y+4z=50时,则解的个数加1(即t=t+1),并输出这个解。
& s) X- U' E+ }2 [+ L" C. V7 O8 b(3)数据输入。一个算法必须有零个或多个数据输入,以刻画运算对象的初始情况。例如,在上面的算法中,就没有数据输入。9 b2 r. Y/ v4 j5 S1 n& p+ \3 `2 ?
(4)数据输出。一个算法有一个或多个数据输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的。例如,在上面的算法中,有两个输出,即步骤⑤的个数t和具体解(x,y,z的值)。
, N( |$ z! V' q+ p(5)可行性。算法中执行的任何计算步骤都可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。例如,上面的算法中每一步都是可以在有限时间内完成的。
6 G/ G, B( B9 T5 \算法的描述+ C9 }) M  x9 Y7 E
算法是对解题过程的精确描述,且需要使用某种方法将其表示出来。
6 _0 j9 |* P$ S, a) M% p, a0 z% A' o1.描述算法的常用方法
; e" U+ i" f+ g2 L$ X5 n描述算法的常用方法有自然语言描述算法、流程图描述算法和伪代码描述算法。; c2 a) {  |) D4 J9 c0 h, O
(1)用自然语言描述算法。7 X6 D3 o, Q3 Z% A0 ~* i
用自然语言描述算法,就是用人们日常所用的语言,如汉语、英语等来描述算法。例如,从A市到B市耗时最少的旅行路线问题的算法描述,即使用了自然语言。
: k) R1 f) c3 r3 x9 v4 v使用自然语言描述算法比较容易掌握,但也存在明显的缺点。例如,当算法中含有多分支或循环操作较多时,使用自然语言很难将其清晰地表示出来;并且由于自然语言的歧义性,也容易导致算法执行的不确定性。- k+ \( b5 \& M1 c
(2)用流程图描述算法5 j6 T8 N# H: D& r# E
用流程图捕述算法是用程序框图来描述算法的一种表示方法。使用流程描述算法,可使算法的流程描述得清晰、简洁。流程图的基本图形及其功能如下表所示。
' Q) g, p4 ^! g+ L+ y6 R
/ ~. d- z# W2 J, Y7 ?2 r例如,用流程图描述求方程6x+5y+4z=50的正整数解的算法,如下图所示。9 m) a2 N' G- g& _5 A6 t
  `8 |: e2 r3 c; D( ?
(3)用伪代码描述算法。  ~& Q- ~5 S  G& \2 w: _8 d
用伪代码描述算法就是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图形符号,书写方便,格式紧凑,易于理解,便于向计算机程序设计语言过渡。
. d2 H) R( ^% W例如,用伪代码描述求解方程6x+5y+4z=50的算法如下:$ A# G; x. C8 S  Y2 B
/ }  D5 T, l( Y# \& ~  o
在《几何原本》一书中,欧几里得阐述了关于求两个正整数的最大公约数的过程,这就是著名的欧几里得算法——辗转相除法,其具体过程如下:5 P7 P  A# a8 K5 C# x# ~4 D7 X
设给定的两个正整数为m和n,求它们的最大公约数的步骤为:
/ r6 p$ w4 k6 V% m' a①以m除以n,令所得的余数为R。
1 b, c( G  n6 R$ {: P6 H②若R=0,则输出结果n,算法结束;否则,继续步骤③。% z- R) Z/ y& d9 q- |
③令m=n,n=R,并返回步骤①继续进行。. Z* m# d5 X1 D  Y
用流程图将上述算法表示出来,试探索欧几里得算法在现实生活中有哪些应用,举出两个应用实例。: _* Z8 l' M2 x$ i  c
5 |0 F/ }! o6 l% m4 f
2.三种基本控制结构
, T( y! r+ [( k- [0 t前面的算法描述中,我们用到了顺序结构,选择结构和循环结构这三种基本控制结构(其流程图如下图所示),而任何复杂的算法都可以用这三种基本控制结构组合来表示。
, H' A$ E' h5 \9 V! C8 g
# I3 c3 k2 i" u这三种基本控制结构的主要作用是:$ n# Y  {- [9 m1 }/ c
(1)顺序结构表示程序中的各步操作按出现的先后顺序执行。
& Z5 y; |0 M2 w0 P(2)选择结构表示程序的处理步骤出现了分支,需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种。7 f# a, \3 U1 y; M' a: F
(3)循环结构表示程序反复执行某个或某些操作,直到判断条件为假(或为真)时才可终止循环。" R/ ~$ Z2 U' N- `
使用三种基本控制结构的组合来描述算法,可以改善算法的清晰度,提高算法的可读性,原因如下:
' R( I1 S6 ~9 D7 M* T(1)以控制结构为单位,只有一个入口和一个出口,各单位之间接口简单,比较容易独立地理解每一单位。
8 E" q' g$ y) D& B* x(2)缩小了算法的静态描述与动态执行过程之间的差异,使得两者容易对应,易于理解。* b& D* F$ M0 Z5 _
课内任务:将最大公约数代码输入,运行,观察是否达到预期效果。: i# S6 h" Q6 S$ O  p3 N; e
  1. num_1 = int(input("输入一个数:"))5 `2 P0 X7 ?3 S8 \6 W& ]1 C
  2. num_2 = int(input("输入另一个数:"))
    5 [- k$ @( z4 A' n  h
  3. if num_1 > num_2:6 B  Y9 g. w2 R: a* A
  4.     min = num_2
      Y3 D5 f$ e9 Y/ b
  5. else:
    # v: N0 j3 }9 n6 R: g. I# k
  6.     min = num_1
    0 Z) o5 ]+ _) B" g
  7. for i in range(1, min+1):. f, D, W2 c$ h9 {
  8.     if (num_1 % i == 0) and (num_2 % i == 0):  X* P& @, ^2 q
  9.         c = i
    ) K0 }1 c' `5 c& ?% v
  10. print('这两个数的最大公约数为:%d' % c)
复制代码

/ U3 z# Z4 |+ J( d: D0 m! m

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖




上一篇:第十一讲 体验计算机解决问题的过程
下一篇:第十三讲 计算机程序与程序设计语言
+1
652°C
沙发哦 ^ ^ 马上

帖子地址: 

教书育人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

百度一下 百度二下 百度三下 开门大吉

QQ|Archiver|手机版|小黑屋|山东省高中信息技术学业水平考试试题网 ( 鲁ICP备16049757号 )|网站地图

GMT+8, 2020-1-29 08:05 , Processed in 0.316934 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表
潍坊行知学校信息技术QQ交流群:
潍坊行知学校信息技术
潍坊行知学校复读官方招生QQ群:
潍坊行知学校复读招生