当前位置:文档之家› 第4章 数组

第4章 数组

第4章 数组
第4章 数组

第四章数组本模块将描述Java编程语言中如何定义、初始化和使用数组。

第一节相关问题

讨论──下列问题与本模块阐述的论题相关:

一个数组的用途是什么?

目标

完成本模块的学习后,你应该能够:

声明并创建原始数组、类数组或数组类型

解释为什么数组的元素需初始化

给出数组定义并初始化数组元素

确定一个数组中元素的数量

创建多维数组

编写从一个数组类型到另一个数组类型数组值的拷贝代码

第三节数组的声明

声明数组

相同类型的成组数据对象

原始类型或类类型数组声明

为一个引用创建空间

数组是一个对象,而不是为原始类型储备的存储器

典型的数组是用来集合相同类型的对象并通过一个名称来引用这个集合。你可以声明任何类型的数组──原始类型或类类型:

char s[];

Point p []; // where point is a class

在Java编程语言中,即使数组是由原始类型构成,甚或带有其它类类型,数组也是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new 语句或数组初始化软件动态分配。

在以下部分,你将看到如何创建和初始化实际数组。

上述这种将方括号置于变量名之后的声明数组的格式,是用于C、C++和Java编程语言的标准格式。这种格式会使声明的格式复杂难懂,因而,Java编程语言允许一种替代的格式,该格式中的方括号位于变量名的左边:

char[]s;

Point[]p;

这样的结果是,你可以认为类型部分在左,而变量名在右。上述两种格式并存,你可选择一种你习惯的方式。声明不指出数组的实际大小。

注意----当数组声明的方括号在左边时,该方括号可应用于所有位于其右的变量

第四节创建数组

创建数组

使用关键字new 创建一个数组对象

s = new char [20];

p = new Point [100];

p[0] = new Point();

p[1] = new Point();

·

·

·

你可以象创建对象一样,使用关键字new 创建一个数组。

s = new char [20];

p = new Point [100];

第一行创建了一个20个char值的数组,第二行创建了一个100个类型Point的变量。r然而,它并不创建100个Point对象;创建100个对象的工作必须分别完成如下:

p[0] = new Point();

p[1] = new Point();

·

·

·

用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内--大于0或等于0并小于数组长度。任何访问在上述界限之外的数组元素的企图都会引起运行时出错。下面还要谈到一些更好的数组初始化方法。

第五节初始化数组

当创建一个数组时,每个元素都被初始化。在上述char数组s的例子中,每个值都被初始化为0 (\u0000-null)字符;在数组p的例子中, 每个值都被初始化为null,表明它还未引用一个Point对象。在经过赋值p[0] = new Point()之后,数组的第一个元素引用为实际Point对象。

注意--所有变量的初始化(包括数组元素)是保证系统安全的基础,变量绝不能在未初始化状态使用。

Java编程语言允许使用下列形式快速创建数组:

String names [] = {

“Georgianna”,

“Jen”,

“Simon”,

};

其结果与下列代码等同:

String names [] ;

names = new String [3];

names [0]= “Georgianna”;

names [1]= “Jen”;

names [2]= “Simon”;

这种”速记”法可用在任何元素类型。例如:

Myclass array [] = {

new Myclass (),

new Myclass (),

new Myclass ()

};

适当的类类型的常数值也可被使用:

Color palette [] = {

color.blue,

color.red,

color.white

};

第六节多维数组

Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组(和数组的数组的数组,等等)。一个二维数组如下例所示:

int twoDim [][] = new int [4][];

twoDim[0] = new int[5];

twoDim[1] = new int[5];

首次调用new而创建的对象是一个数组,它包含4个元素,每个元素对类型array of int的元素都是一个null引用并且必须将数组的每个点分别初始化。

注意-尽管声明的格式允许方括号在变量名左边或者右边,但此种灵活性不适用于数组句法的其它方面。例如: new int [][4]是非法的。

