八年级信息技术教案第八章 程式序设计个性化----函数和子程序
第八章 程式序设计个性化----函数和子程序一、学习目标 1.掌握模块化程序设计思想2.掌握函数与子程序的定义及使用3.理解全局变量与局部变量4.了解参数的传送过程二、教学重点掌握模块化程序设计三、教学难点掌握函数与子程序的定义及使用四、教学办法1.演示法。2.实践法。五、教学手段与教学媒体多媒体网络教室。六、课时安排1课时。七、教学过程“模块化程序设计”中的“模块”是指:完成程序全部或部分任务的独立源程序文件。 程序的每一个模块可以是子程序或函数,它是通过执行一系列语句来完成一个特定的操作过程,常称为“过程”。 “执行一个过程”——调用一个子程序或函数; 一、自定义函数 qbasic函数: ①标准函数 ②自定义函数 ③外部函数1、单行自定义(def)函数 语句函数——用一个语句定义一个函数 (1). 一般格式; def fn<名字>(<参数>)=<表达式> 例1. 已知圆的半径r,求圆的面积:s=πr2 def fns(r)=3.14159*r*r print fns(3) end 例2.def fns$=”this is a string” print fns$ 例3. 求以下公式: def fnc(a,b)=sqr(a*a+b*b) print fnc(3,4) (2).说明 • 函数名由两部分组成 fn s 自定义函数标志(fn),用户定义名(一个字母s); • 参数可有多个,但调用时的参数(实参)与定义时的 参数(形参)要一致。 2、多行自定义(def)函数 用多行语句来定义一个函数。 (1)、一般格式 def fn<名字>(<参数>) ...... fn<名字>=<表达式> end def例4、定义函数f(n)=1+2+...+n def fns(n) s=0 for i=1 to n s=s+i next i fns=s end def for n=1 to 100 print fns(n) next n end (2)、说明 (i)形式参数——定义函数的自变量 实际参数——调用函数时的参数。 (ii)函数先定义后使用,即习惯把(请记得收藏本站-一路高升范文网,以获取更多新鲜内容)def语句 放在程序的开头。二、块内子程序 1、gosub-return 语句 子程序定义: <标号或行号>: ...... return子程序调用: gosub <标号或行号> 例5:求4!+5!+6! s=0 n=4: gosub f:s=s+p n=5: gosub f:s=s+p n=6: gosub f:s=s+p print “4!+5!+6!=”;s end f: p=1 for i=1 to n p=p*i next i return 2、on gosub-return 语句 (1).一般格式 子程序定义: <标号>: ...... return子程序调用: on <表达式> gosub <子程1>,<子程2>,…,<子程n> 例:“小学生算术练习”——轮流出一个二位数和一个一位数的加法、减法和乘法的题目,共出十题,每题 10分。 randomize for i=1 to 10 a=int(90*rnd)+10 b=int(9*rnd)+1 p=i mod 3 + 1 on p gosob a1,a2,a3 next i print "n=";n*10 end a1: print a;"+";b;"="; 共3页,当前第1页123八年级信息技术教案第八章 程式序设计个性化----函数和子程序
input c if c=a+b then n=n+1 return a2: print a;"-";b;"="; input c if c=a-b then n=n+1 return a3: print a;"*";b;"=" input c if c=a*b then n=n+1 return. (2)、说明: <表达式>的值不是整数时,按四舍五入处理,值为0或大于n则不起作用,值为负时系统给出错误信息——“不正确的函数调用”。 3、on key(n) gosub-return 语句 (1)、调用格式 on key(n) gosub <标号> 其中n是数值表达式,代表一个“陷阱键”。n的值与 设定键的对应关系如下: n值 键名1~10 功能键f1~f1011 方向键↑12 方向键←13 方向键→14 方向键↓ 例: 求和式:s=12+22+...+n2 n=100000 on key(2) gosub pri key(2) on s=0 for i=1 to 100000 s=s+i*i next i pring “s=”;s end pri:print “now swm is”;s,”i=”;i return (2).说明 设置陷阱:on key(n) gosub <标号> 打开陷阱:key (n) on 关闭陷阱:key (n) off 三、独立模块的子程序 1、建立子程序 格式:sub <子程序名>[(<参数表>)] ……… end sub 2、子程序的调用 (1).格式 declare sub <子程序名>[(<参数表>)] ……… call <子程序名>[(<参数表>)] 或 <子程序名> <参数表> 例:sub stars(n) for i=1 to n print “*”; next i print end sub _________________________ declare sub stars(n) call stars(30) call stars(18) end (2). 说明 i)declare 为外部子程序说明语句,主程序调用多少个子程序,就有多少个declare语句; ii)call语句的“call”可以省写,参数的括弧也 可不写; 如: call stars(30) 可写成: stars 30 3、参数传递 (1).值传递方式 call stars (30) ...... sub stars (n)(2).地址传递方式 a=30 call stars(a) ...... sub stars(n) 例:求4!+5!+6!+7! 子程序:sub fact(n,f) f=1 for i=1 to n f=f*i next i end sub 主程序:declare sub fact(n,f) for i=4 to 7 call fact(i,f) s=s+f next i print “s=”;s end 注:地址传递方式是当实际参数为变量时发生,它将可能会改变原变量的值,若实际参数是变量时,也不想用地址传递(即用值传递方式)则可把变量用括号括起来。 例:求两个整数的最大公约数和最小公倍数。(p208) 最小公倍数=(m*n)/最大公约数 求最大公约数子程序: sub hcf(m,n,h) if m<n then swap m,n r=m mod n do while r<>0 m=n n=r r=m mod n loop 共3页,当前第2页123八年级信息技术教案第八章 程式序设计个性化----函数和子程序
h=n end sub 求最小公倍数子程序: sub lcm(m,n,h) h=m*n/h end sub 主程序: declare sub hcf(m!,n!,h!) declare sub lcm(m!,n!,h!) input "m,n=";m,n call hcf(m,n,h) print "最大公约数为:";h call lcm(m,n,h) print "最小公倍数为:";h end 说明:程序在执行时,结果不正确;其原因是call hcf语句调用时修改了m和n的值,以至使call lcm运行不 正确。因此,call hcf语句应为: call hcf((m),(n),h) 例:验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和。(p209) 算法: n=10 n1 n2 2(t) 8(f) 3(t) 7(t) n=16 n1 n2 2(t) 14(f) 3(t) 13(t)四、模块化的函数 1、建立一个函数 function <函数名>(<形参表>) ...... let <函数名>=<表达式> end fuwstion 2、函数的调用 与标准函数相同,只是在主程序开头加上 declare function <函数名>(<参数表>),无参数函数也要写上两个括号( ); 例:求4到7的阶乘之和 function fact(n) f=1 for i=1 to n f=f*i next i fact=f end function __________ declare function fact(n) s=0 for i=4 to 7 s=s+fact(i) next i print "s=";s end注意函数的参数传递 3、static选项(静态) 外部函数中使用的变量,在函数调用结束后将全部被释放,其值不再保留。如要保留函数中的变量,可在建立函数时加写“static”即 funtion 函数名(<参数>) static 五、全局变量与局部变量 1、局部变量 每一个模块(子程序、主程序、函数)中的变量都只在本模块中有效,即是它们的作用域只限于模块,这种变量称为局部变量。 2、全局变量 在程序所有模块中都有效的变量,即作用域为整个程序变量称为全局变量。其定义格式为: common shared <变量表> 六、过程的嵌套调用 在一个过程里也调用另一个过程。 七、过程的递归调用 在一个过程里也调用该过程本身; 比如直接调用: function f(x) c=f(x) f=2*c end function 也如交叉调用: function f1(x) …… c=f2(y) …… f1=2*c …… end function function f2(t) …… d=f1(a) …… f2=4/d …… end function 执行的结果造成无终止的自身调用,显然,程序中不应出现这种无终止的调用,而只应是有限次数的、有终止的递归调用。 fonction age(n) if n=1 then age=10 else age=age(n-1)+2 end fonction 主程序: declare function age(n) print age(5) end fonction fact(n) if n<=1 then fact=1 else fact=n*fact(n-1) end fonction 教学后记: 共3页,当前第3页123推荐站内搜索:吉林省自考成绩查询、春雨作文200字、孝敬父母的演讲稿教资答案2021下半年、会计学考研学校排名、2013成人高考成绩查询、监理工程师考试、山东省教师资格证成绩查询、暑假日记200字大全、真没想到 作文400字、