书人FB第3期讲义_第1页
书人FB第3期讲义_第2页
书人FB第3期讲义_第3页
书人FB第3期讲义_第4页
书人FB第3期讲义_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、basic基础班第三期讲义(含练习)尊敬的家长,亲爱的学员:欢迎您参加basic基础班第三期的学习,让我们一起努力,顺利完成学习任务,取得好的成绩,为今后的学习打下良好的基础!为此,请我们共同遵守如下约定:1、 按时到教学点上课,不迟到,不早退,不旷课;2、 上课认真听讲,记笔记,积极回答问题,请勿做与学习无关的事(如玩游戏);3、 课后认真复习,多上机练习,按时完成作业;4、 每次上课请带上书本、作业、笔、纸;5、 请保存好每次上课的讲义,以备复习之用;6、 有问题或建议请及时联系(顾老师,电话;7、 爱护公物,保持教室整洁。2021年5月basic程序设计第三期教

2、学计划课次教 学 内 容课次教 学 内 容1第一、二期复习2数组7l 二维数组的定义l 二维数组的赋值与输出3数组8l 二维数组与一维数组的互化l 二维数组的排序4数组9数字图形1l 鞍点l 回字形方阵5数组10数字图形2l 直角三角形l 杨辉三角形6字符串1l 字符串的基本知识、字符串常量与变量l 字符串函数17字符串2l 字符串函数2l 字符串函数应用18字符串3l 字符串函数应用29子程序1l 子程序的概念、作用l function函数的建立与调用10子程序2l sub过程的建立与调用l 变量的作用范围11子程序3l 子程序应用12复习13考试14试卷讲评联系电话: 1895168030

3、9(刘老师) 中心网站:【第1次课:第一、二期复习】机号 姓 名 年 级 家长签名 1学习目标:复习并掌握第一、二期内容。l freebasic下载n 下载地址1:/basicn 下载地址2(机房内使用):http:/l basic第一、二期内容复习n 程序的组成:输入数据,处理数据,输出数据n 数制u 常用的数制:10,2,8,16u 数制的定义:基数,进位规则,位权u 数制的转换:n 数据类型u 数值(整型,实型),字符u 常量,变量,数组n 运算符与表达式u 算术运算符u 关系运算符u 逻辑运算符n 语句

4、和函数u 赋值类:let(赋值),input(键盘输入),read/data(读数/置数)u 输出类:l print(输出),print using(指定格式输出)l locate(屏幕定位),tab(),spc()u 选择类:if(条件),select(多分支)u 循环类:l fornext(计数循环)l do whileloop(当循环条件循环)l doloop until(直到循环条件循环)u 随机数类:rnd,rnd();randomizeu 其它:l swap(交换)l sleep(暂停),end(结束),rem(注释)l dim as 数据类型 变量列表(变量定义)l int()l

5、 sqr()n 基本程序段u 两个变量值的交换(3种)u 闰年问题u 累加问题,累乘问题u 整数的分解u 因数问题u 图形输出u 数制转换u 数组元素的赋值与输出u 数组元素的查找,删除,插入u 排序元素的排序l 练一练:n (j3-11)从键盘上输入年、月、日,输出这一天是这一年的第多少天。n (j3-12)。求s=1!+2!+10!的值。n (j3-13)随机生成10个数(在10-99之间)存入数组a中,然后将数组a中的元素按升序排序。接着从键盘上输入一个数x,如果x存在于数组a中,则把元素x删除;否则将其插入数组a中,要求数组依然有序。l 作业一、编写程序(上机编程、调试、运行,并将源程

6、序写在下面)1、编程输出100以内的所有素数。(x3-111)【第2次课:数组7】机号 姓 名 年 级 家长签名 1学习目标:掌握二维数组的赋值与输出。l 练一练(j3-21):随机生成10个数(在10-99之间)存入数组a中,然后将数组a中的元素按升序排序。接着从键盘上输入一个数x,如果x存在于数组a中,则把元素x删除;否则将其插入数组a中,要求数组依然有序。l 二维数组的引入n 在日常生活中,有些数据经常呈现为表格的形式,如同学们的座位表。n 在该表中,每一个同学的座位是由排(或称“行”)和组(或称“列”)决定的。n 对以上这种例子中的数据,可以采用二维数组来实现,例如s(3,5)。l 二

7、维数组的定义n 包括两个下标的数组称为二维数组n 在使用数组之前,必须对数组进行定义。n 数组的定义格式:dim as数据类型 数组名(行下标上界,列下标上界)134852764930867687 93l 练一练(j3-22):假设有一组数以右边所示的形式存放在数组a中,且数组a的最小下标(1,1),即a(1,1)=1,现已知x=1,y=2,z=3。n 请按右边数组的内容填写以下数组元素的值或下标。a(x,x)= a(a(2,1),1)= a( ,)=6a(y,z)= a(x,y+z)= a(z,3)= a(4, )=8a( , )=1a(a(y,4)-1,2*a(z-y,1)= l 二维数组

8、元素的赋值与输出n 元素的赋值:u 一般是通过for/next语句let语句(或input、read/data语句)来实现的。u 因为二维数组有两个下标值,所以一般用双重循环。n 元素的输出:u 一般是通过双重循环与print语句实现的。n 编写程序将上面的数存放到数组a中,并输出。-0-1-1-11-1-0-1-11-1-1-0-11-1-1-1 -01-1-1-1-10l 练一练(j3-23):给一个二维数组a赋如右图的数据,并输出形式如右图所示:n 问题分析:n 源程序:l 作业一、阅读程序,写出运行结果运行结果:1、(x3-211)dim as integer a(2,4), b(4,

9、2)print shu zu a:for i = 1 to 2 for j = 1 to 4 a(i,j) = (i-1)*4 + j print a(i,j); next j printnext iprintprint shu zu b:for i = 1 to 4 for j = 1 to 2 b(i,j) = a(j,i) print b(i,j); next j printnextsleepend二、编写程序(上机编程、调试、运行,并将源程序写在下面)415982795125125841076214891、编程将右面的数据存放到数组b中并输出。(x3-221)2、从键盘上输入一个整数,

10、输出用这个整数的各位数字组成的最大数,例如输入103,输出310;输入13245,输出54321。(x3-222)【第3次课:数组8】机号 姓 名 年 级 家长签名 1学习目标:掌握二维数组与一维数组的互化,二维数组的排序。l 二维数组转化成一维数组n 二维数组的存放u 二维数组的所有元素在计算机内存中是占一列连续的存储单元的。l 例如,对于下面的二维数组:x(1,1)x(1,2)x(1,3)x(2,1)x(2,2)x(2,3)x(3,1)x(3,2)x(3,3)l 在basic中,该数组在内存中其实是这样存储的:123456789x(1,1)x(1,2)x(1,3)x(2,1)x(2,2)x

11、(2,3)x(3,1)x(3,2)x(3,3)u 二维数组的这种存放顺序称为按行存放。n 如果一个二维数组t有h行、l列(起始行,列都为1),那么数组元素t(i,j)的数据存放在(i-1)*l+j位置上。65864528122128324678792093868002 117632l 练一练(j3-31):假设有一组数以右边所示的形式存放在二维数组h中,且数组h的最小下标(1,1),那么数组h中第一个元素h(1,1)的值是6,数组h中最后一个元素,即第24个元素h(4,6)的值是32。n 请完成下表。元素元素的值元素存放位置h(1,1)61h(4,6)3224h(1,6)h(2,4)h(3,1

12、)h(3,6)h(4,1)h(3,5)h(4,2)h(2,6)n 将上述的二维数组h转换成一维数组b输出。u 问题分析:程序的结构应分为三个部分l 输入该二维数组h;l 二维数组h转化成一维数组b;l 输出一维数组b。u 源程序:l 一维数组转化成二维数组n 反之,如果要将一维数组转换成二维数组,应如何确定一维数组中的元素在二维数组中的位置,即行下标,列下标应分别为多少。u 设有一维数组b如下:元素序号123456789101112131415元素的值123456789101112131415u 欲转换为如下所示的3行5列的二维数组h。列下标行下标12345112345267891031112

13、131415n 如果将一维数组b转换成二维数组t(h行、l列,起始行,列都为1),那么一维数组b中的第k个元素,即b(k)存放到二维数组后,其行下标i=(k-1)l+1,列下标j=(k-1) mod l+1。l 练一练(j3-32):将上面的一维数组b转换为3行5列的二维数组h,且二维数组数组h的最小下标(1,1)。n 请完成下列内容:第1个数据行下标列下标第6个数据行下标列下标第10个数据行下标列下标第12个数据行下标列下标第15个数据行下标列下标n 将上述的一维数组b转换成二维数组h输出。u 问题分析:程序的结构应分为三个部分l 输入该一维数组b;l 一维数组b转化成二维数组h;l 输出二

14、维数组h。u 源程序:l 例(j3-33):二维数组的排序问题n 有一个3行4列的数组a,将它的元素按从小到大的次序排列,然后将排列好的元素按行的顺序存放以后输出。例如,排序前的数据为:5734121259619347n 排序后的数据为:1345677912192534n 问题分析:二维数组的排序可以借助于一维数组来实现。因此,可以分三步:u 二维数组转一维数组;u 一维数组元素排序;u 一维数组转回二维数组。n 源程序:l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1、二维数组的排序问题(x3-311):有一个3行4列的数组a,将它的元素按从小到大的次序排列,然后将排列好的

15、元素按行的顺序存放以后输出。例如,排序前的数据为:5734121259619347排序后的数据为:1571936925471234【第4次课:数组9数字图形1】机号 姓 名 年 级 家长签名 1学习目标:掌握鞍点问题,掌握回字形方阵。l 鞍点问题:n 定义:如果一个mn的矩阵的某一项a(i,j)是第i行中的最小数,同时也是第j列中的最大数,那么就称a(i,j)是此矩阵的一个鞍点。n 个数:对于mn的矩阵,其鞍点个数最少为0个,最多为m个。n 例如,有如下的矩阵:2018141795522863614120则鞍点为第三行第四列的元素值40。l 例题(j3-41):编程找出任意给定矩阵的鞍点。n

16、问题分析u 首先找出每一行元素的最小值,并记下它的列位置k;u 然后以此列位置为基础,查找该列中有无比它大的数,如果没有,则表示该行存在鞍点。n 源程序:l 练一练:输出以下55的矩阵。1111121111321114321154321l 回字形方阵:n 如果一个55的矩阵其数字特征如下:11111122211232112221111111111112221123211222111111n 如果一个66的矩阵其数字特征如下:111111122221123321123321122221111111111111122221123321123321122221111111n 那么这样的矩阵就称之为回

17、字形方阵。l 例题(j3-41):编程输出nn的回字形方阵。111111122221123321123321122221111111n 问题分析:u 以55和66的回字形方阵为例,可以发现这两个方阵以第三行,第三列为分界线分为四个部分。u 这时,就知道回字形方阵是左上部图形(图中阴影部分)关于列中心线、行中心线及与对角线平行的斜线中心对称的图形。u 因此,首先要编程得到图中阴影部分的图形,然后得到与其对称的其它三个部分的图形。n 阴影部分1111112221123211222111111图形:u 特征:对角线元素的数值及下三角元素的数值与列下标一致;上三角元素的数值与行下标一致。u 源代码:k

18、= int(n/2+0.5)for i=1 to k for j=1 to k if i=j then a(i,j)=j else a(i,j)=i next jnext in 其它三个部分的图形:u 左右对称部分:u 上下对称部分:u 中心对称部分:n 源程序:l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)* * * * *1、编程输出右图所示的图形。(x3-411)2、编程输出nn的回字形方阵。(x3-412)【第5次课: 数组10数字图形2】机号 姓 名 年 级 家长签名 1学习目标:掌握常见的直角三角形的数字图形,掌握杨辉三角形。l 常见的直角三角形的数字图形(以n=

19、5为例)。123456789101112131415136101525914481371211161013152711143812495123456789101112131415126371048111359121415162107313118415141295n 其中,是竖直向下排列;,是水平向右排列;,是斜向排列。n 解决此类问题通常有两种方法,一种方法是用归纳方法找出数字图形的规律,通过双重来实现;另一种方法是用数组来实现。161013152711143812495l 例题:编程输出右边的直角三角形的数字图形(n=5)。n 方法一(j3-51):归纳的方法n 方法二(j3-52):数组的

20、方法l 杨辉三角形n 杨辉三角形的特征如左下图:111121133114641151010511615201561172135352171111121133114641151010511615201561172135352171l 例题:编程输出n行的杨辉三角形。n 方法一(j3-53):u 问题分析:l 为便于分析,可先将杨辉三角形变化为右上图所示的图形。l 其元素的值规律如下:u 每一行的第一列元素的值和最后一列元素的值均为1即a(i,1)=1,a(i,i)=1。u 而其它列的元素(第i行,第j列)的值则等于上一行(i-1)左边一列(j-1)元素的值加上上一行(i-1)当前列(j)元素的值

21、,即a(i,j)=a(i-1,j-1)+a(i-1,j)。u 源程序:01010011001210013310014641001510105100161520156100172135352171000n 方法二(j3-54):u 问题分析:l 为便于分析,可先将杨辉三角形变化为右图所示的图形。l 其元素的值规律如下:u a(i,0)=0u a(i,i+1)=0u a(0,1)=1u a(i,j)=a(i-1,j-1)+a(i-1,j)u 源程序:l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1621073131184151412951、编程输出右边的直角三角形的数字图形(n=

22、5)。(x3-511)2、编程输出n行的杨辉三角形。(x3-512)【第6次课:字符串1】机号 姓 名 年 级 家长签名 1学习目标:掌握字符和字符串的概念,掌握字符的运算,掌握常用字符函数1。l 字符和字符串n 字符:u 指单个符号,如字母符号,数字符号以及其它特殊符号。u 在计算机内部,字符都是以ascii码表示和存储的。u 其中“0”的ascii码值是48,“a” 的ascii码值是65,“a” 的ascii码值是97。n 字符串:由一串字符组成。n 字符串长度:字符串中字符的个数。例如,u 字符串“good bye”的长度为8。u 字符串“我是一个电脑爱好者”的长度为18。u 字符串“

23、”的长度为0,也称为空串。u 字符串“ ”的长度为1,它包含一个空格,注意它与空串是不同的。l 字符串的连接运算n 运算符:&,+n 功能:把两个或多个字符串依次首尾连接起来,组成一个新的字符串。u 例如:“this is ”&“a book.”的结果是“this is a book. .”,新串的总长度为15。l 字符串的比较运算n 比较原则:u 在计算机内部,字符都是以ascii码表示和存储的,因而,比较两个字符串的大小,就是比较它们的ascii码值的大小。u “0”“9”“a”“z”“a”“z”n 比较方法:u 将两个字符串从左往右比较它们的字符,直到遇到不同的字符时为止,两个字符串的大

24、小就由此时的这两个字符的大小而定。如“china”“canda”。u 如果两个字符串已比较的字符串部分全相等,但一个串中已没有字符,而另一个串中还有字符,则长度更长的字符串大。如“whose”“who”。u 如果两个串的长度相同、对应的字符都相等,则这两个串相等。如“this”“this”。n 比较运算符:,l 练一练(j3-61):写出下面程序的运行结果dim as string a,b,c,d,ea=abc : b=abcdc=ab : d=ab : e=abcprint ab,ad,aesleepend运行结果: l 例题(j3-62):设有n个正整数(n=20),将它们连接成一排,组成

25、一个最大的多位数。例如,n=3时,输入三个正整数13、312、343,连接成的最大数为:34331213。又如,n=4时,输入四个正整数7、13、4、246,连接成的最大数为:7424613。n 问题分析:u 采用数串处理比用数值处理方便可行;u 对于字符串a和b,如何保证两个串连接后是最大的串。n 算法分析u 先将所有的数字串存入字符串数组;u 对这些字符串进行排序。本例中采用选择排序,只是条件语句用:l if a(i) + a(j)len(s),则得到空串。l 若n=0,则得到空串;若nlen(s)+1-m或省略,则得到从第m个字符起右边的所有字符。n 删除左端空格ltrim(s)u 功能

26、:删除s的左端空格。n 删除右端空格rtrim(s)u 功能:删除s的右端空格。n 删除左右两端空格trim(s)u 功能:删除s的左右两端空格。l 例题(j3-62):从键盘输入一个字符串,输出这个字符串的所有子串。l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1361015259144813712111、编程输出右边的直角三角形的数字图形(n=5)。(x3-611)2、输出右图所示的字母对称的等腰三角形(n=5)。(x3-612)ababcbabcdcbabcdedcbabcde【第7次课:字符串2】机号 姓 名 年 级 家长签名 1学习目标:掌握常用字符函数2.l 练一

27、练:(j3-71)分离出一个字符串的各字符。从键盘上输入一个字符串,然后将该字符串中的字符分离出来,存入数组后输出。l 转换函数n 数转串函数str(n)u 功能:把n的数值转换为相应的字符串。u 说明:l n是一个任一数值类型的数。l 如果是正数,则转换为字符串时, “+”不显示.l 如果是负数,则转为字符串时,前面为“-”号。l 转换后,它仅仅是一个由数字组成的字符串,不能进行数值运算了。n 串转数函数val(s)u 功能:把字符串s$转换为相应的数u 说明:l s应该是一个由合法数字组成的字符串,输出时转为相应的数。l 若s不全是由合法的数字字符所组成,则在执行val函数时,它从s的第一

28、个字符起,逐一检查每一个字符。当遇到不能转成数值的字符时中断,输出转换成功的数值,不能转换的就舍弃。n ascii码的字符函数chr(n)u 功能:将数值n作为ascii码值,输出其对应的字符。u 说明:n的值应该是一个正整数,取值范围0127。n 字符的ascii码值函数asc(s)u 功能:输出s中第一个字符的ascii码值。u 说明:asc函数输出s中字符的ascii码值。若s有多个字符,则输出其第一个字符的ascii码值。n 大写字母转小写字母函数lcase(s)u 功能:将s中的大写字母转换为小写字母。n 小写字母转大写字母函数ucase(s)u 功能:将s中的小写字母转换为大写字母

29、。l 例题(j3-72):统计一个字符串各字符出现的次数。程序要求用键盘输入一个字符串,按字符在ascii字符表中的次序输出。例如,键盘输入:“this is a book.”,则输出32346.184t197a198b1104h1105i2107k1111o2115s2n 问题分析:u 程序的输入部分:l 输入字符串s,计算它的长度l=len(s)。l 定义字符型数组a(l)和整型数组b(127):u a( )数组,每个元素放一个字符,s中有l个字符,定义a(l)就可以了;u b( )数组,字符的ascii码在基本字符集中,基本字符集的ascii码的最大值是127,所以定义b(127)。u

30、程序的处理部分:l 用一个计数循环,从头到尾对s搜索一遍,循环体中做两件事:u 取出每一个字符依次存入a()数组的相应元素中:a(i)=mid(s,i,1);u 取a(i)的ascii值作为b()数组的下标,统计a(i)字符出现的次数,累加在相应的b( )数组的元素中:b(asc(a(i)= b(asc(a(i)+1;l 计数循环结束,在b( )数组中存放的值就是各个字符出现的次数。u 程序的输出部分:l 用一个计算循环输出,循环变量的初值定为32,终值定为127,这是字符的ascii码的取值范围。l 循环体中只有一个条件语句,a(i)的值不为0时输出。n 源程序:l 查找函数instr(n,

31、s,sub)n 功能:输出sub在s中第一次出现的位置,从s中第n个字符向后查起n 说明:u 若省略n,则从头查起;若nlen(s),则输出0;u s通常称为主/母串,sub通常称为子串。u 若sub不是s的子串,即在s中查不到sub,则输出0l 例题(j3-73):求n个字符串(n20,串长255)中最长的公共子串。若最长的公共子串不止一个,则只输出最先找到的那一个。n 问题分析:u 要求n个串的公共子串,可以先设计出一个子串sub,看它是否是s1的子串,再看它是否是s2的子串;,一直到判断它是否是sn的子串。如果都是,则sub就是一个公共子串。u 问题是,应该如何来设计子串sub呢?l 可

32、以从所有的串中,选取一个最短的串存入a(1),再以该串为主,将其中的子串从长到短一一取出。l 具体方法是用一个两重循环,外循环从字符串的尾向前搜索,内循环从字符串的头向后搜索。l=len(a(1)for j=l to 1 step 1 for i=1 to l+1-jsub=mid(a(1),i,j)next jnext iu 然后,在其循环体中,再加一个循环,把其它的字符串一一调出,用查找函数去查找:for k=2 to nif instr(a(k),sub)=0 then f=0exit fornext kl 若查不到sub,instr的值就为0,就继续查找下一个sub。l 若全部查完所有

33、的字符串,f一直不为0,就输出sub。l 若全部字符串查完,都查不到,即f一直是0,就输出查不到的信息。n 源程序:l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1、 输入同学的身份证号码,输出该同学的出生日期和性别。(x3-711)例如,输入,则输出:性别:女出生日期:2001年11月6日【第8次课:字符串3】机号 姓 名 年 级 家长签名 1学习目标:灵活运用常用字符函数l 例题(j3-81):单词分离。以单词为单位分离英语句子,英语句子由键盘输入。例如,若由键盘输入:this is a book则输出为:1 this2 is 3

34、a 4 bookn 问题分析:u 英语句子的单词与单词之间是用空格来分隔的,所以用instr(a,“ ”)函数找a中空格的位置,然后一一分离。u 现在的问题是:遇到连续空格怎么办?l 方法一:每次分离出来的字符串先用一个临时字符串变量存起来,然后加一个条件语句判断它,如不是空格,再存入字符串数组的元素中。l 方法二:n 源程序:l 例题(j3-82):单词统计。用计算机来统计一段(通过键盘输入的)英语短文中各单词出现的次数。例如,输入“this is a book. this is a pen. those are two pencils.”,则输出:this2is3a2book1pen1th

35、ose1are1two1pencils1n 问题分析:u 整个程序分为三大部分:输入数据,处理数据,输出数据u 输入数据:在本部分中,定义了三个数组l s()数组,存放短文中的每个单词;l b()数组,存放短文中不同的单词;l a()数组,存放短文中不同的单词出现的次数。u 数据处理:本部分又可以进一步分为两部分l 分离单词;l 统计不同单词出现的次数。u 输出数据:l 用一个循环来输出,当a( )数组中的元素值不为0时,输出单词和它的个数。n 源程序:l 例题(j3-83):数制转换。二十六进制数之间转换的通用程序。n 问题分析:u 数制转换的程序,除了用简单数值变量和数值数组元素来处理外,

36、还可以利用字符串功能来编写,并且更为方便。u 整个程序按输入数据、处理数据和输出数据三个大部分来组织。其中处理数据(即实现数制转换)是核心。u 要实现二十六进制数之间的转换,并没有现成的直接转换方法,只有通过十进制数来中转。u 可以把这个问题加以推广,表达成这样的一个问题:要把一个m进制的数转换成p进制的数,必须分两步走:l 先把m进制的数转换成10进制的数;l 再把10进制的数转换成p进制的数。n 源程序:l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1、随机产生一个长度在9,20之间、由26个英文大写字母随机组成的字符串(字母不得重复出现)。若字符串的长度为奇数,就去掉中

37、间的一个字符;若字符串的长度为偶数,就去掉头尾两个字符。编程输出原字符串和处理后的字符串。(x3-811)2、使26个英文字母在屏幕中间回转。(x3-812)即:第一次是abcdefghijklmnopqrstuvwxyz第二次是bcdefghijklmnopqrstuvwxyza第三次是cdefghijklmnopqrstuvwxyzab最后一次是abcdefghijklmnopqrstuvwxyz【第9次课:子程序1】机号 姓 名 年 级 家长签名 1学习目标:掌握子程序的概念和子程序的实现方法,掌握函数的定义与调用。l 练一练(j3-91):组合数问题,从n个不同元素中取出m(mn)个元

38、素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数,用符号表示。且组合数的公式为:。n 算法分析:u 根据组合数的公式,不难发现组合数的计算实际转换为阶乘问题。u 首先分别求出n的阶乘,m的阶乘和(n-m) 的阶乘。u 然后用n!/(m!*(n-m)!)即可。n 源程序:l 程序的模块化n 到现在为止,如果在程序中需要多次进行同一类操作或运算,就必须多次重复书写具有这一功能的程序段。n 这样做不仅繁杂,而且还容易出错。n 理想的方法就是对同一功能的程序段只书写一次(独立模块),而后多次使用。n 整个程序由一个主程序和若干模块组成,程序总是从主程序开始执行。这样的程序结构清晰,可读性好

39、。l 子程序n 把要多次重复使用的某一段程序,单独编写在一起,称为子程序。n 子程序写好以后,就可以象系统中的标准函数一样,被多次调用了。n 子程序的实现方法:u 函数u 过程u 带标号的过程段l 练一练:写出程序的运行结果(j3-92)declare function jc(byval x as integer) as singledim as integer ss=jc(4)+jc(5)+jc(6)print s=;ssleependfunction jc(byval x as integer) as single dim as single k dim as integer i k=1

40、for i=1 to x k=k*i next jc=kend function运行结果: l 函数n 函数定义的形式:function 函数名(形式参数)as 返回值类型 函数体end functionn 函数定义的说明:u 函数从function开始,到end function结束。u 整个函数由函数头和函数体两部分组成。u 函数头:l 函数名的命名规则和变量名的命名规则相同。l 形式参数说明函数处理的对象,参数的说明包括参数的名称和类型,参数的个数没有限定。l 返回值类型是函数结果的类型。u 函数体:l 函数体的书写形式和主程序一样。l 函数的结果由函数名返回,因此在函数体内必须有赋值语

41、句将函数结果赋值给函数名。n 函数的调用:u 调用形式:函数名(实在参数)u 由于函数是有返回值的,因此函数调用不能作为一个语句,而是作为一个变量出现在表达式中。n 函数的声明:u 声明形式:declare函数头u 在调用函数前必须对函数进行声明,一般函数声明语句置于主程序的开头。l 练一练: 定义一个函数,用于求整数n的阶乘。l 例题(j3-93):组合数问题,从n个不同元素中取出m(mn)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数,用符号表示。且组合数的公式为:(用函数实现)。l 作业一、编写程序(上机编程、调试、运行,并将源程序写在下面)1、从键盘上输入两个整数a和

42、b,输出它们的最大公约数。l 方法一:不用函数实现(x3-911-1)l 方法二:用函数实现(x3-911-2)【第10次课:子程序2】机号 姓 名 年 级 家长签名 1学习目标:掌握过程的定义与调用,掌握变量的作用范围。运行结果:l 练一练:写出程序的运行结果(j3-a1)declare sub ht(byval n as integer)dim as integer ifor i=1 to 4 ht(i)next isleependsub ht(byval n as integer) dim as integer i,j for i=1 to n for j=1 to i print *;

43、 next j print next iend subl 过程n 过程定义的形式:sub 过程名(形式参数) 过程体end subn 过程定义的说明:u 过程从sub开始,到end sub结束。u 整个过程由过程头和过程体两部分组成。u 过程头:l 过程名的命名规则和变量名的命名规则相同。l 形式参数说明过程处理的对象,参数的说明包括参数的名称和类型,参数的个数没有限定。u 过程体:l 过程体的书写形式和主程序一样。n 过程的调用:u 调用形式:过程名(实在参数)u 由于过程是没有有返回值的,因此过程调用必须作为一个独立的语句。n 过程的声明:u 声明形式:declare过程头u 在调用过程前必须对过程进行声明,一般过程声明语句在主程序的开头。l 函数和过程的比较n 相同点u 调用前,都必须进行声明。u 实在参数与形式参数必须一一对应。n 不同点u 两者定义的保留字不同。u 函数有返回值,过程没有返回值。u 函数的调用不能作为一个语句,过程的调用就是一个语句。l 练一练:写出程序的运行结果(j3-a2)declare sub test运行结果

温馨提示

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

评论

0/150

提交评论