多维数组

非矩形数组的数组

twoDim[0] = new int [2];

twoDim[1] = new int [4];

twoDim[2] = new int [6];

twoDim[3] = new int [8];

每个数组有5个整数类型的4个数组的数组

int twoDim [][]= new int [4][5];

多维数组

因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组。也就是说,twoDim的元素可按如下方式初始化:

twoDim[0] = new int [2]

twoDim[1] = new int [4];

twoDim[2] = new int [6];

twoDim[3] = new int [8];

由于此种初始化的方法烦琐乏味,而且矩形数组的数组是最通用的形式,因而产生了一种”速记”方法来创建二维数组。例如:

int twoDim [][]= new int [4][5];

可被用来创建一个每个数组有5个整数类型的4个数组的数组。

第七节数组界限

在Java编程语言中,所有数组的下标都从0开始。一个数组中元素的数量被作为具有length属性的部分数组对象而存储; 这个值被用来检查所有运行时访问的界限。如果发生了一个越出界限的访问,那么运行时的报错也就出现了。

使用length 属性的例子如下:

int list [] = new int [10];

for (int i= 0; i< list.length; i++)

System.out.println(list [i ]);

使用length 属性使得程序的维护变得更简单。

第八节 拷贝数组

数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组: int myArray [] = new int [6];

myArray = new int [10];

在这种情况下,第一个数组被有效地丢失,除非对它的其它引用保留在其它地方。

拷贝数组

Java 编程语言在System 类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy 可作如下使用:

// original array

1.int myArray[] = { 1, 2, 3, 4, 5, 6 };

2.

3.// new larger array

4.int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

5.// copy all of the myArray array to the hold

6.// array, starting with the 0th index

7.System.arraycopy(myArray, 0, hold, 0,

8.myArray.length);

在这一点,数组hold 有如下内容:1,2,3,4,5,6,4,3,2,1。

拷贝数组

System.arraycopy()方法

// original array 1.int myArray[] = { 1, 2, 3, 4, 5, 6 }; 2. 3.// new larger array 4.int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 5.// copy all of the myArray array to the hold 6.// array, starting with the 0th index 7.System.arraycopy(myArray, 0, hold, 0, 8.myArray.length);

拷贝数组 不能调整数组的大小 可使用相同的引用变量来引用一个全新的数组 int elements [] = new int [6];

elements = new int [10];

注意—在处理对象数组时,System.arraycopy()拷贝的是引用,而不是对象。对象本身不改变。

练习: 使用数组

练习目标--在定义并初始化数组后,你将在程序中使用数组。

一、准备

为成功地完成本练习,请务必理解基本的矩阵概念并了解如何定位一个数组以获取它的值。

二、任务

1级:基本数组的使用

创建一个称作BasicArray的类,在...main()方法中声明两个变量,一个是thisArray,另一个是thatArray,它们应属类型array of int。

创建一个数组,它有10个int值,范围从1至10。分配这个第三数组的引用给变量thisArray。

使用for()循环打印thisArray的所有值。如何控制循环的次数?

编译并运行程序。多少值被打印?这些值是什么?

对每个thisArray的元素,建立它的值为索引值的阶乘。打印数组的值。

编译并运行程序。

分配thisArray的引用给变量thatArray。打印thatArray的所有元素。

编译并运行程序。tyatArray的多少值被显示?这些值是什么?它们来自何处。

修改thisArray的某些元素,打印thatArray的值。

编译并运行程序;在thatArray的值中,你注意到了什么?

创建一个有20个int值的数组。分配新数组的引用给变量thatArray,打印thatArray的值。

编译并运行程序。每个数组有多少值被显示? 这些值是什么?

拷贝thisArray的值给thatArray。你将使用什么方法调用? 你将如何限制拷贝元素的数量? thatArray的元素10至19有什么变化?

打印thatArray的值。

编译并运行程序。你所显示的值都是正确的吗?如果不是,你知道有那些内容理解得不对吗?

