八年级信息技术课教案_八年级信息技术教案第八章程式序设计个性化----函数和子程序

初中信息技术教案 2013-09-08 网络整理 晴天

【jiaoan.jxxyjl.com--初中信息技术教案】

第八章 程式序设计个性化----函数和子程序
一、学习目标
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;"="; 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~f10
11 方向键↑
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   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
教学后记:  
 123

本文来源:https://jiaoan.jxxyjl.com/chuzhongxinxijishujiaoan/11328.html

Copyright @ 2011-2019 教案下载网 All Rights Reserved. 版权所有

免责声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。

 站长统计