高中信息技术 pascal教程05 第五课 基本语句(三)教案_第1页
高中信息技术 pascal教程05 第五课 基本语句(三)教案_第2页
高中信息技术 pascal教程05 第五课 基本语句(三)教案_第3页
高中信息技术 pascal教程05 第五课 基本语句(三)教案_第4页
高中信息技术 pascal教程05 第五课 基本语句(三)教案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五课 基本语句(三) 5.1 FOR语句FOR语句用于循环次数已知的情况,有两种形式:FOR := TO DO ;FOR := DOWNTO DO ;FOR语句的两种形式的逻辑功能图:下一条语句控制变量:初值控制变量初值1循环体变量终值falsetrue(a)DOWNTO情况控制变量控制重复的次数,它从初值到终值自动顺序取值(分递增和递减两种顺序),每取一次值就执行一次循环体,直到控制变量的值大于(对于fortodo)或小于(对于fordowntoto)终值。【例】计算1+2+3+4+100之和。分析:设变量s为累加和,初值为0,然后依次加上1,2,3,一直到100; 输出s的值。算法: s

2、 := 0; s := s+1; s := s+2; s := s+100; 输出s 步骤中,要重复写上100个赋值语句,其变化只是加号后的数值。因此,我们可以用一个for语句来代替这100个语句: for i := 1 to 100 do s := s + i ;program sample3611;var i , s :integer;begin s := 0; s置初值0for i := 1 to 100 dos := s + i ;writeln(s=,s); 输出累加和send.程序: 1i0s1+01 s为累加和,初值为0; i为控制变量,初值为1,终值为100;第一次执行循环体时

3、,i的值为1,s := s + i s := 0 + 1 , 执行后s=1;2i1s2+13第二次执行循环体时,i的值变为2,s := s + i s := 1 + 2 , 执行后s=3;第三次执行循环体时,i的值变为3,s := s + i s := 3 + 3 , 执行后s=6;第四次 【例】 读入n个数,计算它们的和与积以及平均值。 分析: 读入n ,n为整型变量; 设每次读入的数放置在变量x中,和、积以及平均值分别用sum,mul,ave存放,它们都为实型变量。 为了求sum,mul与ave,可以利用一个循环,让它循环n次,每循环一次,读一个新的x值,并把它分别加到sum上,乘到mul

4、上。注意,在循环前应将sum置为0,将mul置为1。循环结束后,将sum除以n,求出ave,最后输出sum,mul,ave。算法: 读入n; 置sum初值为0 , mul为1; for j := 1 to n do1 读入x2 将x累加到sum上: sum := sum + x ;3 将x累乘到mul上: mul := mul + x ; 计算ave: ave := sum / n ; 输出sum,mul,ave 程序: program sample3612; var x , sum , mul , ave :real ; sum为和、mul为积、ave为平均值 j , n:integer ;

5、 Begin readln(n); 读入nsum := 0; mul := 1; sum、mul置初值 for j := 1 to n do 循环n次,j为控制变量 begin 循环体内的语句不止一句,所以要用begin和end括起 read(x); 每次读入新的x sum := sum + x; 将x累加到sum上 mul := mul * x; 将x累乘到mul上 end; ave := sum / n; 求平均值ave writeln(sum= , sum , mul=, mul , ave=, ave); End 累加求和之前,累加单元(如sum)一定要清0,否则它可能是一个任意数,这

6、样在第一次累加时就不对了。同理,在累乘求积前,累乘单元(如mul)必须置初值1,否则会出错。 清0和置1,一定要在循环前做,在循环中执行累加和累乘。(思考:否则会怎样?) 循环体中如果有多个语句,必须用begin和end括起作为一个语句(复合语句)。【注意】1 初值和终值可以是表达式。控制变量的类型必须与初值、终值的类型相同。控制变量必须是有序类型,常用整型、字符型,不允许为实型变量。2 FOR语句的步长是一定的,虽Pascal允许在循环体内修改控制变量,但一般不赞成这样做,在循环体中改变控制变量往往会造成混乱。 如: for k := 1 to 100 do begin k := 3; 循环

7、体中改变了循环变量k的值 end. 3 当FOR语句执行完毕后,控制变量的值无定义,因此FOR语句的后续语句不能认为控制变量的值是终值而加以利用。4 当初值超过终值时,不执行循环,循环次数为0。如: for aa := 10 to 1 do 将不执行循环5.1 FOR语句的嵌套在实际应用中,可能在循环体内再包含有重复语句,这就出现了嵌套问题。以上三种循环语句都允许自己之间或相互之间嵌套,这样一层套一层便形成了多重循环。下面是一个二重循环语句:外层内层for i := 1 to 3 do for j := 1 to 4 dobegin k := i * j; writeln(i=, i , j=

8、, j , k=, k); end;可见,内层的重复语句是包含它的外层重复语句的一个循环体。 使用多重循环时,必须注意:内层循环必须完全被包含在外层循环体内,内外循环不得循环骑跨,对嵌套的FOR语句而言,内外层循环的控制变量不能同名。下面的两段程序都是不允许的: for i := 1 to 10 do for i := 1 to n do begin begin repeat x := x + 1; for i := 1 to n do write(x); end; end; until x 100; 【例】打印九九乘法表,大家注意观察循环的嵌套。program s99; var i, j :