改变thatArray的某些值;打印thisArray和thatArray。

编译并运行程序。这些值是你所期待的吗?

2级:数组的数组

创建一个称作Array2D的类,在main()方法中声明一个称作twoD的变量,它应属类型array of array of int。创建一个元素类型为int的数组,该数组应包括4个元素并被赋值到变量twoD的elements[0]。

编写两个嵌套for()循环语句以打印twoD的全部值。以矩阵的格式安排输出(可采用System.out.print()方法)。

编译并运行程序。你应该能发现此时出现了运行错误(空指针异常) ,这是因为twoD的elements[1]至[3]未被初始化。

分别创建包括5个、6个和7个元素的int数组,将这些数组的引用分别赋予twoD的elements [1],[2]和[3];确认完成上述操作的代码是在第3步所描述的嵌套for()循环之前插入的。

编译并运行程序。这次你应该看到一个零值的非矩形布局。

赋予twoD数组的每个元素一个明显的非零值(提示:使用Math.random() 以获得随机值)。

声明一个属类型array of int的称作oneD的变量。然后, 创建一个包括4个元素的int数组。将该数组的引用分别赋予数组array twoD和oneD的第一个元素。赋值后,打印oneD和twoD数组。

编译并运行程序。请注意通过打印oneD的值而显示的单个数组与twoD数组的元素是相同的。

3级:字谜游戏

创建一个称作WordScrambler的应用程序,它具有一个词数组(长度最大为8个字符) ,用它可将一个词的字母拼凑(重排顺序) ,然后组成一个新词。

允许使用者看到词的拼凑过程,并分解5个游戏的运行过程。

三、练习小结

讨论──用几分钟的时间讨论一下在以上练习中你所获得的经验、感想和发现。

经验解释总结应用

四、检查你的进度

在进入下一模块之前,请确认你已经能够:

声明并创建原始数组、类数组或数组类型

解释为什么数组的元素需初始化

给出数组定义并初始化数组元素

确定一个数组中元素的数量

创建多维数组

编写从一个数组类型到另一个数组类型数组值的拷贝代码

五、思考题

你怎样创建一个三维数组?

使用数组的缺点是什么?

第4章数组练习题

一填空题 1)数组的元素通过索引来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)没有显式引用变量的数组称为匿名数组。 4)JVM将数组存储在堆(堆或栈)中。 5)数组的二分查找法运用的前提条件是数组已经。 6)矩阵或表格一般用二维数组表示。 7)如果把二维数组看成一维数组,那么数组的元素是一维数组。 8)Java中数组的下标的数据类型是int 。 9)不用下标变量就可以访问数组的方法是foreach循环。 10)数组最小的下标是0 。 11)arraycopy()的最后一个参数指明长度。 12)向方法传递数组参数时,传递的是数组的引用。 13)线性查找法的平均查找长度为。 14)数组初始化包括数组的声明,创建和初始化。 15)数组下标访问超出索引范围时抛出数组索引超出绑定异常 16)浮点型数组的默认值是0.0 f 。 17)对象型数组的默认值是null 。 18)对象类型的数组虽然被默认初始化,但是并没有调用构造函数。 19)二维数组的行的长度可以不同。 20)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是__D_ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是_B___ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__B__ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是_C___ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中

C语言程序设计习题参考答案第四章(数组)

