ios 移动数组元素位置移动位置,用Dim声明数组s并利用Array函数给数组s赋值,由文本框输入要移动的位置数,通过单选按钮

君,已阅读到文档的结尾了呢~~
[高中教育]vb程序教程第7章 数组、子程序和函数第7章 数组7.1 数组的概念 7.2 动态数组 7.3 控件数组 7.4 数组排序 第7章 数组、子程序和函数引入数组的原因:我们处理大量数据的问题,如排序、统计、矩 阵运算等等,很难用已有知识解决,因..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[高中教育]vb程序教程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
【精品】ch7
下载积分:750
内容提示:【精品】ch7
文档格式:PPT|
浏览次数:4|
上传日期: 06:37:02|
文档星级:
全文阅读已结束,如果下载本文需要使用
 750 积分
下载此文档
该用户还上传了这些文档
【精品】ch7
关注微信公众号君,已阅读到文档的结尾了呢~~
[工学]新版VB课件第6章新版VB课件第6章
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[工学]新版VB课件第6章
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口数组与字符串的相互转化
&script type="text/javascript"&var obj="new1abcdefg".replace(/(.)(?=[^$])/g,"$1,").split(",");
//字符串转化为数组
var obj2 = "new2abcdefg".split("");
//字符串转化为数组alert(obj);alert(obj.length);alert(obj instanceof Array);alert(obj.join(""));
//数组转化为字符串&/script&
================================================
js数组的操作
1、数组的创建
var arrayObj = new Array(); //创建一个数组
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值
要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍
然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。
2、数组的元素的访问
var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值
3、数组元素的添加
arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返
回数组新长度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位
置的元素自动后移,返回""。
4、数组元素的删除
arrayObj.pop(); //移除最后一个元素并返回该元素值
arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所
移除的元素
5、数组的截取和合并
arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制
start 之后的所有元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接
为一个数组,返回连接好的新的数组
6、数组的拷贝
arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
7、数组元素的排序
arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
arrayObj.sort(); //对数组元素排序,返回数组地址
8、数组元素的字符串化
arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用
二、数组对象的3个属性
1、length 属性
Length属性表示数组的长度,即其中元素的个数。因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length
-1。和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。当length属性被设置得更大时
,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或
等于length的元素的值全部被丢失。下面是演示改变length属性的例子:
var arr=[12,23,5,3,25,98,76,54,56,76];
//定义了一个包含10个数字的数组
alert(arr.length); //显示数组的长度10
arr.length=12; //增大数组的长度
alert(arr.length); //显示数组的长度已经变为12
alert(arr[8]); //显示第9个元素的值,为56
arr.length=5; //将数组的长度减少到5,索引等于或超过5的元素被丢弃
alert(arr[8]); //显示第9个元素已经变为"undefined"
arr.length=10; //将数组长度恢复为10
alert(arr[8]); //虽然长度被恢复为10,但第9个元素却无法收回,显示"undefined"
由上面的代码我们可以清楚的看到length属性的性质。但length对象不仅可以显式的设置,它也有可能被隐式修改。
JavaScript中可以使用一个未声明过的变量,同样,也可以使用一个未定义的数组元素(指索引超过或等于length的元素),这
时,length属性的值将被设置为所使用元素索引的值加1。例如下面的代码:
var arr=[12,23,5,3,25,98,76,54,56,76];
alert(arr.length);
arr[15]=34;
alert(arr.length);
代码中同样是先定义了一个包含10个数字的数组,通过alert语句可以看出其长度为10。随后使用了索引为15的元素,将其赋
值为15,即 arr[15]=34,这时再用alert语句输出数组的长度,得到的是16。无论如何,对于习惯于强类型编程的开发人员来说
,这是一个很令人惊讶的特性。事实上,使用new Array()形式创建的数组,其初始长度就是为0,正是对其中未定义元素的操作
,才使数组的长度发生变化。
由上面的介绍可以看到,length属性是如此的神奇,利用它可以方便的增加或者减少数组的容量。因此对length属性的深入
了解,有助于在开发过程中灵活运用。
2、prototype 属性
返回对象类型原型的引用。prototype 属性是 object 共有的。
objectName.prototype
objectName 参数是object对象的名称。
说明:用 prototype 属性提供对象的类的一组基本功能。 对象的新实例“继承”赋予该对象原型的操作。
对于数组对象,以以下例子说明prototype 属性的用途。
给数组对象添加返回数组中最大元素值的方法。要完成这一点,声明一个函数,将它加入 Array.prototype, 并使用它。
function array_max( )
var i, max = this[0];
for (i = 1; i & this. i++)
if (max & this[i])
max = this[i];
Array.prototype.max = array_
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );
该代码执行后,y 保存数组 x 中的最大值,或说 6。
3、constructor 属性
表示创建对象的函数。
object.constructor //object是对象或函数的名称。
说明:constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对
象。constructor 属性保存了对构造特定对象实例的函数的引用。
x = new String("Hi");
if (x.constructor == String) // 进行处理(条件为真)。
function MyFunc {
// 函数体。
y = new MyF
if (y.constructor == MyFunc) // 进行处理(条件为真)。
对于数组来说:
y = new Array();
使用数组? 基本操作
var a=new Array("cctv","sxtv","tytv");
var a=new Array(3);
var a=new Array();
a[0]="cctv";
a[1]="sxtv";
a[2]="tytv";
a[3]="xzy";
for(i=0;i&a.i++)
document.writeln(a[i]);
&/script&? 多维数组
&script&var rows= new Array();rows[0]=new Array(5);rows[1]=new Array(5);
rows[0][0]="你好";rows[0][1]="邢志云";
if(rows[0][0]!=null){ alert(rows[0][0]);}
可以像上边那样简单的依次赋值,也可以像下边的这样:&script&var xzy=new Array();xzy=[1,2,3,4,5,"邢志云","嘿嘿"];//给数组xzy赋值for(var i=0;i&xzy.i++){ alert(xzy[i]);}&/script&也可以直接赋值成多维数组&script&var s=["你好",["中国","太原","邢志云"],[3,3333],[4,4444],[5,5555],["0",["a","b","c"]],"cc"];//
alert(s);//你好,中国,太原,邢志云,3,4,5,5555alert(s[1]);//中国,太原,邢志云alert(s[1][2]);//邢志云alert(s[2][0]);//3alert(s[2][1]);//3333alert(s[5][1][0]);//aalert(s[5][1][2]);//calert(s[6]);//cc&/script&
push:数据可以向最后的追加元素
var arr=new Array()arr[0]="xbc1";arr[1]="bcx2";arr[2]="cctv3";arr[3]="xctv4";arr.push("邢志云");//向最后追加,也可以同时push多个arr.push("0123");for(i=0;i&arr.i++){ if(arr[i]!=null) document.writeln(arr[i]);}
pop:弹出最后一个元素,后进先出
var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; s=arr.pop();//弹出最后一个元素,把值付给s,并删除最后一个元素 alert(s); for(i=0;i&arr.i++) {
document.writeln(arr[i]); } //显示: a1 a2 a3unshift:插入到第一个之前,
var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; arr.unshift("第一","第二");//插到第一个元素之前,后面的整体后移 for(i=0;i&arr.i++) {
document.write(arr[i]+":"); } //显示: 第一:第二:a1:a2:a3:a4:? shift:弹出第一个元素,先进先出 var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; s=arr.shift();//弹出第一个元素,把值付给s,并删除第一个元素 alert(s); for(i=0;i&arr.i++) {
document.writeln(arr[i]); } //显示: a2 a3 a4join:利用数组的join方法,连接所有的数组内容
数组的join(string val)可以将数组元素连接起来,并且用中间插入val,当在网页上交互显示下拉框内容的时候可以将内容加载到数组内,再利用innerHTML将内容显示在出来
var a=new Array("cctv","sxtv","tytv");
var a=new Array(3);
var a=new Array();
a[0]="cctv";
a[1]="sxtv";
a[2]="tytv";
a[3]="xzy";
document.writeln(a.join('&br&'));//如果直接用a.join(),则默认会用,分割
&/script&显示:cctvsxtvtytvxzy 用这种方式连接字符串要比 s=s+”ddd”快的多sort:数组排序 (从小到大)
var arr=new Array(1000)arr[0]="xbc1";arr[1]="bcx2";arr[2]="cctv3";arr[5]="xctv4";arr.sort();for(i=0;i&arr.i++){ if(arr[i]!=null) document.writeln(arr[i]);}? reverse:数组反向,和sort配合使用能实现从大到小排序 var arr=new Array() arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; arr.push("邢志云"); arr.push("0123"); //arr.sort(); arr.reverse();//数组反向排列 for(i=0;i&arr.i++) {
document.writeln(arr[i]); } //显示: 0123 邢志云 a4 a3 a2 a1
slice:数组截断后赋值给另外一个数组(不改变原始数组)var xzy1=new Array();xzy1=["a","b","c","hello","usa","eng"];//
5var xzy2=xzy1.slice(2,4);//从数组xzy1的2号元素开始到4号元素停止的值结束转成一个数组for(var i=0;i&xzy2.i++){ document.write(xzy2[i]+":");//显示c hello}也可以这么写&script&var xzy1=new Array();xzy1=["a","b","c","hello","usa","eng"];//
5var xzy2=Array.prototype.slice.call(xzy1,2,4);//从数组xzy1的2号元素开始到4号元素停止的值结束转成一个数组for(var i=0;i&xzy2.i++){ alert(xzy2[i]);//显示c hello}&/script&
? splice:数组截断或清空(改变原始数组) var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; arr[4]="a5"; arr[5]="a6"; var arr2=arr.splice(3,2,"x1","x2");//从3号开始的2个元素,用x1和x2替换,并把替换下的值重新赋给数组arr2
//如果没有参数"x1","x2",则对应的2个元素会从arr中删除,后面的前推 for(i=0;i&arr.i++) {
document.write(arr[i]+":");//显示: a1:a2:a3:x1:x2:a6: }
document.write("&br/&"); for(i=0;i&arr2.i++) {
document.write(arr2[i]+":");//显示:
a4:a5: }? 利用splice来清空数组 var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; arr[4]="a5"; arr[5]="a6"; alert(arr.length);//显示6 arr.splice(0,);//可以理解为把arr数组清空,又回到初始状态 alert(arr.length);//显示0
? concat:数组连接 var arr=new Array(); arr[0]="a1"; arr[1]="a2"; arr[2]="a3"; arr[3]="a4"; arr[4]="a5"; arr[5]="a6"; var arr2=["b1","b2","b3"]; var arr3=arr.concat(arr2); for(i=0;i&arr3.i++) {
document.write(arr3[i]+":");//显示: a1:a2:a3:a4:a5:a6:b1:b2:b3: }? 使用Mapmap1:&script&
var map = {};
map["张三"] = "";map["李四"] = "5";map["王五"] = "";
alert(map["李四"]);&/script&
用map={}就可以把map清空;map2:&script&
var map = new Array();
map["张三"] = "";map["李四"] = "5";map["王五"] = "";
alert(map["李四"]);//显示:5alert(map.length);//这里map.length显示为0
map[0] = "";map[1] = "";map[2] = "";alert(map.length);//这里map.length显示为3for(var i=0;i&map.i++){ document.write(map[i]);}alert(map["李四"]);//显示:5&/script&map3:var map={"姓名":"邢志云","性别":"男","年龄":34}map.婚否="已婚";//可以动态添加eval("map.国籍='中华'");//但map.后面的标识符只能是以字符开头的,并且不能有-所以全球标识符不宜用在这里alert(map.国籍);//alert(map.姓名);//邢志云//alert(map.年龄);//34map["民族"]="汉族";//也可以像第一条中那样赋值,但这种可以用任意串做键,如: map["1-2"]="汉族";alert(map.姓名
+":"+map["1-2"]);//也能正常显示alert(map.姓名+":"+map.民族);for(var colname in map){ alert(colname );//姓名 性别 年龄 婚否}for(var colname in map){ alert(map[colname]);//邢志云 男 34 已婚}还可以这样var s="'姓名':'邢志云','性别':'男',35:'年龄'";eval("var map={"+s+"}");alert(map["姓名"]);或者var s="姓名:'邢志云',性别:'男',35:'年龄'";eval("var map={"+s+"}");alert(map["姓名"]);还可以嵌套var map={"人员":{"张三":"男","赵六":"女"},
"车辆":{"桑塔纳":"6万","别克":"10万"},
"年龄":34}alert(map.人员.赵六);//女alert(map.车辆.桑塔纳);//6万使用自定义的属性的数组var a=new Array();a[0]={};a[0].姓名="邢志云";a[0].年龄=32;
a[1]={};a[1].姓名="李四";a[1].年龄=28;for(var i=0;i&a.i++){ alert(a[i].姓名+":"+a[i].年龄);}
浏览 156597
浏览: 704830 次
来自: 深圳
不错,赞一个。尤其是这个,在查找指定目录下,列出所有包含某个字 ...
你好,请问Start这个参数怎么使用不了?
xml进行修改之后 刷新请求 不执行 看了你的博文解决
没有想到还有map的概念
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'当前位置: >>
vb课件――第五章-数组
第五章 数组从存储角度看, 从存储角度看 ,前面使用的变量都是 相互独立的、 相互独立的 、 无关的 无关的, , 通常称它们为简 单变量。 单变量 。但如果处理将200个学生的成绩 按大小顺序排序这类问题, 按大小顺序排序这类问题 , 只使用简单 变量将会非常麻烦, 变量将会非常麻烦 , 而利用数组却很容 易实现。 易实现 。 5.1 数组的概念 5.2 一维数组 5.3 二维数组 5.4 动态数组 5.5 控件数组 5.1 数组的概念在实际应用中, 在实际应用中 , 常常需要处理相同类型的一批数 常常需要处理相同类型的 批数 据。例如 例如, ,为了处理100个员工的工资 个员工的工资, ,可以用S(1), S(2),…, S(100)来分别代表每个员工的工资, 来分别代表每个员工的工资, 其中 S(1)代表第 代表第一个员工的工资 个员工的工资,S(2)代表第二 个员工的工资, 个员工的工资……。在VB中,把一组相互关系密切的 数据放在一起并用一个统一的名字作为标志, 数据放在一起并用一个统一的名字作为标志 , 这就是 数组。 数组 。 数组中的每 数组中的每一个数据称为 数组中的每一个数据称为数组元素 个数据称为数组元素,用数组 个数据称为数组元素 数组元素,用数组 用数组 名和该数据在数组中的序号来标识。序号 又称为下标 又称为 下标, , 例如,S(2)是一个数组元素,其中的S称 为数组名,2是下标。在使用数组元素时, 必须把下标放在一对紧跟在数组名之后的 必须把下标放在 对紧跟在数组名之后的 括号中。S(3)是一个数组元素,而S3是 一个简单变量。 如果只用 个下标就能确定某个数组元素在 如果只用一个下标就能确定某个数组元素在 数组中的位置,这样的数组称为一维数组。 数组中的位置,这样的数组称为 维数组。如果用两个或多个下标才能确定某个数组元 素在数组中的位置,则数组分别称为二维 数组或多维数组。 数组或多维数组 5 2 一维数组 5.2 维数组一、 一维数组的定义 维数组的定义数组应当先定义后使用。 数组应当先定义后使用 。 数组的定义又称为数组的声明或说明。 数组的定义又称为数组的声明或说明 。 对于固定大小的一维数组, 对于固定大小的 维数组,用如下格式进行定义: 对于固定大小的一维数组 用如下格式进行定义 说明符 数组名 数组名( (下标 下标) )[As 类型] 例如:Dim y(5)As Integer 定义了一个一维数组,该数组的名字为y,类型为 Integer,占据6个(0~5)整型变量的空间。 整型变量的空间。 说明: (1)“说明符”为保留字,可以为Dim,Public, Private,Static中的任意一个。在使用过程中可以根据实 际情况进行选用。定义数组后,数值数组中的全部元素 都初始化为0,字符串数组中的全部元素都初始化为空字 字符串数组中的全部元素都初始化为空字 符串。 (2)“数组名”的命名遵守标识符规则。 数组名 的命名遵守标识符规则 (3)“下标”的一般形式为“[下界 to] 上界”。 下 标的上界、下界为整数,不得超过Long数据类型的范围, 并且下界应该小于上界。如果不指定下界,下界默认为 并且下界应该小于上界。 如果不指定下界,下界默认为0。 (4)要注意区分“可以使用的最大下标值”和“元 素个数”。 ( 5 ) “ As 类型 类型” ” 用来说明 用来说明“ “ 数组元素 数组元素” ” 的类型 的类型, , 可以是 Integer , Long , Single , Double , Currency , String(定长或变长 定长或变长) )等基本类型或用户定义的类型 等基本类型或用户定义的类型, , 也可以是 Variant 类型 类型。 。 如果省略 如果省略“ “ As 类型 类型” ” , 则数组 为Variant类型 类型。 。 (6)在同一个过程中, 在同一个过程中,数组名不能与变量名同名, 数组名不能与变量名同名, 否则会出错。 否则会出错 。 (7)可以通过类型说明符来指定数组的类型。 可以通过类型说明符来指定数组的类型。 例如 Dim A%(5),B!(3 To 5),C#(12) 例如: 二、一维数组的引用 维数组的引用 数组的引用通常是对数组元素的引用。 数组的引用通常是对数组元素的引用 。 一维数 维数 组元素的表示形式为: 式 数组名( 数组名 (下标 下标) ) 一般通过循环语句及InputBox 一般通过循环语句及 InputBox函数 函数、 、 文本框给 数组输入数据。 数组输入数据 。 数组的输出一般用 数组的输出一般用Print Print方法 方法、 、标 签或文本框实现。 签或文本框实现 。 【例】编写程序 编写程序, ,把输入的10个整数按逆序输出 个整数按逆序输出。 。 Private Sub Command1 Command1_Click() Dim a(10)As Integer,i% Print &输入的数据为& For i = 1 To 10 a(i)= InputBox I tB (&请输入一个整型数 请输入 个整型数&) Print a(i), Next i Print Print &逆序输出为& p -1 For i = 10 To 1 step Print a(i), Next i End Sub 三、一维数组的应用举例 维数组的应用举例【例】从键盘上输入 从键盘上输入40 40人的考试成绩 人的考试成绩,输出高于 人的考试成绩, 平均成绩的分数。 平均成绩的分数 。 分析:该问题可分三部分处理:一是输入 分析:该问题可分三部分处理: 分析 :该问题可分三部分处理:一是输入40 :该问题可分三部分处理: 是输入 40 是输入40 个人的成绩;二是求平均分;三是把这40 个人的成绩;二是求平均分;三是把这 个人的成绩; 是求平均分; 是把这40个分数 个分数 逐一和平均成绩进行比较, 逐一和平均成绩进行比较 ,若高于平均成绩 若高于平均成绩, ,则 输出。 输出 。 程序如下: Private Sub Command1_Click() Dim score(40)As Single g ,aver!,i% aver = 0 For i = 1 To 40 score(i)= InputBox(&请输入成绩&) aver = aver + score(i) Next i aver = aver / 40 For i = 1 To 40 If score(i)& aver Then Print score(i) Next i End Sub 【例】随机产生15 随机产生15个不重复的 个不重复的A A-Z。Option Base 1 P i t Sub Private S b Form_Load() F L d() Dim s(15) As String * 1 Dim c As String * 1 Dim found As Boolean Dim n%, j% Show n=1 Randomize Do While n &= 15 c = Chr(Int(26* Ch (I t(26* R Rnd d + 65)) found = False For j = 1 To n - 1 If s(j) = c Then found = True Next j If Not found Then s(n) = c n=n+1 End If Loop Print P i t Tab(10); T b(10) For n = 1 To 15 Print s(n); Spc(3); If n Mod 5 = 0 Then Print Tab(10); E d If End Next End Sub 【例】从键盘上输入10个整数,把这些数按由小到大 的顺序排序输出。 的顺序排序输出 排序的方法很多,如选择法、冒泡法等。这里介 绍最容易理解的“冒泡法 绍最容易理解的“ 冒泡法” 冒泡法”。 ” ”。 设10个数存放在A数组中,分别为:A(1)、A (2)、A(3)、A(4)、A(5)、A(6)、A(7)、 A(8)、A(9)、A(10)。 第1轮:先将A(1)与A(2)比较,若A(1)> A(2),则将A(1)、A(2)的值互换,否则,不 作交换 这样处理后 A(1)一定是 作交换;这样处理后, ) 定是A(1)、 ) A(2) 中的较小者。 再将A(1)分别与A(3)、…、A(10)比较, 并且依次作出同样的处理。最后,10个数中的最小者 放入了A(1)中。 )中 第2轮:将A(2)分别与A(3)、…、A(10)比 较 并依次作出同第1轮一样的处理。最后,第 较,并依次作出同第 轮 样的处理 最后 第1轮余 下的9个数中的最小者放入A(2)中,亦即A(2)是 10个数中的第二小的数。 照此方法,继续进行第3轮… … 直到第9轮后,余下的A(10)是10个数中的最大 者 者。 至此,10个数已从小到大顺序存放在A(1)~A (10)中。 为简单起见 我们以7,5,3三个数为例,再做说 为简单起见,我们以 三个数为例 再做说 明: 第1轮:找出最小值3作为第 作为第一个数组元素 个数组元素 7 5 3 比较7和5,7>5,需要交换,交换后的序 列为5 7 3; 5 7 3 比较5和3,5>3,需要交换,交换后的序 列为3 7 5; 第2轮:找出剩下的元素中的最小值5作为第二个 数组元素 3 7 5 比较7和5,7>5,需要交换,交换后的序列 为3 5 7。 剩下的一个元素7为三个元素中的最大者,排序完 成。 程序如下: Private Sub Command1_Click() Dim t%,i%,j%,a(10)As Integer For i = 1 To 10 a(i)= InputBox(&输入一个整数&) Next i Print &输入的10个整数为& For i = 1 To 10 Print a(i), Next i Print For i = 1 To 9 For j = i + 1 To 10 If a(i)& a(j)Then t = a(i):a(i)= a(j):a(j)= t Next j Next i Print &排序后的结果为& For i = 1 To 10 Print a(i), Next i End Sub 【例】随机产生10个两位整数,找出其中最大值、最 小值。 分析:该问题可以分为两部分处理:一是产生 分析:该问题可以分为两部分处理: 是产生10 个随机整数,并保存到一维数组中;二是对这10个整 数求最大 最小值 数求最大、最小值。 程序代码为: Private Sub Command1_Click() Dim min%,max%,i%,a(10)As Integer Randomize For i = 1 To 10 a(i)= Int(Rnd * 90+ 10) Next i Print &产生的随机数为& For i = 1 To 10 Print a(i), Next i Print min = a(1):max = a(1) For i = 2 To 10 If a(i)& max Then max = a(i) If a(i)& min Then min = a(i) Next i Print &最大值为 最大值为“;max Print &最小值为“;min End Sub 5.3 二维数组 维数组假如有30个学生 个学生, ,每个学生有5门考试成绩 门考试成绩, ,如何 来表示这些数据呢? 来表示这些数据呢 ?VB中可以用有两个下标的数组来 表示, 表示 , 如第 i 个学生第 j 门课的成绩可以用 S ( i , j ) 表 示 。 其中 i 表示学生号 表示学生号, , 称为行下标 称为行下标( (i=1,2,…, 30 ) ; j 表示课程号 表示课程号, , 称为列下标 称为列下标( (j=1,2,3,4, 5)。有两个下标的数组称为二维数组。 有两个下标的数组称为二维数组。 一 一、定义:二维数组的定义对于固定大小的二维数组,可以用如下格式进行 说明符 数组名([下界to] ]上界, 上界 [下界to] ]上界)[As [A 类型] 例如:Dim T(2,3)As Integer定义了一个二维 数组,名字为T,类型为Integer,该数组有3行(0~2) 列(0~3),占据 占据12(3×4)个整型变量的空间,如 个整型变量的空间 如 4列 图所示。
说明: (1)可以将二维数组的定义方法推广至多维数组 的定义。 的定义 。 例如:Dim D(3,1 To 10,1 To 15)定义了一个 3维数组 维数组, ,大小为 4 × 10 × 15。注意在增加数组的维 数时, 数时 , 数组所占的存储空间会大幅度增加 数组所占的存储空间会大幅度增加, , 所以要慎 用多维数组, 用多维数组 ,尤其是Variant 数组 数组, ,因为他们需要更大 的存储空间。 的存储空间 。 (2)在实际使用时 在实际使用时, ,可能需要数组的上界值和下 界值, 界值 , 这可以通过 LBound 函数和 UBound 函数来求得 函数来求得。 。 其格式为: LBound(数 数组名[,维]) UBound(数组名[,维]) 这两个函数分别返回一个数组中指定维的下界和 这两个函数分别返回 个数组中指定维的下界和 上界。 上界 。 二、二维数组的引用二维数组的引用和一维数组基本相同, 二维数组的引用和一维数组基本相同 ,格式为: 数组名( 数组名 (下标1,下标2) 对二维数组进行赋值或输出时, 对二维数组进行赋值或输出时 , 一般采用二重循 环来实现。 环来实现 。 三、二维数组的应用举例【 例 】 打印 4 名同学的英语 名同学的英语、 、 数学 数学、 、 法律 3门课的考试 成绩, 成绩 ,并计算出每个同学的平均成绩。 并计算出每个同学的平均成绩。 分析:把4名同学的姓名及各科的考试分数分别存 入一个一维字符串数组 入 个 维字符串数组xm(4)和 和一个二维数值数组 个二维数值数组a ( 4, 3) 中 , 然后对数组( 然后对数组 ( 主要是二维数组) 主要是二维数组 ) 进行处 理。 程序如下: Private Sub Command1_Click()Dim a(4,3)As Single,xm(4)As String * 10,i%,j%,aver!Print Tab(25);&成绩表& Print Print &姓名&;Tab(15);&英语&;Tab(25);&数学&; Print Tab(35);&法律&;Tab(45);&平均分& Print For i = 1 To 4 aver = 0 xm(i)= InputBox(&输入姓名&) Print xm(i); For j = 1 To 3 a(i,j)= InputBox(&输入& & xm(i)& &的一个成绩 &) aver = aver + a(i,j) Next j aver = aver / 3 Print Tab(15);a(i,1);Tab(25);a(i,2); Print Tab(35);a(i,3);Tab(45);aver Print Next i End Sub 1、dim intA( intA(-3 to 5) as integer 数组元素的初值?应为数组预留几个字节? 2、如何给数组元素赋初值? 如何给数组元素赋初值? 利用循环结构 利用Array 利用 Array函数( 函数(P103 P103) ) 3、求数组中最大元素及所在下标Option Base 1 Private Sub Command1_Click() Dim arr1, Max as Integer y( , 435, , 76, , 24, , 78, , 54, , 866, , 43) ) arr1 = Array(12, = arr1(1) For i = 1 To 8 If arr1(i) & Max Then Next I Print &最大值是: &; Max Print “下标是: &; j End Sub 4、程序运行后,按回车键,其输出结果为A) 48 4 B) 237 1 C) 498 5 D) 498 4 5 4 动态数组 5.4定义数组,是用数值常数或符号 常量定义数组的维数及下标的上、下 界。 di a(10) dim (10) as i integer t 或 const n=10 dim a(n) as integer VB编译程序在编译时为数 VB编译程序在编译时为数 组分配了相应的存储空间,并 且在应用程序运行期间,数组 在应用程序运行期间 数组 一直占据这块内存区域 这样 一直占据这块内存区域,这样 的数组称为固定数组( 的数组称为固定数组 (静态数 组) 。 但是 在实际应用中 有时事先无 但是,在实际应用中,有时事先无 法确定到底需要多大的数组,数组应定 义多大,要在程序运行时才能决定。用 户为了程序的通用性,声明数组的上界 户为了程序的 用性 声明数 的 界 用变量来表示,如下程序段: n=inputbox(“输入数组的上界 输入数组的上界” ”) dim a(1 to n) as integerw 解决问题的方法,一是将数组声明 解决问题的方法 解决问题的方法,一是 一是将数组声明 的很大,如: Dim a(10000) ( ) as integer 如果定义的数组过大,显然会造成 如果定义的数 大 然会 成 内存空间的浪费。 二是利用动态数组,即可调数组。 二是利用动态数组,即可调数组。 可调数组提供了 种灵活有效的管 可调数组提供了一种灵活有效的管 理内存机制,能够在程序运行期间可以 根据用户的需要随时改变数组的大小及 根据用户的需要随时改变数组的大小 维数。 一、动态数组的定义 动态数组的定义动态数组的定义分为两步: 第一步:声明一个没有下标参数的数组。 说明符 数组名()[As 类型]第二步:引用数组前用 ReDim语句重新定义。 ReDim [Preserve] 数组名([下界 to ] 上界[, [下界 to ] 上界……])[As 类型] 例如: Private Sub Command1_Click() Dim a()As Integer Dim n% …… n = Val(InputBox(&input input n n&)) ReDim a(n) …… End Sub 说明: (1)格式中的“说明符”、“ 数组 名” “ 类型”等说明同一维数组的定 名”、“ 类型”等说明同 维数组的定 义。 (2)下界、上界可以是常量,也可 以是有了确定值的变量。 以是有了确定值的变量 (3)ReDim语句用来重新定义数组, 能改变数组的维数及上、下界,但不能 用其改变可调数组的数据类型,除非可 用其改变可调数 的数据类型 除非可 调数组被声明为Variant类型。 (4)每次使用ReDim语句都会使原来 数组中的值丢失,可以在ReDim后加 Preserve参数来保留数组中的数据。 参数来保留数组中的数据 (5)ReDim语句只能出现在过程中。 Dim a() () As Integer g Dim size As Integer Private Sub Command2_Click() Command2 Click() size = InputBox(“输入:”) ReDim a(size) ... ... End Sub 二、动态数组的应用举例 动态数组的应用举例【例】编程输出Fibonacci数列:l,1,2,3, 5 8 ……的前n项。 5,8, 项本例要求输出前n项,n是一个变量,因此,应该使用 可调数组。 可调数组 程序代码如下: Private Sub b Command1_Click() d1 l k() Dim Fib(),i%,n% 避免溢出 定义数组为V i t类型 ‘ 避免溢出,定义数组为Variant类型 n = InputBox(&输入n的值(n&1)&) R Di Fib(n) ReDim Fib( ) Fib(1)= 1:Fib(2)= 1 F i = 3 To For T n Fib(i)= Fib(i - 1)+ Fib(i - 2) Next i For i = 1 To n Print t Fib b(i), If i Mod 5 = 0 Then Print '每行输出5个数 Next i End Sub 5 5 控件数组 5.5一、控件数组的概念在实际应用中, 在实际应用中 ,我们有时会用到一些类型 相同且功能类似的控件。 相同且功能类似的控件 。如果对每一个控件都 如果对每 个控件都 单独处理, 单独处理 ,就会多做一些麻烦而重复的工作 就会多做一些麻烦而重复的工作。 。 这时, 这时 ,我们可以用控件数组来简化程序。 我们可以用控件数组来简化程序。 控件数组由一组相同类型的控件组成,这些控件 共用一个控件名字,具有相似的属性设置,共享同样 的事件过程 控件数组中各个控件相当于普通数组中 的事件过程。控件数组中各个控件相当于普通数组中 的各个元素,同一控件数组中各个控件的Index属性相 当于普通数组中的下标。 比如 假设有 个包含3个按钮的控件数组 比如,假设有一个包含 Command1,它的3个元素就是Command1(0), Command1(1),Command1(2)。 二 控件数组的建立 二、控件数组的建立控件数组中每一个元素都是控件,它的定义方式 与普通数组不同。可以通过以下两种方法建立控件数 组。 方法 方法一:复制已有的控件并将其粘贴到窗体上。 复制已有的控件并将其粘贴到窗体上 方法二 将窗体上已有的类型相同的多个控件的 方法二:将窗体上已有的类型相同的多个控件的 Name属性设置为同 值。 Name属性设置为同一值。 三、控件数组的应用举例建立了控件数组之后, 建立了控件数组之后 ,控件数组中所有控件共享 同一事件过程。 同一事件过程 同 事件 程 。 例如 例如, , 假定某个控件数 假定某个控件数组含有 假定某个控件数组含有10 含有 10个标 个标 签,则不管单击哪个标签 则不管单击哪个标签, ,系统都会调用同一个 系统都会调用同一个Click Click 过程。 过程 。 由于每个标签在程序中的作用不同, 由于每个标签在程序中的作用不同 , 系统会将 被单击的标签的Index 被单击的标签的 Index属性值传递给过程 属性值传递给过程,由事件过程 属性值传递给过程, 根据不同的Index 根据不同的 Index值执行不同的操作 值执行不同的操作。 。 【 例 】 设计 设计一个简易计算器 设计一个简易计算器, 个简易计算器 , 能进行整数的加 能进行整数的加、 、减、 乘、除运算 除运算。 。其运行界面如图所示 其运行界面如图所示。 。 界面设计: 一个标签用于计算器输出; 个标签用于计算器输出; 数字按钮控件数组Number; 操作符控件数组Operator; 一个“ 一个 个“=”按钮用于计算结果; 按钮用于计算结果 一个 一个“ 个“Cls”按钮用于清屏。 按钮用于清屏 按 用于清屏。
程序如下: ' 窗体级变量声明 Dim op op1 1 As Byte ' 用来记录前面输入的操作符 Dim ops ops1 1&,ops ops2 2& ' 两个操作数 Dim res As Boolean ' 用来表示是否已算出结果 P i t Sub Private S b clear_Click l Cli k() dataout. dataout .Caption = && E d Sub End S b P i Private S b Form_Load Sub F L d() res = False End Sub ' 按下数字键0~9的事件过程 Private vate Sub number u be _C Click c (i1 As s Integer tege ) If Not res Then dataout.Caption = dataout.Caption & i1 Else dataout.Caption = i1 res = False F l End If End Sub ' 按下操作键+、-、 、-、× ×、/的事件过程 Private Sub operator_Click(i2 As Integer) ops1 = dataout.Caption op1 = i2 ' 记下对应的操作符 dataout.Caption = && End Sub ' 按下=键的事件过程 Private Sub result_Click() ops2 p =dataout.Caption p Select Case op1 Case 0 p = ops1 p + ops2 p dataout.Caption Case 1 dataout.Caption = ops1 - ops2 Case 2 d t dataout.Caption t C ti = ops1 1 * ops2 2 Case 3 dataout.Caption = ops1 / ops2 End Select res = True End Sub ' 已算出结果 5 6 自定义数据类型 5.6学生情况学号 姓名 性别 课程1 课程2 课程3 课程4 总分 101 张玉 女 102 李芯 女 89 80 ……. 67 89 90 67 76 90 是与标准数据类型相对应的,是为了解决 是与标准数据类型相对应的 是为了解决 内部包含不同数据类型的数据而进行定义的, 它由若干个标准数据类型组成。一、定义: 定义type 自定义类型名 元素名[(下标)] as 数据类型名 … 元素名[(下标)] as 数据类型名 end type Type studtype no as integer name as string*12 gender as string*1 mark(1 to 4) as single t t l as single total i l end type 注意: 1.自定义类型一般在标准模块(.bas)中定义。否则在 Type前加private。 2.元素类型可以是字符串,但应是定长字符串 3 自定义类型名是一种数据类型 3. 自定义类型名是 种数据类型, 不要与变量名弄混淆 了 4 区分自定义数据类型与数组的异同 4. 二、自定义数据类型的声明、使用及赋值 、自定义数据类型的声明、使用及赋值1、 声明Dim 变量名 as 自定义类型名 如: Dim student as studtypeType studtype no as integer name as string*12 gender as string*1 mark(1 to 4) as single total as single end type2、 使用变量名.元素名 姓名: student.name 第四门课的成绩: student.mark(4) 3、 赋值Dim student As studtype Dim mystud As studtype With student .no = 5 .name = &孙国花& .gender = “女” F i = 1 To For T 4 .mark(i) = Int(Rnd * 41 + 60) .total t t l = .total t t l + .mark(i) k(i) Next i Print .no, .name, .total End With mystud = student ‘可直接赋值,但一定要声明 但 定要声明Type studtype no as integer name as string*12 gender as string string*1 1 mark(1 to 4) as single total as single end type 有关数组的常用算法主要内容: 主 内容 1、数组的排序 数组的排序 :选择法、冒泡法 选择法 冒泡法 2、数组中元素的插入和删除操作 学习目标 学习目标: 1、理解算法的基本思路 理解算法的基本思路 2、能熟练地进行排序等操作的程序设计 1 选择法排序 1.(1)从n数中选出最小数的下标,将最小数与第 数中选出最小数的下标 将最小数与第 一个数交换位置 (2)除第一个数外 除第 个数外,其余n-1 1个数按步骤(1)的方法 选出次小的数,与第2个数交换位置 (3)重复步骤(1)n-1 (1) 1次,最后构成递增序列 注意:每次都假定第一个数为最小 如何才能选出最小? 需要两 循环,内循环选择最小数,找到该 需要两重循环 数在数组中的位置;执行n-1次外循环确定所有 元素的位 元素的位置 a(1) 8a(2) 6a(3) 9a(4) 3a(5) 2a(6) 7第 次 第一次 i=1 imin=1 imin=2 i i 4 imin=4 a(i)与a(imin)交换 imin=5269387 a(1)a(2) 6a(3) 9a(4) 3a(5) 8a(6) 72 第 次 第二次 i=2 imin=2imin=2i i 4 imin=4a(i) (i)与a(imin) (i i )交换239687 a(1)a(2)a(3) 9a(4) 6a(5) 8a(6) 72 第三次 i=3 imin=33imin=4imin=4 imin 4 imin=4a(i)与a(imin)交换 2 3 69 8 7 a(1)a(2)a(3)a(4) 9a(5) 8a(6) 72 第四次 i=4 imin=436imin=4imin=5 imin=6a(i) (i)与a(imin) (i i )交换236789 a(1)a(2)a(3)a(4)a(5) 8a(6) 92 第五次 i=5 imin=5 2367imin=536789 i 1 2 3 48 6 9 3 2 75 2 2 26 9 3 8 74 3 39 6 8 753 69 8 72 5 2 3 6 78 91 2 3 6 7 8 9 Option Base 1 P i t Sub Private S b Command1_Click() C d1 Cli k() Dim a%(1 To 10), imin%, i%, j%, t% a(1) = 8: a(2) = 6: a(3) = 9: a(4) = 3: a(5) = 2: a(6) = 7 For i = 1 To 5 imin = i For j = i + 1 To 6 If a(j) & a(imin) Then i i =j imin End If Next j t = a(i) a(i) = a(imin) a(imin) = t Next i end d sub b 2 冒泡法排序 2.(1)每轮的比较是从最后一个数开始的 (2)在每轮排序时将相邻的数进行比较,当 在每轮排序时将相邻的数进行比较 当 次序不对时就交换位置,出了内循环最小 数已冒出 (3) 除第 除第一个数外 个数外,其余n n-1 1个数再按步骤 (2) 执行,让次小数冒出 (3)重复步骤(2)n-1遍,最后形成递增序列 i=1a(1) a(2) a(3) a(4) a(5) a(6) 8 6 9 3 2 7 8 6 9 3 2 7For j=6 to 2 step -18 6 9 2 3 7 8 6 2 9 3 7如果后面的比前面的小 就交换 8 2 6 9 3 728 6 9 3 7 i=2a(1) a(2) a(3) a(4) a(5) a(6)For j=6 to 3 step -1 28 6 9 3 7如果后面的比前面的小 就交换28 6 9 3 728 6 3 9 728 3 6 9 72 38 6 9 7 i=3a(1) a(2) a(3) a(4) a(5) a(6)For j=6 to 4 step -1 2 38 6 7 9如果后面的比前面的小 就交换2 38 6 9 72 38 6 7 92 3 68 7 9 i=4a(1) a(2) a(3) a(4) a(5) a(6)For j=6 to 5 step -1 2 3 68 7 9如果后面的比前面的小 就交换2 3 68 7 92 3 6 78 9 i=5a(1) a(2) a(3) a(4) a(5) a(6)For j=6 to 6 step -1 2 3 6 7 89如果后面的比前面的小 就交换2 3 6 78 92 3 6 7 8 9 i18 6 9 3 2 72 28 63 2 38 64 2 3 68 7 95 2 3 6 782 3 6 7 8 1 95943 7 9 73295 次 Private Sub Command1_Click() Di a%(1 Dim %(1 To T 10), 10) imin%, i i % i%, i% j%, j% t% % a(1) = 8: a(2) = 6: a(3) = 9: a(4) = 3: a(5) = 2: a(6) = 7 F i = 1 To For T 5 For j = 6 To i + 1 Step -1 If a(j) (j) & a(j (j - 1) Th Then t = a(j) a(j) (j) = a(j (j - 1) a(j - 1) = t E d If End Next j N ti Next Next i E d Sub End S b 3 数组中元素的插入和删除 3.一般是在已排好序的数组中插入或删 般是在已排好序的数组中插入或删 除一个元素,插入或删除以后还是有序的 基本步骤: 1)查找插入的位置或要删除的元素 2)插入或删除 1、 插入生活中的“插队”的思考有序数组:a(1 to n) 有序数 在指定位置 在 定位 k(1&=k&=n-1) ( )插 插入元素 素 首先把最后一个元素往后移动一个 首先把最后 个元素往后移动 个 位置,再依次把前一个元素往后移,直 到把第k个元素移动完毕,最后腾出位 个元素移动完毕 最后腾出位 置插入数据。 147101316192225拟插入14,先找要插入的位置1 4 7 10 13 16 19 22 2514数据移位1 4 7 10 13k16 19 22 25插入数据 插 数据1 4 7 10 134316 1922212514 Dim a%(1 To 10) Dim i%, k% For i = 1 To 9 a(i) = (i - 1) * 3 + 1 Next i For o k = 1 To o9 If 14 & a(k) Then Exit For Next k For i = 9 To k Step -1 a(i ( + 1) ) = a(i) () Next i a(k) ( ) = 14 For i = 1 To 10 Print a(i) () Next i 2、 删除有序数组:a(1 to n) 有序数首先找到欲删除的元素的位置k。 然后把k+1到n个位置的元素依次向前移 动 最后将数组元素减1。 动;最后将数组元素减 147101316192225拟删除13,先找要删除元素的位置1 4 7 10 13 16 19 22 25数据移位1 4 7 10k13 16 19 22 25移位后结果1 4 7 10116 19222325425数组 素减1 数组元素减1 4 7 10 16 19 22 25 Dim a() Di i%, Dim i% k% ReDim a(1 To 9) F i = 1 To For T 9 a(i) = (i - 1) * 3 + 1 N Next i For k = 1 To 9 If a(k) (k) = 13 Th Then E Exit it F For Next k F i = k + 1 To For T 9 a(i - 1) = a(i) N ti Next ReDim Preserve a(1 To 8)

我要回帖

更多关于 数组指定位置添加元素 的文章

 

随机推荐