9、 integer;begin for i:=1 to 9 do begin 循环体内的语句不止一句,所以要用begin和end括起for j:=1 to i do write (j , * , i , = , i*j , );writeln; 输出换行 end;end.变量变化情况及输出:i=1 j=1 1*1=1 换行i=2 j=1 1*2=2 j=2 2*2=4 换行i=3 j=1 1*3=3 j=2 2*3=6 j=3 3*3=9 换行1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9 输出: 【例】把一张一元钞票换成一分、二分和五分的硬币(每种至少一枚),问有哪几种换法

10、?分析: 这道题是一个组合问题,采用穷举法解决:令五分钱硬币的个数为k,k的取值范围为119 ;二分钱硬币的个数为j,j的取值范围为149 ;一分钱硬币的个数则为100k5j2 ;n为计数器,累计兑换方案的总数。这样利用二重循环就可以得到每一种组合。program s100;var i , j , k , n : integer;beginn := 0; 计数器n清0 for k := 1 to 19 do 五分硬币的个数 for j := 1 to 49 do begin 二分硬币的个数 i := 100k * 5j * 2 ; 一分硬币的个数 if i 1 then begin 想想:为什

11、么要加这一判断 writeln ( 1 fen: , i , 2 fen:, j , 5 fen: , k ); n := n + 1; 计数器加1 end;end;writeln ( total = , n );end.程序: 、【例】输出如下图形,行数n由键盘输入。*n行123nn行分析:如果觉得输出这个图形有困难的话,我们先做个最简单的:读入 n ,输出n行,第1行输出1,第2行输出2, 这个程序很容易实现:program x01;var n , i :integer;begin readln(n); for i:=1 to n do 循环控制变量i可以利用 writeln ( i );

12、 第i行输出的数字是i end.*n行 接着,我们试着来输出这样的图形:观察这个图形,可以发现,第i行上正好有i个 * ,我们可以利用二重循环,外循环控制行数,控制变量i表示正在输出第i行;内循环控制输出 * ,控制变量j表示输出j个 * 。program x02;var n , i , j :integer;begin readln(n); for i:=1 to n do begin 为什么要加begin for j:=1 to i do write ( * ); 这里改成writeln行不?为什么? writeln; 这句删去会出现什么情况? end;end. 然后,我们再将上面的程序稍

13、改改,输出下面这个图像:*n行进一步观察,发现这个图形各行 * 数与i的对应规律:第i行上有2*i-1个 * ,因此,我们仅需修改控制输出 * 数的那个位置:for i:=1 to n do begin for j:=1 to i do write ( * );2*i-1 writeln; *n行 end;最后,我们再观察题目要输出的这个图形:第i行在 * 之前有n-i个空格,然后再输出2*i-1个 * 。程序如下:program x04;var n , i , j :integer;begin readln(n); for i:=1 to n do begin for j:=1 to n-i

14、 do write ( ); 输出空格for j:=1 to i*2-1 do write ( * ); 想想,这里的控制变量j会不会出错? writeln; end;end.课后练习五:1、 阅读下面程序,写出程序的运行结果。var i : integer ;beginfor i:=5 to 10 dowriteln (i*2-1);end.(1) 程序的运行结果是: var i : integer ;beginfor i:=1 to 5 dofor j:=2 to i do writeln (*);end.(2) 程序的运行结果是:(3) 程序的运行结果是:var i,j : intege

15、r ;begin for i=5 downto 1 do begin for j=1 to 3 do write(*); writeln; end;end.var i,j : integer ;begin for i=1 to 5 do begin for j=1 to 5-i do write( ); for j=1 to i*2-1 do write( * ); writeln; end;end.(4) 程序的运行结果是:2、编程求解下列问题。(1)假设你们学习小组有15个同学,请你帮老师统计你们小组成绩的总分和平均分。 输入:15个人的成绩 输出:总分和平均分(2)求所有三位数的水仙花数

16、。 水仙花数:一个数各位数字的立方和等于这个数本身,如:135333153 。(3)有一天小猴摘下了若干个桃子,当即吃掉了一半,还觉得不过瘾,又多吃了一个;第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个;以后每天都吃尚存桃子的一半零一个。到第5天早上就只剩一个,问小猴那天共摘下了多少个桃子?(4)相传古代印度有一位宰相叫达依尔,是国际象棋的发明者,非常聪明。国王要奖励他,问他想要什么。达依尔说:“只要在国际象棋的棋盘上的第一个格子里放上一粒麦子,第二格放两粒麦子,第三格放四粒麦子,以后每一格加倍,一直放到第64格为止,我就感恩不尽了。”国王想:“64格有多少,这还不容易。”于是令人扛来一袋麦子,很快就用完了,又扛来一袋,又用完了。国王又令人扛来几十袋麦子,还是不够。国王非常奇怪,怎么需要这么

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论