第四章数组参考答案 一、选择题:1、 B 2、C 3、D 4、C 5、C 6、B 7、D 8、B 9、B 10、A 二、填空题: 1、首地址 2、按行存放 3、一个字符 4、′\0′ 5、字符数组名或字符串 6、9 0 7、6 8、j-1 str[j-1] 9、62 10、s1[i]=s2[i]; 三、改错题 1、错误语句:int a[3][ ]={2,4,6,8,10,12,14,16,18}; 正确语句:int a[ ][3]={2,4,6,8,10,12,14,16,18}; 2、错误语句:if (str[2]>string) string=str[2]; 正确语句:if (strcmp(str[2],string)>0) strcpy(string,str[2]); 3、错误语句:char c[5]={'C','h ','i','n','a '}; 正确语句:char c[6]={'C','h ','i','n','a '};或char c[ ]={“China”}; 4、错误语句:int a[3]={3*0} ; 正确语句:int a[4]; 5、错误语句:scanf(“%d%d%d”,&a); 正确语句:for (i=0; i<3; i++) scanf(“%d”,&a[i]); 或scanf(“%d%d%d”, &a[0], &a[1], &a[2]); 四、编程题 1、用数组来处理,求解Fibonacci数列前40项:1,1,2,3,5,8,13,21…。 #include void main() { int i; int t[40]={1,1}; for(i=2;i<40;i++) t[i]=t[i-2]+t[i-1]; for(i=0;i<40;i++) { if(i%5==0) printf("\n"); printf("%15d",t[i]); } } 2、用选择法对20个整数排序(由大到小)。 #include void main() {int i,j,min,t,x[20]; for(i=0;i<20;i++) scanf("%d",&x[i]); for(i=0;i<19;i++) {min=i; for(j=i+1;j<20;j++) if(x[min]>x[j])min=j; t=x[i];

第4章 数组练习题答案

第4章数组练习题 一、选择题 1.在c语言中,引用数组元素时,其数组下标的数据类型允许是()。 A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式 2.要说明一个有10个int元素的数组,应当选择语句()。 A) int a[10]; B) int a(10); C) int a[9] D) int a[11] 3.对以下说明语句的正确理解是()。 int a[10]={6,7,8,9,10}; A)将5个初值依次赋给a[1]至a[5] B)将5个初值依次赋给a[0]至a[4] C)将5个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确 4.已知:int a[10];则对a数组元素的正确引用是()。 A) a[10] B) a[3.5] C) a(5) D) a[10-10] 5.以下对一维整型数组a的正确说明是()。 A) int a(10); B)int n=10,a[n]; C) int n; D)#define SIZE 10; scanf("%",&n); int a[SIZE]; int a[n]; 6.要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义 语句是()。 A) int art[5]={89,-23}; B) int art[ ]={89,-23}; C) int art[5]={89,-23,0,0,0}; D) int art[ ]={89,-23,0,0,0}; 7.在C语言中,二维数组元素在内存中的存放顺序是()。 A)按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定 8.以下对二维数组a的正确说明是()。 A)int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4) 9.已知:int a[3][4];则对数组元素引用正确的是()。 A)a[2][4] B)a[1,3] C) a[2][0] D) a(2)(1) 10.已知:int a[3][4]={0};则下面正确的叙述是()。 A)只有元素a[0][0]可得到初值0 B)此说明语句是错误的 C)数组a中的每个元素都可得到初值,但其值不一定为0 D)数组a中的每个元素均可得到初值0 11.以下各组选项中,均能正确说明二维实型数组a的是()。 A) float a[3][4]; B) float a(3,4); float a[][4]; float a[3][4]; float a[3][]={{1},{0}}; float a[][]={{0},{0}}; C) f loat a[3][4]; D) float a[3][4]; float a[][4]={{0},{0}}; float a[3][]; float a[][4]={{0},{0},{0}}; float a[][4]; 12.已知:int a[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是()。 A)2 B)3 C)4 D)无确定值 13.若二维数组a有m列,则在a[i][j]之前的元素个数为()。 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 14.要使字符数组str存放一个字符串"ABCDEFGH",正确的定义语句是()。 A) char str[8]={'A','B','C','D','E','F','G','H'};

第四章:数组的定义及使用

