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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

第十九讲 运用循环结构描述问题求解过程(上)

 关闭 [复制链接]

304

主题

718

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
QQ
发表于 2020-6-28 18:33:38 | 显示全部楼层 |阅读模式
第十九讲 运用循环结构描述问题求解过程(上)
学习目标
1 K% Z4 @4 L  e4 a' ?4 q( m$ c掌握循环结构。$ b+ L4 l. h$ r
学习内容4 e  x. I: C* S5 Z6 \# E
程序的循环结构是程序设计中常用到的基本结构之一。循环是让计算机自动完成重复工作的常见方式。for循环、 while循环、循环嵌套、循环控制等都是程序循环结构的主要内容。
8 Y2 o4 c% r& H, l. sfor循环的应用
7 r. I3 d7 v3 I" F9 Lfor循环语句的一般格式如下:
. g; E- h- \7 D- U6 r: }3 Z' B6 Jfor  循环变量  in  列表:
8 H4 k: A) g3 b; w. i. V    语句或语句组
8 E4 c+ V+ L  d4 Afor循环依次把列表中的每个元素逐个迭代出来。冒号“:”代表下一行是循环的第一行,但是循环体在书写时需要缩进。在for循环中,从for语句末尾的冒号开始至其下面没有缩进的代码之间都是其包含的需要重复执行的部分。因此,for循环所包含的语句是以缩进为标志的。具体如表4-9所示。
! z! j5 T) V6 W2 ?3 E: q# l6 g4 a3 B: e6 {
- y) a1 H9 q3 L. b$ S3 e0 e, q
需要注意的是,列表可以有几种表达方式; z' f/ E8 b$ F: X- H8 T  ]
(1)直接罗列的方式。+ @7 M/ S7 f& z' B
如表4-9中代码“ for value in [1,2,3,4,5]:”就是直接罗列的方式。
, Y/ z6 ^  p: w; c9 H4 F6 v# r(2)先定义后使用的方式,如表4-10所示。
9 W- o% Z4 S+ F3 J& x: l% @# W/ I5 `4 W3 g! I. i! L+ ]+ Z
(3)使用 range()函数。" d' w; X9 Q: X9 F3 [. o- X9 u
range()函数是让 Python从指定的第一个值开始数,并在到达所指的第二个值后停止,因此不包含第二个值。如 range(1,6)其实是生成一个1~6的整数(不包含6),如表4-11所示。% H1 g4 u5 f1 i$ D
' ^' M. q! Q0 V: f  _
0 `6 N3 d6 F$ w, i
使用range()函数时,还可指定步长,如表4-12所示。
6 g0 N5 G6 N1 d) u1 D1 q% |% r1 j5 m' t* r  B" f% \+ }
当然,使用range()函数时,数值列表也可以是降序的,如range(10,1,-2)就是生成10至2的偶数(降序),具体如表4-13所示。" Y' Z) a$ T1 |8 I7 ]7 w2 M/ X4 x
5 I* U8 O& U( {# }# e
问题( O# e. q5 G5 p, _' r
假如项目小组经过讨论,决定先网购单价为1元至10元的十种笔记本各1本,且每一种只买1本,那么该如何编程计算一共要花多少元?
" G+ K0 j: g5 K4 b/ t; t思考, X# a( h: Z& X0 R- c6 u- P
如何用for循环语句编程解决上述“网购物品累计费用计算”问题?& r" a5 c* y7 K) q7 D* u
观察
+ S- H3 Z/ a+ U; u解决上述问题的方法有很多,其中一种方法步骤如下:7 x) W, Z, S+ T# D" j
(1)分析问题。' M5 }  i) v) F5 \* E% |+ H
这个问题相当于要计算从1到10的累加值。1~10的累加就是计算1+2+…+10,可以用for循环结构编程来解决这个问题。
6 D, d7 J' F1 i/ e(2)设计算法。
根据上述分析,可设计如下算法:需要有一个循环变量从1变化到10,将该变量命名为i;还需要另外一个临时变量不断和该变量进行加法运算,并记录运算结果,将临时变量命名为sum;变量i每增加1时,就和变量sum进行一次加法运算,变量sum记录的是累加的结果。该算法流程图如图4-14所示。7 T$ O* B; C3 W9 N, \* w
(3)编写程序。4 o+ v- p/ F# a/ m  z
根据上面设计的算法,编写出解决该问题的程序所示:
/ a- t6 }7 r) P/ c" T2 j8 d
  1. sum = 0
    5 s9 }- }" Z7 U
  2. for i in range(1, 11):, m( |; W7 c' B+ S. R
  3.     sum = sum + i5 @# G4 |" g* L
  4. print("the result:",sum)
复制代码

, B( \& M8 L+ O" ~8 q' ^7 }(4)调试程序。
" i0 N0 z$ \  W" P9 Y- b+ }将程序输入计算机进行调试运行,所得结果为“ the result=55”。' V3 @  u6 o( t; S/ ~
1 E, p( p6 I4 s6 d1 w+ w
while循环的应用
# {/ a' s2 c* F. U. f9 Nwhile循环是当型循环,只要条件满足,就不断循环;否则,退岀循环。whie循环语句的格式:
2 j: K6 Y* D6 S2 |9 V& i( kwhile  (表达式):: [. \% f* U6 G. j+ X2 _6 k4 t6 @4 `. [
    语句或语句组5 O5 _7 T5 Z, i' e7 I
(1)表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值真(True)或假( False)。5 S2 c5 l; l; h( Q, X( Y
(2)当表达式的值为真时,执行循环体语句;当表达式的值为假时,退出循环,执行循环体外的下一条语句(即 while后面没有缩进的第一条语句)。8 z. Z' {' M( o
(3)每次循环都是执行完循环体语句后回到表达式处重新开始判断,重新计算表达式的值。一旦表达式的值为假就退出循环,为真时就继续执行循环体语句。3 |; l" r' }& p! G5 z
(4)循环体中必须有改变条件表达式值的语句,否则将成为死循环。
8 F$ k8 b$ R  {$ B(5) while循环可以用流程图来演示执行过程,如图4-15所示。
4 q- D3 ~$ U# u6 p  [# C
" m  q" G. [9 Y6 @$ ^问题
" V+ f8 Y' p" N项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,依次下去,第几个人募捐后募集到的总费用累计超过500元?- t" R+ E1 I6 g* G
思考
, f5 D' c9 [* s" q, J. w; v如何用 while循环语句编程解决上述的募集费用计算问题?4 m8 l: C/ F% E; E. a1 @8 l
观察
+ Q4 P% J( E; ]  B1 B) }用 while循环语句编程解决上述问题的方法有多种,编程时要注意条件表达式的构成,现给出其中一种方法的步骤如下:5 G- v4 V# m% [8 F
(1)分析问题。
  _' w  [, G$ {3 M9 @设所拉赞助人的数量为num(num=1,2,3,…),每次募集的费用为 money,每次募集之后总费用为sum,则sum可以用如下的式子表示:
2 a- B5 g% O4 _% h3 Bsum=20+25+30+……
4 G5 t6 F& O3 r7 K; E7 G1 G$ E于是这个问题就可以转化为:当sum≥500时,求num的值。( z2 q& q: G8 m0 _- ~7 c
(2)设计算法。
" u& |  \3 h' @/ P根据上述的分析,设计算法如下:' O4 h* l/ \  }& \
①令num=1;
0 k. G8 w. V% k/ R* R5 c②令money=20;# v# ^; Y, u4 G0 u- H+ `' h, X
③令sum=20;! c' `6 \, o+ C: a. Z- w7 O
④num=num+1;
) @' z* k; U* V- r1 b+ Q7 t⑤money=money+5;
, W8 L: D, `# _% F7 x0 S⑥sum=sum+money;
& i6 Q, T/ V( \⑦如果sum<500,则返回步骤④;
# o& Q$ ^  O0 r$ h: Y* a0 N2 }⑧输出num的值;6 h# v1 z8 d7 c5 i
⑨结束。
( g0 K: {# u+ ]3 J(3)编写程序。) w# p# n3 _# i* K
根据上面设计的算法,编写出解决该问题的程序如下:3 F+ b$ B4 U/ ^, \
  1. num=1
    4 W6 f0 T* l' h3 A8 }/ @3 {' R
  2. money=20
    3 r! s* D1 Q# [! m) j
  3. sum=20& ~- z: t& U. J1 b' j
  4. while sum<500:
    & W' m/ B' a  `5 i& l$ V8 `; Q1 ~: `
  5.     num=num+1
    - v8 [$ m- x* n, h& f% Z8 \
  6.     money=money+5
      W; O4 ?, k( H5 W9 I; q
  7.     sum=sum+money
    % N0 a# x* G0 y2 c
  8. print(num)
复制代码
(4)调试程序。
. `8 f& O& Z0 {2 N; b+ G将程序输入计算机进行调试运行,得出结果为12。

) y2 h2 Z% V- V& j% v( S) `$ ?- S课内任务1:假如项目小组经过讨论,决定网购单价为1元至10元的十种笔记本,且每一种笔记本需要购买对应单价的本数(1元的买1本,2元的买2本,3元的买3本,……,10元的买10本),那么该如何编程计算一共要花多少元?
  1. sum=0
    / M- R+ l) O0 E% c
  2. : U% E5 V8 A1 ^- d0 n
  3. 7 o, o1 ]; I# V
  4. print("the result:",sum)
复制代码
$ C* c9 y$ p% e
* i1 n; C. k  _: T& B" q

. P" U: H: _! B' V课内任务2:
项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,依次下去,第几个人募捐后募集到的总费用累计超过500元?
  1. num=1+ a# a: L1 D. R1 t+ E# h
  2. money=20$ Q3 e  F- r- e6 }
  3. sum=201 {3 Z  Y8 z( s6 Q+ U0 y
  4. while sum<500:. Q$ {1 D1 z3 @
  5.     num=num+1% i/ O% c; [  a8 \
  6.     money=money+5
    7 B! y4 \% x6 h- e, i
  7.     sum=sum+money
    % Q+ w, `) Q  o& t
  8. print(num)
复制代码
6 t' F6 g4 m- `; l# b
对于上述问题的解法,如果改变几个变量的初始值,假设令“num=0, money=20,sum=0”,那么, while循环体中的程序段应该如何编写?它们之间的语序能改变吗?为什么?
9 e+ q  s( `  D/ O, g' j3 z6 G6 G4 t' {' T5 N$ u' j! v
3 H' p  E7 Q& `
: ?  `. m$ z# g' {7 l' `( Z/ o
  1. sum = 01 a% w) O( m1 X: a
  2. for i in range(1, 11):
    6 A8 m4 z9 J3 f
  3.     sum = sum + i*i' r; j: z4 I. L1 t5 g7 B
  4. print("the result:",sum)
复制代码
  1. num=0
    / b6 b8 W& W, l
  2. money=20
    , U7 B/ C' V: u; ^+ O# o
  3. sum=0; \. _, n0 F) P  K. o
  4. while sum<500:# h. m4 a; k- c4 e
  5.     num=num+1
    % T8 Q, y" }& X0 L& X" `  j
  6.     sum=sum+money8 _; I0 B7 w. }3 Y5 w& D
  7.     money=money+5
    0 ^+ B6 r) `  U2 I# p. y. h
  8. print(num)
复制代码
6 h1 P% y' f  D& n9 X# |5 B

本帖子中包含更多资源

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

x
楼主热帖




上一篇:第十八讲 运用选择结构描述问题求解过程(下)
下一篇:第二十讲 运用循环结构描述问题求解过程(下)
+1
589°C
沙发哦 ^ ^ 马上

帖子地址: 

教书育人!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2020-10-2 01:02 , Processed in 0.320533 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表