1、多媒体网络教室。六、课时安排1课时。七、教学过程教学内容、步骤与方法第一节 整装待发-认识数组一、概念例如要求一个班50名学生的平均成绩:下标变量si 用数组表示为:s(i)1、有关说明:(1).数组与普通变量一样,用来存放数据;(2).数组中的数据必须是同一类型;2、数组与循环结合for i=1 to 50input s(i)next is=0s=s+s(i)print s/50end二、数组的建立和引用1、数组的建立(1).dim (下标上界)或dim (上界1,上界2)说明: 一般情况下,下标值从0开始如:dim a(5) 即定义了a(0)、a(1)、a(5);若要修改下标起始值,可用下
2、面语句:option base noption base 1dim a(5)则定义了5个变量a(1)、a(2)、a(3)、a(4)、a(5);若数组下标上界不超过10则可不必用dim定义数组。(2)dim (n1 to n2)下标值的范围:-3276832767 数组名与变量名的定义相同; 允许在同一模块中,数组名与变量名同名,它们不代表同一对象;dim a(100)a=3 dim语句中的上界可是常数或变量、表达式; dim a(10)dim a(n)dim a(n+2)但变量值一定先赋值 定义全局数组dim shared a(50) 用dim 语句可定义变量类型dim as其中是:integ
3、er(整型)、long(长整型)、single(单精度型)、double(双精度型)、string(字符串型);但不能加类型定义符,如下写法是错误的:dim a& as long在用dim语句定义了一个变量类型后,该变量名后面加上类型定义符或不加类型定义符都是合法的,且代表同一个对象。例如:dim a as longa=123456a&=77777print a , a&运行结果如下:77777 77777但程序中不能再用a作其它类型的变量名。2、数组的引用 引用数组元素(下标变量),即在括弧中指定下标; 在程序中,数组与其它变量的使用相同,即可参与运算,可以被赋值; 在引用数组时,数组名、类
4、型、维数以及下标的范围,应与定义时一致; 同一模块中,数组和变量可同名,但数组与数组不能同名;下列情况是不允许的:dim a(10,10)或 dim a(50,50)dim a(15) dim a%(15)3、静态数组和动态数组静态数组建立数组后,其维数和大小不能改变;动态数组在程序执行教程中,可改变大小或者被释放;qbasic规定:在dim 语句中用常数指定下、上界的数组为静态数组,如果用变量(或表达式)指定上下界的数组为动态数组。(1).重定义语句redim (上界)dim s(20),x(20,30)redim s(50)redim x(30)只改变同名数组的大小,但不能改变维数;(2)
5、.释放数组语句erase释放数组所占据的空间;例1:释放和重定义数组:n=10for i=1 to na(i)=iprint a(i);printerase aredim a(16)for i=1 to 16.如果不使用erase语句释放数组,不能用dim语句对同一个数组两次定义;.用redim可改变数组的大小,而不必先用erase语句释放数组;.无论用dim或redim定义一个与原来数组同名的数组,可以改变数组中各维的上下界,而不能改变数组的维数。(3).数组上、下界函数lbound(,)下界函数ubound(,)上界函数例:input n,mdim a(n to m)for i=lboun
6、d(a,1) to ubound(a,1)dim b(10,15)for i=1 to ubound(b,1)for j=1 to ubound(b,2)b(i,j)=10*i+jprint b(i,j);next j三、数组的应用第二节 一字排开-一维数组1、一维数组只有一个下标的数组。(1).数据统计例: 输入n个学生的成绩,求平均成绩。option base 1input number of students is:;ndim s(n)sum=sum+s(i)aver=sum/nprint aver=aver 输入n个学生的学号和成绩,要求输出平均成绩和高于平均分的学生学号及成绩。dim
7、 num(n),score(n)input num(i),score(n)sum=sum+score(i)平均分是:高于平均分的学生有:学号,成绩if score(i)aver then print num(i),score(i)(2)、数据排序从键盘输入10个数。要求按由小到大的顺序将它们打印出来; 比较交换法a1、a2、a3、a4、a5、a6、a7、a8、a9、a10第一次:a1与a2、a3、a4、a5、a6、a7、a8、a9、a10比较第二次:a2与a3、a4、a5、a6、a7、a8、a9、a10比较第三次:a3与a4、a5、a6、a7、a8、a9、a10比较第四次:a4与a5、a6、a
8、7、a8、a9、a10比较第五次:a5与a6、a7、a8、a9、a10比较第六次:a6与a7、a8、a9、a10比较第七次:a7与a8、a9、a10比较第八次:a8与a9、a10比较第九次:a9与a10比较dim a(10)for i=1 to 10input a(i)for i=1 to 9for j=i+1 to 10if a(i)a(j) then swap a(i),a(j)6.选择法k=iif a(k)a(j) then k=jif ki then swap a(k),a(i)end (3).数据查找(检索) 例: 设有n个学生,每个学生的数据包括:学号、姓名、性别、年龄、平均分等;
9、要求输入一个学号,程序输出该学生的所有数据。顺序查找法假设:num(i)为学生学号,nam$(i)为姓名,num为查找对象。 sub searchif num=num(i) thennumnum(i)namenam$(i)exit forend ifif in then num ;not foundend sub折半查找法(二分查找法);对按一定规律(由小到大或由大到小)排列好的数据进行检索;假设:num(i)为按从小到大排列的学生学号,nam$(i)为姓名,num为查找对象。sub searchtop=1bot=nfind=0domid=int(top+bot)/2)if num=num(m
10、id) thenfind=1elseif numnum(mid) thentop=mid+1loop until (bottop) or (find=1)if find=0 then num ;2、二维数组矩阵的表示:aij双下标变量 a(i,j)二维数组数组定义:dim a(m,n)a(i,j)b(j,i) 输出魔阵每行、每列和对角线之和均相等。排列规律:(1)、先将“1”放在第一行当中;(2)、从“2”开始到n*n止,各数中每一个数存放的行比前一个数的行数减1,列数加1;(3)、如果上一个数的行数为1,则下一个数的行数为n(最后一行);(4)、当上一个数的列数为n时,下一个数的列数为1,行数减1;(5)、如下一个数应放的位置已被其它数占据,则下一个数放在上一个数的下面。四、过程中的数组参数1、作为下标变量子程序定义:sub a(x,y)调用:dim t(10)call a(t(1),t(2)2、作为数组:定义 :调用 call b(p(),g()将主程序中的p、g传给子程序中的a,b 数组传递采取“地地传递”方式。即子程序中对形象参值的修改,将会改变实参值教学后记:可在这填写你的名称YOU CAN FILL IN THE NAME Here