数组的定义及使用 数组是一组相关数据的集合,一个数组实际上是一连串的变量,数组按照使用可以分为一维数组,二维数组和多维数组。 一.一维数组 一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。 要使用Java中的数组,必须经过声明数组和分配内给数组两个步骤。 一般步骤: 数据类型数组名[]=null; 数组名=new 数据类型[长度]; 也可简化为: 数据类型[] 数组名=null; 数组声明格式中,“数据类型”指的是声明数组元素的数据类型,“数组名”是用来统一这一组相同数据类型的元素的名称,其命名规则和变量命名规则相同,建议用有意义的名字来命名。数组声明后实际上是在栈内存中保存了此数组的名称(实际上是保存了对堆内存的引用地址),接下来就要在堆内存中配置数组所需的内存。“长度”是告诉编译器所声明的数组要存放多少个数据,而关键字new则是命令编译器根据括号里的长度在堆内存中开辟一块堆内存供该数组使用。 【例】 int score[]=null;//null表示引用数据类型的默认值。 score=new int[3]; 内存分配的过程: 过程分析:一个数组开辟了堆内存之后,将在堆内存中存储保存数据,并将堆内存的操作地址给了数组的名称score。因为数组是引用数据类型,所以数组变量score所保存的不是数组的实体,而是数组堆内存的参考地址。 二.数组中元素的表示方法 要访问数组中的元素,必须利用索引来完成。Java中的数组索引编号是从0开始的。以score[10],为例,score[0]代表第一个元素,score[1]是第二个元素、、、score[9]是第十个元素。

数据机构第四章——java语言描述 第4章 串与数组 习题参考答案..

习题四参考答案 一、选择题 1.下面关于串的叙述中,哪一个是不正确的?(B ) A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 2.串的长度是指( A ) A. 串中包含的字符个数 B. 串中包含的不同字符个数 C. 串中除空格以外的字符个数 D. 串中包含的不同字母个数 3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串B.联接C.模式匹配D.求串长 4.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。 A. O(m) B. O(n) C. O(n + m) D. O(n×m) 5. 串也是一种线性表,只不过( A )。 A. 数据元素均为字符 B. 数据元素是子串 C. 数据元素数据类型不受限制 D. 表长受到限制 6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素, 其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 7. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组占用的存储空间大小是(D )个字节。 A. 48 B. 96 C. 252 D. 288 8.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序 为主序顺序存放,则数组元素 A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 9. 稀疏矩阵的三元组存储表示方法( B ) A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可 B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效 C. 是一种链式存储方法 D. 比十字链表更高效 10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。 A.5 B.4 C. 3 D. 2 二、填空题 1. 2.串长度为0 3. 4. 5. 模式串t="ababaab"的next[]nextval[]数组值为。 6. 设数组A[1..5,1..6]的基地址为1000,每个元素占5个存储单元,若以行序为主序顺序 存储,则元素A[5,5]

第四章 数组作业

第四章数组 4.1 选择题 1. 以下关于数组的描述正确的是( )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是( )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是( )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是( )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存 中所占字节数是( )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是( ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。 #include main() { int a[10],i=0; while(i<10) scanf("%d",________ ); ┇ } A. a+(i++) B. &a[i+1] C. a+i D. &a[++i]

第四章习题答案

第4章数组 选择题 1.以下对一维数组 a 的定义正确的是( C )。 (A)int n = 5, a[n]; (B)int a(5); (C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n]; 2.下列数组定义语句中,不合法的是( A )。 (A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 }; (C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 }; 3.已知 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, p = a;,不能 ..表示数组 a 中元素的式子是( C )。 (A) a (B)p (C)a (D)a[ p a ] 4.已知 int a[] = { 0,2,4,6,8,10 }, p = a+1; 其值等于0的表达式是( D )。 (A) (p++) (B)(++p) (C)(p) (D)(p) 5.以下不能对二维数组a进行正确初始化的语句是( C )。 (A)int a[2][3] = { 0 }; (B)int a[][3] = { { 0,1 }, { 0 } }; (C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; (D)int a[][3] = { 0, 1, 2, 3, 4, 5 }; 6.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则 a[2][1]的值是( C )。 (A)0 (B)2 (C)6 (D)7 7.已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 不能表示数组元素a[2][1]的地址是( B )。 (A)&a[2][1] (B)(a[2]+1) (C)a[2]+1 (D)(a+2)+1 8.已知char a[]={ "fortran", " basic", "pascal", "java", "c++" };,则 cout<

vb第四章数组习题

第一章数组 一、选择题 1.在窗体上画一个命令按钮,然后编写如下程序: Option Base 1 Private Sub Command1_Click(Index As Integer) Dim Arr1(12) As Integer, Arr2(3) As Integer Dim Sum As Integer Sum = 2 For i = 1 To 12 Arr1(i) = i Next i For i = 1 To 3 Arr2(i) = Arr1(i * i) Next i For i = 1 To 3 Sum = Sum + Arr2(i) Next i Print Sum End Sub 程序运行后,单击命令按钮,在窗体上的输出结果是 A.16B.24 C.32 D.36 2.在窗体上画一个文本框,然后编写如下代码: Option Base 1 Private Sub Form_Click() Dim arr Dim Start As Integer, Finish As Integer Dim Sum As Integer arr = Array(12, 4, 8, 16) Start = LBound(arr) Finish = UBound(arr) Sum = 0 For i = Start To Finish Sum = Sum + arr(i) Next i c = Sum / Finish = c End Sub 程序运行后,单击窗体,则在文本框中显示的内容是 A.40 B.10C.12 D.16 3.阅读程序: Option Base 1

第四章练习答案

4.在下述Java语言语句中,错误 ..的创建数组的方法是( ) A.int intArray [ ];intArray=new int[5]; B.int intArray [ ]=new int[5]; C.int [ ] intArray ={1,2,3,4,5}; D.int intArray [5]={1,2,3,4.5}; 4.以下是关于字符串运算的代码,执行该代码段的输出结果是( ) String s=″0123456789″,sl,s2; sl=s.substring(2); s2=s.substring(2,5); System.out.println(s1+s2); A.0122345 B.234567892345 C.012234 D.23456789234 4.设有以下代码: String s l="123"; String s2="123"; String s3=new String("123"); 则表达式s1==s2和s1==s3的值分别是( ) A.true,true B.false,false C.true,false D.false,true 4.需要分析字符串,并将字符串分解成可被独立使用的单词,可使用java. util包中的类是 () A.String B.StringBuffer C.StringTokenizer D.stringTokenizer 14.Java语言提供了两个用于处理字符串的类,它们是__StringBuffer __ String ______。14.设有两个字符串对象str1和str2,则表达式“strl==str2”的意义是判别字符串strl和str2__是否引用同一个对象____。 14.设有字符串定义: String s="ABCDABCD"; 则表达式s.indexOf("B")的值是 1 。 14.设有数组a和b的定义如下: int[]a={1,2,3};int[]b={4,5,6}

04Java第四章一维数组所有知识考点总结

Java 一维数组所有知识考点总结 ------陈大龙 一:一维数组取值,输出打印a[10]={23,56,78,12,34,90,46,22,14,79}; class aa{ public static void main(String[] args){ int a[]={23,56,78,12,34,90,46,22,14,79}; for(int i=0;i=0;i--){ System.out.print (" "+a[i]); } } } 思路【1:每一个下标号对应唯一的元素值; 2:当下标号发生顺序改变的时候,那么它所代表的元素值也发生顺序改变】

三:对一维数组求最值,a[10]={23,56,78,12,34,90,46,22,14,79} public class a { public static void main(String[] args) { int a[]={23,56,78,12,34,90,46,22,14,79}; int max=a[0]; for(int i=0;imax) max=a[i]; System.out.print(" "+max); } }思路【1:临时申请一个变量来保存最值,最好最值的初始值是一维数组中的任何一个数; 2:拿这个临时的最值与一维数组的每一个元素一一比对,如果比临时最值大或小的话,就覆盖掉!】 四:一维数组求和和平均值,a[10]={23,56,78,12,34,90,46,22,14,79} public class a { public static void main(String[] args) { int a[]={23,56,78,12,34,90,46,22,14,79}; int s=0; for(int i=0;i

第四章习题

一、填空题 1.若有定义int a[3][5];则排列在数组中的第9个元素是()。 2.strlen("How are you\n")的值是( )。 3.C语言中字符串结束的标志是( )。 4.写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是( )。 5.strcmp("how","How")的值是( )。 二、选择题 1.若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是() A.1 B.2 C.3 D.4 2.对数组的描述正确的是()。 A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。 3.对字符串"Boy"进行完整赋值的操作是()。 A.char s[3] = {'B','o','y'}; B. char s[] = "Boy"; C.char s[3] = {"Boy"}; D.char s[3]; s="Boy"; 4.在c语言中引用数组元素时,其数组下标的数据类型允许是( )。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 5.对以下说明语句的正确理解是()。 int a[10]={6,7,8,9,10}; A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 三、阅读程序,写出运行结果 1. main() {int a[3][3] = {{1,0,2}, {2,2},{0,2}}, c[3][3],i,j; for(i=0; i<3; i++) { for(j=0; j<3; j++) { c[i][j] = a[a[i][j]][a[j][i]]; printf("%5d",c[i][j]); } } printf("\n"); }

第四章:数组的引用传递

数组的引用传递 一.传递及返回数组 如果要向方法传递一个数组,则方法的接受参数必须是符合其类型的数组。而且数组引用属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果也将保留下来。 【向方法中传递数组】 public class ArrayRefDemo01{ public static void main(String args[]){ int temp[] = {1,3,5} ; // 利用静态初始化方式定义数组 fun(temp) ; // 传递数组 for(int i=0;i

(c)方法中的数组X修改内容(d)方法执行后X失效 从图中可以看出,一开始声明的temp数组的内容是“1.3.5”,但是将此数组传递到了方法中,并使用数组X接收,也就是说此时temp实际上是将堆内存的使用权传递给了方法,为数组的具体内容起了一个别名X,然后在方法中通过X修改数组中的内容,方法执行完毕后,数组x因为是局部变量所以就失效了,但是对于数组内容的修改却保留了下来,值就是数组引用传递的过程。关于引用数组类型的引用传递,在面向对象部分会更加完整的介绍。 【使用方法返回一个数组】 public class ArrayRefDemo02{ public static void main(String args[]){ int temp[] = fun() ; // 通过方法实例化数组 print(temp) ; // 打印数组内容 } public static void print(int x[]){ for(int i=0;i

第4章数组练习题

一填空题 1)数组的元素通过来访问,数组Array的长度为。 2)数组复制时,"="将一个数组的传递给另一个数组。 3)没有显式引用变量的数组称为数组。 4)JVM将数组存储在(堆或栈)中。 5)数组的二分查找法运用的前提条件是数组已经。 6)矩阵或表格一般用维数组表示。 7)如果把二维数组看成一维数组,那么数组的元素是数组。 8)Java中数组的下标的数据类型是。 9)不用下标变量就可以访问数组的方法是。 10)数组最小的下标是。 11)arraycopy()的最后一个参数指明。 12)向方法传递数组参数时,传递的是数组的。 13)线性查找法的平均查找长度为。 14)数组初始化包括。 15)数组下标访问超出索引范围时抛出异常 16)浮点型数组的默认值是。 17)对象型数组的默认值是。 18)对象类型的数组虽然被默认初始化,但是并没有构造函数。 19)二维数组的行的长度不同。 20)数组创建后其大小改变。 二选择题 1.下面错误的初始化语句是___ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是___ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是____ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是____ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是____ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在中

第四章答案

4-1 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? (1)MOV BP,AL ;非法,操作数类型不同 (2)MOV WORD_OP[BX+4*3][DI],SP ;合法 (3)MOV WORD_OP1,WORD_OP2 ;非法,不允许两个内存单元直接传递数据 (4)MOV AX,WORD_OP1[DX] ;合法 (5)MOV SA VE_WORD,DS ;合法 (6)MOV SP,SS:DA TA_WORD[BX][SI] ;合法 (7)MOV [BX][SI],2 ;非法,必须有一个寄存器 (8)MOV AX,WORD_OP1+WORD_OP2 ;非法,两个内存单元地址相加没有意义 (9)MOV AX,WORD_OP1-WORD_OP2+100 ;合法 (10)MOV WORD_OP1,WORD_OP1-WORD_OP2 ;非法,不允许两个内存单元直接传递数据 4-2 画图说明下列语句所分配的存储空间及初始化的数据值. (1)BYTE_V AR DB 'BYTE',12,-12H,3 DUP(0,?,DUP(1,2),?) (2)WORD_V AR DW 5 DUP(0,1,2),?,-5,'BY','TE',256H 4-3 试列出各种方法,使汇编程序把5150H存入一个存储器字中(例如:DW 5150H). (1)DW 5150H (2)MOV AX,5150H MOV ADDRESS,AX 等,写出几个就可以 4-4 假设程序中的数据定义如下: PARTNO DW ? PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $-PARTNO 问PLENTH的值为多少?它表示什么意义? [解]:PLENTH 的值为22,GE表示该数据段的长度 4-5 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中.然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最

第四章 数组习题集答案

第四章数组习题 一、选择题 1. 如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数 是【】。 char x[50]={2,4,6,8,10}; A)50 B)100 C)10 D) 5 2. 下面关于数组的定义正确的是【】。 A) int n=10; float a[n]={1.0,2.1,3.2}; B) #define N 10 int a[N]={1,2,3}; C) int n; scanf("%d", &n); int a[n]; D) #define N 10; int a[N]={1,2,3}; 3. 若有说明int a[5][4]; 则对其数组元素的正确引用是【】。 A)a[3+1][2] B)a(2)(3) C)a[0,2]D)a[3][5] 4. 若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【】元素。 A)6 B)9 C)10 D)12 5. 要将20,30,40,50 存入数组b中, 下列正确的程序段是【】。 A) int i,b[4]; for(i=0; i<4; i++) b[i]=(i+2)*10; B) int b[4]; b={20,30,40,50}; C) int b[4]; b[1]=20,b[2]=30,b[3]=40,b[4]=50; D) int b[4]; b[4]={20,30,40,50}; 6. 下列二维数组初始化语句中正确且与语句float a[]={0,1,2,0,4,0}等价的是【】。 A)float a[6]={0,1,2,0,4}; B)float a[]={0,1,2,0,4}; C)float a[7]={0,1,2,0,4,0}; D)float a[5]={0,1,2,0,4}; 7. printf("%d \n ", strlen ("ATS\n012\1\\" )) ; 程序段的输出结果是【】。

第4章_数组c++_习题答案解析

习题 4 一、单项选择题 1. 若有说明int a[3][4];则a数组元素的非法引用是【】 A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4] 【答案】D 【解析】数组下标从0开始,a[0][4]的列下标越界。 2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 【答案】C 3. 以下不正确的定义语句是【】 A. double x[5]={2.0,4.0,6.0,8.0,10.0}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; D. char c2[]={′\x10′,′\xa′,′\x8′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】 i nt a[10]={6,7,8,9,10}; A. 将5个初值依次赋给a[1]至a[5] B. 将5个初值依次赋给a[0]至a[4] C. 将5个初值依次赋给a[6]至a[10] D. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】 B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。 6. 以下能对二维数组c进行正确的初始化的语句是【】 A. int c[3][]={{3},{3},{4}}; B. int c[][3]={{3},{3},{4}}; C. int c[3][2]={{3},{3},{4},{5}};

相关主题
文本预览
相关文档 最新文档