第07章数组和向量

第07章数组和向量
第07章数组和向量

第7章:数组和向量

学习目标

?理解数组的概念

?声明、创建、初始化数组。

?使用对象作为数组元素

?复制数组

?多维数组

?数字包装类及其子类

?命令行参数

?Vector向量类

介绍数组

?数组是用来储存一组同类型数据的数据结构。Java将数组当做对象来处理。

10个 double 型元素构成的数组:double[] myList = new double[10]

数组声明 myList

?数据类型[] 数组名;

例: int[] myList;

?数据类型 数组名[];

例: int myList[];

创建数组

?数组名= new 数据类型[数组大小];

例:myList = new double[10];

一步创建和声明数组

?数据类型[] 数组名 = new 数据类型[数组大小];

double[] myList = new double[10];

?数据类型 数组名[] = new 数据类型[数组大小];

double myList[] = new double[10];

初始化数组

?使用循环:

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

myList[i] = (double)i;

?一步创建、声明、初始化数组:

double[] myList = {1.9, 2.9, 3.4, 3.5};

例7.1:划分成绩等级

?程序从键盘上读入的学生成绩(int),挑选最好的成绩并且根据下表确定分数等级: –如果分数>=最高分数-10,等级为A

–如果分数>=最高分数-20,等级为B

–如果分数>=最高分数-30,等级为C

–如果分数>=最高分数-40,等级为D

其他情况等级为E

? 源程序:AssignGrade.java

对象的数组

?声明和创建:

Circle[] circleArray = new Circle[10];

?初始化:

for (int i=0; i

{

circleArray[i] = new Circle();

}

例7.5累加圆的面积

?本例累加一组圆的面积。程序创建了由10个Circle对象构成的数组circleArray,并且用随机值初始化这些圆的半径,最后显示数组中圆的总面积。

?源程序:TotalArea.java

复制数组

?如果使用下列语句复制数组:

list;

newList

=

实际上使newList和list指向同一个数组。一个简单的赋值语句并不能完成数组的复制工作。

?在Java中,可以使用赋值语句复制基本类型的变量却不能复制对象,如数组。将一个对象赋值给另一个对象,只会使两个对象指向同样的内存地址。

?例7.6:数组的复制

源程序:TestCopyArray.java

?复制数组的三种方法:

源数组:int[] sourceArray = {2, 3, 1, 5, 10};

目标数组:int[] targetArray = new int[sourceArray.length];

?方法1:用循环语句复制数组的每一个元素

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

targetArray[i] = sourceArray[i];

?方法2:使用Object类的clone方法

int[] taretArray=(int[])sourceArray.clone();

?方法3:使用https://www.360docs.net/doc/0f8638977.html,ng.System类的arraycopy()方法复制数组,语法如下: arraycopy(sourceArray, src_pos, targetArray, tar_pos, length);

其中,参数src_pos和tar_pos分别指sourceArray和targetArray中的起始位置。从sourceArray复制到targetArray中的元素个数由参数length指定。

例如:

System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length); 源程序:ArrayCopy.java

测试这三种方法完成的都是数组的浅复制。

另:数组的深复制

源程序:ArrayDeepCopy.java

public class ArrayDeepCopy

{

public static void main(String[] args)

{

A[] sourceArray = new A[5];

A[] targetArray = new A[sourceArray.length];

//sourceArray初始化

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

sourceArray[i] = new A(i);

//方法1:使用循环语句复制数组

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

targetArray[i] = (A)sourceArray[i].clone();//数组的深复制

System.out.println("The targetArray is:");

printArray(targetArray);

//方法2:使用clone()方法复制数组

targetArray = (A[])sourceArray.clone();

printArray(targetArray);

//方法3:使用https://www.360docs.net/doc/0f8638977.html,ng.System类的arraycopy()方法复制数组

System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length); printArray(targetArray);

sourceArray[0].i = 3;

System.out.println("After modifying sourceArray");

System.out.println("The sourceArray is:");

printArray(sourceArray);

System.out.println("The targetArray is:");

printArray(targetArray);

}

static void printArray(A[] array)

{

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

System.out.print("\t"+array[i].i);

System.out.println();

}

}

class A implements Cloneable

{

int i;

public A(int i) { this.i = i; }

public Object clone()

{

try{

return super.clone();

}

catch(CloneNotSupportedException ex){

return null;

}

}

}

多维数组

?在java中,二维数组被声明为数组对象的数组。

?例如,下面代码声明和创建一个10行10列的二维数组:

int[][] matrix = new int[10][10];

int matrix[][] = new int[10][10];

?二维数组的初始化:

for (int i=0; i

for (int j=0; j

{

matrix[i][j] = (int)(Math.random()*1000);

}

二维数组matrix,其行数为matrix.length,列数为matrix[i].length。(i为行索引)

二维数组的每行列数可以不同:

int a[][] = new int[2][];

a[0] = new int[2];

a[1] = new int[5];

二维数组a的第一行列数为2,第二行列数为5。

源程序:MultidimensionalArray.java

包装类

?在Java中,基本数据类型不做为对象使用,这样做的原因是效率问题。

?许多Java的方法需要对象做参数。Java提供了一个方便的办法将基本数据类型包装成对象(例如,将int包装成Integer类)。按Java的术语,对应的类称为包装类。

?Boolean

?Character

?Byte、Short、Integer、Long、Float、Double

?构造方法

–public Integer(int value)

–public Integer(String s)

–public Double(double value)

–public Double(String s)

?类常量 MAX_V ALUE, MIN_V ALUE

?类型转换方法:

每个数值包装类都实现Number类中定义的抽象方法doubleValue、floatValue、intValue、

longValue、shortValue,并覆盖Object类中定义的toString和equals方法。

例:long l=doubleObject.longValue();

例:int i=integeObject.intValue();

例:double d=5.9;

Double doubleObject=new Double(d);

String s=doubleObject.toString();

静态方法valueOf、parseInt、parseDouble

?public static Integer valueOf(String s)

该方法创建一个新的对象,并将它初始化为指定字符串表示的值。

–Double doubleObject=Double.valueof(“12.4”);

–Integer integerObject=Integer.valueof(“2”);

?public static int parseInt(String s,int radix)

根据指定的基数radix返回字符串s表示的整数值,若省略radix,则基数为10。

?public static double parseDouble(String s)

将数值字符串转换为double值。

测试包装类:源程序TestWrapperClass.java

class TestWrapperClass

{

public static void main(String[] args)

{

//Integer类和Double类的构造方法

Integer

integerObject1 = new Integer(5);

integerObject2 = new Integer("5");

Integer

Double(5.0);

= new

Double

doubleObject1

new

=

Double("5.0");

doubleObject2

Double

//数值类的常量MAX_V ALUE、MIN_V ALUE

System.out.println("The maximum integer is "+Integer.MAX_V ALUE);

System.out.println("The minimum integer is "+Integer.MIN_V ALUE);

System.out.println("The maximum float is "+Float.MAX_V ALUE);

System.out.println("The minimum float is "+Float.MIN_V ALUE);

System.out.println("The maximum double is "+Double.MAX_V ALUE);

System.out.println("The minimum double is "+Double.MIN_V ALUE);

System.out.println();

//类型转换方法

doubleObject1.longValue();

=

long

l

int i = doubleObject1.intValue();

doubleObject1.toString();

=

String

s

System.out.println("longValue(): "+l);

"+i);

System.out.println("intValue():

"+s);

System.out.println("toString():

System.out.println();

//静态方法valueOf

Double.valueOf("12.4");

=

doubleObject3

Double

= Integer.valueOf("12");

integerObject3

Integer

"+doubleObject3);

System.out.println("doubleObject3:

"+integerObject3);

System.out.println("integerObject3:

System.out.println();

//静态方法parseInt和parseDouble

int a = Integer.parseInt("123"); // Integer.parseInt("ff",16),返回值为255

double d = Double.parseDouble("12.3");

System.out.println("parseInt():

"+a);

"+d);

System.out.println("parseDouble():

}

}

命令行参数

?main方法的声明与众不同,它具有String[]类型的参数args。参数args是一个字符串数组。运行程序时可以从命令行给Java程序传递参数,这些参数存储在字符串数组args 中。

?传递给main方法的参数是字符串,但是在命令行中它们不必用双引号括住,这些参数要用空格分开。如果参数自己包含空格,必须使用双引号将该参数的所有项括住。

?例如:

class TestMain

{

public static void main(String[] args)

{ ... }

}

下面的命令行用三个参数arg0、arg1、arg2启动程序TestMain:

java TestMain arg0 arg1 arg2

?例 7.8使用命令行参数

程序进行整数的二元运算。程序接收三个参数:一个操作符和两个整数

源程序:Calculator.java

Vector 向量类

?Java在java.util包中提供了Vector向量类,能够用来存储数目不确定的元素。一个向量能根据需要动态伸缩。

?要创建Vector类,使用它的默认构造方法:

Vector vector = new Vector();

?要给向量添加元素,使用addElement方法:

vector.addElement(anObject);

向量中的元素必须是对象,上述方法将元素追加到向量末尾。

?要检索向量的元素,使用elementAt 方法:

Object anObject = vector.elementAt(0);

?要知道向量中元素的个数,使用size方法:

int numOfElements = vector.size();

?要在指定下标处插入一个元素,使用insertElementAt方法: Vector.insertElementAt(anObject,4);

?要在指定下标处设置一个元素的值,使用setElementAt方法: Vector.setElementAt(anObject,4);

?要在指定下标处删除一个元素,使用removeElementAt方法: Vector.removeElementAt(4);

?简单实例:TestVector.java

import java.util.Vector;

class TestVector

{

public static void main(String[] args)

{

//使用默认构造方法创建Vector对象

Vector();

new

Vector

=

v

new

Double(3.0);

d

Double

=

Integer i = new Integer(5);

String s = "hello"; //String s = new String("hello");

A a = new A();

//给向量添加元素,使用addElement方法

v.addElement(d);

v.addElement(i);

v.addElement(s);

v.addElement(a);

//输出向量v的所有元素

printVector(v);

//检索向量的元素,使用elementAt 方法

Object v1 = v.elementAt(0);

Object v2 = v.elementAt(1);

Object v3 = v.elementAt(2);

Object v4 = v.elementAt(3);

//要知道向量中元素的个数,使用size方法

v.size();

=

int

number

"+number);

System.out.println("Vector

size:

System.out.println();

//要在指定下标处插入一个元素,使用insertElementAt方法

String new_str = "world";

v.insertElementAt(new_str,3);

v.insertElementAt(new_str,3) ] , ");

inserting[

System.out.print("After

printVector(v);

System.out.println();

//要在指定下标处设置一个元素的值,使用setElement方法

Integer new_i = new Integer(6);

v.setElementAt(new_i,1);

System.out.print("After setting[ v.setElementAt(new_i,1) ] , ");

printVector(v);

System.out.println();

//要在指定下标处删除一个元素,使用removeElementAt方法

v.removeElementAt(4);

System.out.print("After removing[ v.removeElementAt(4) ] , ");

printVector(v);

}

static void printVector(Vector vec)

{

//输出向量v中的所有元素

:

");

Vector

of

System.out.println("Elements

i=0;i

for(int

"+vec.elementAt(i));

:

System.out.println("Vector

"+i+"

}

}

class A

{

field;

int

public

toString()

String

{

return "[class A] field = "+field;

}

}

例7.10 使用向量划分成绩等级

?本例用向量代替数组改写例7.1。该程序从键盘读入学生成绩并将分数存储在向量中,找到最高分并划分所有学生的成绩级别。

源程序:AssignGradeUsingVector.java

程序设计基础(C)第七章数组习题

学号:姓名:成绩: 程序设计基础(C)第七章数组习题 一、选择题 1.下列叙述中错误的是()。 A)对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数 2.下列关于字符串的叙述中正确的是()。 A)C 语言中有字符串类型的常量和变量 B)两个字符串中的字符个数相同时才能进行字符串大小的比较 C)可以用关系运算符对字符串的大小进行比较 D)空串一定比空格打头的字符串小 3.当用户要求输入的字符串中含有空格时,应使用的输入函数是()。 A)scanf( ) B)getchar( ) C)gets( ) D)getc( ) 4.若有定义语句:int a[3][6];,按在内存中的存放顺序,a 数组的第10 个元素是()。 A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4] 5.已有定义:char a[ ]="xyz",b[ ]={'x', 'y', 'z'};,下列叙述中正确的是()。 A)数组a 和b 的长度相同 B)a 数组长度小于b 数组长度 C)a 数组长度大于b 数组长度 D)上述说法都不对 6.下列程序的输出结果是()。 main( ) { char a[7]="a0\0a0\ 0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } A)2 2 B)7 6 C)7 2 D)6 2 7.下列能正确定义一维数组的选项是()。 A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5}; C)char a={'A', 'B', 'C'}; D)int a[5]="0123"; 8.有以下程序 #include main() { int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2) { case 0:

第07章数组和向量

第7章:数组和向量 学习目标 ?理解数组的概念 ?声明、创建、初始化数组。 ?使用对象作为数组元素 ?复制数组 ?多维数组 ?数字包装类及其子类 ?命令行参数 ?Vector向量类 介绍数组 ?数组是用来储存一组同类型数据的数据结构。Java将数组当做对象来处理。 10个 double 型元素构成的数组:double[] myList = new double[10] 数组声明 myList ?数据类型[] 数组名; 例: int[] myList; ?数据类型 数组名[]; 例: int myList[]; 创建数组 ?数组名= new 数据类型[数组大小]; 例:myList = new double[10]; 一步创建和声明数组 ?数据类型[] 数组名 = new 数据类型[数组大小]; double[] myList = new double[10]; ?数据类型 数组名[] = new 数据类型[数组大小]; double myList[] = new double[10]; 初始化数组 ?使用循环: for (int i = 0; i < myList.length; i++) myList[i] = (double)i; ?一步创建、声明、初始化数组: double[] myList = {1.9, 2.9, 3.4, 3.5}; 例7.1:划分成绩等级 ?程序从键盘上读入的学生成绩(int),挑选最好的成绩并且根据下表确定分数等级: –如果分数>=最高分数-10,等级为A –如果分数>=最高分数-20,等级为B –如果分数>=最高分数-30,等级为C –如果分数>=最高分数-40,等级为D 其他情况等级为E ? 源程序:AssignGrade.java 对象的数组 ?声明和创建: Circle[] circleArray = new Circle[10]; ?初始化:

第七章 数组

第七章数组 数组是程序设计语言中最基本,最重要的组成部分,本章的习题将从C语言数组的基本概念出发,讨论C 语言数组的特点和使用方法,并通过典型的例题和常见算法研究数组的一般应用,本章的主要内容包括: ●数组基本概念。包括:数组的定义,数组的类型,数组维数,体积,数组元素和数组下标的概念,数组 说明,对数组进行初始化的方法,多维数组中元素的排列次序及初始化等问题。 ●字符型数组。包括:字符型数组与其它数组的区别,字符串及其特点,对字符型数组进行初始化,使用 不同的库函数输入输出字符串,对字符串的简单处理(求串长,串复制,串连接,串比较,串反向等) 等。 ●数组与函数之间的关系。包括:将数组作为组与函数之间进行传递等。 ●常见的使用数组的算法。包括:排序算法,查找算法等。 7.1 选择题 【7.1】错误的说明语句是。 A)static char word[ ]={‘T’,’u’,’r’,’b’,’o’,’\0’}; B)static char word[ ]={“Turbo\0”}; C)static char word[ ]=”Turbo\0”; D)static char word[ ]=‘Turbo\0’; 【7.2】已知:char s[5],c;register int b;则调用函数scanf的正确语句是。 A)scanf(“%s%c”,s,c); B)scanf(“%d%c,&b,&c); C)scanf(“%d%c”,b,&c); D)scanf(“%s%c”,s,&c); 【7.3】要说明一个有10个int元素的数组,应当选择语句 。 A) int a [10]; B) int a[2,5]; C) int a [ ]; D) int *a[10]; 【7.4】合法的数组说明语句是。 A)int a[ ]=”string”; B)int a[5]={0,1,2,3,4,5,}; C)char a=”string”; D)char a[]={0,1,2,3,4,5,}; 【7.5】在下述对C语言字符数组的描述中错误的是。 A)字符数组可以存放字符串 B)字符数组中的字符串可以进行整体输入输出 C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D)字符数组的下标从0开始

C语言复习题及答案 第七章 数组教程文件

C语言复习题及答案第七章数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ; (1) (1)数组名后必须用方括弧 [ ] ,用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] //下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围; 如 int a[10] ; //可以引用的数组元素为a[0]……a[9] , a[10] 不是本数组元素; 3、一维数组的初始化: (1) (1)可以在定义数组后,立刻赋值;如 int a [3] = { 1,3, 5} ; 但下面这样是错误的: int a[3] ; a = { 1,3, 5} ; (2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ‘’, float 0.0 ; 如 int a [3]= {1,3 } ; //a[0] =1 ; a[1]= 3 ; a[2]= 0 ; (3) 在对数组全部元素赋初值时,可以不指定元素个数; (4) 可以在循环控制下,给数组各元素赋值; 如:int a[10] ; for ( i=0 ; i <10 ;i ++ ) a [ i ] = i ; 基础训练(A) 一、选择题 1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。

C语言复习题及答案-第七章-数组

C语言复习题及答案-第七章-数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式] ; (1) (1)数组名后必须用方括弧[ ] ,用其他括 弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标] //下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围; 如int a[10] ;

二、填空题 1、构成数组的各个元素必须具有相同的类型。C语言中数组的下标必须是整正数、0或整型表达式。如果一维数组的长度为n ,则数组下标的最小值为0,最大值为n-1。 2、在C语言中,一维数组的定义方式为:类型说说明符数组名[常量表达式]。 3、已知数组b定义为int b[ ]={9,6,3};,则b的各元素的值分别是, 最小下标是,最大下标的。9,6,3 0 ,2 4、在C语言中数组名是一个常量,不能对其进行加、减及赋值操作。 5、已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为: for (j=0;j<10;j++) printf(“%d”,T[j]); 下面的语句试图按相反的顺序显示输出T中的10个元素的相反数;请补充完整下面的语句:for(j=9;j>=0;j- -)printf(“%d”,T[j]); 三、综合题 1、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(3) 1 main() 2 { 3 int a[3]={3*0}; 4 int i; 5 for(i=0;i<3;i++) scanf("%d",&a[i]);

《C语言程序设计》第7章 数组

第7章数组 第1次课:2学时 一、教学内容 1、一维数组的定义和引用 2、二维数组的定义和引用 二、教学目标 1.了解一维数组、二维数组的基本概念; 2.掌握数组的定义与引用; 3.掌握数组元素的引用 三、教学重点及难点 重点:数组的定义和引用 难点:数组的定义和引用 四、教学方法 多媒体教学,案例驱动,实例演示,提问。 五、教学过程设计 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 7.1 一维数组的定义和引用 7.1.1 一维数组的定义方式 在C语言中使用数组必须先进行定义。 一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型;数组名是用户定义的数组标识符;方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 对于数组类型说明应注意以下几点: (1) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 (2) 数组名的书写规则应符合标识符的书写规定。 (3) 数组名不能与其它变量名相同。 (4) 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。但是其下标从0 开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 (5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。

第七章数组上机作业

第七章数组 通过本章实验作业应达目标 1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。 2.熟练掌握字符数组和字符串的使用方法。 3.掌握数组的一种排序算法。 4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。 本章上交作业 程序7_1.c、7_3.c、7_5.c、7_7.c上传至211.64.135.121/casp。 实验一一维数组的定义和简单应用 【实验目的】 学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。 【实验内容】 从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。以7_1.c命名本程序并上交。 程序运行界面 【实验提示】 求最大(小)值通常用“打擂台”的方法。首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。 求平均值还要设置一个变量sum,用来累加各元素的值。 实验二一维数组的排序 【实验目的】 熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。 【实验内容】

从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。分别以7_2_1.c、7_2_2.c和7_2_3.c命名三个程序。 【实验提示】 所谓排序是指把一组杂乱无章的数据按照大小顺序排列。 将被排序的n个数据存放在一个数组中, 假如按升序排列。我们将数组定义为a[n],数据存放在a[0] 到 a[n-1] 中。 1.比较排序法 将a[0]与a[1]比较,若a[1]a[1],则二者交换,否则不变,a[1]再与a[2]比较,前者大就交换,…,依次两两比较至到a[n-2]与a[n-1]比较,经过一轮以后,最大者“沉”到了最后,小数往上“冒”,所以得名“冒泡法”。第二轮比较数组的前n-1个,即a[0]~a[n-2] 。重复此过程,直到所有的元素比较完毕。 实验三一维数组元素的调换 【实验目的】 进一步加强对数组的应用。 【实验内容】 找出数组中的最小数和次小数,并把最小数和a[0]中的数对调、次小数和a[1]中的数对调,其余数据位置不变。 例如,程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。以7_3.c 命名本程序并上交,部分程序如下。 #define N 10 main()

第七章 数组

第七章数组 一、选择题 1.在C语言中引用数组元素时,下面关于数组下标数据类型的说法错误的是_______________。 A) 整型常量B) 整型表达式C) 整型常量或整型表达式D)任何类型的表达式2.以下能正确定义一维数组a的选项是________________。 A)int a[5]={0,1,2,3,4,5}; B) char a[]={0,1,2,3,4,5}; C) char a={'A','B','C'};D)int a[5]="0123"; 3.以下能正确定义一维数组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]; 4.若有定义:int a[10];则正确引用数组a元素的是____________。 A) a[10] B) a[3] C) a(5) D) a[-10] 5.以下不正确的数组定义是____________。 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'}; 6.以下叙述中错误的是_______________。 A) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B) 数组名代表的是数组所占存储区的首地址,其值不可改变 C) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D) 可以通过赋初值的方式确定数组元素的个数 7.以下正确的二维数组定义是______________。 A) int a[][]={1, 2, 3, 4, 5, 6}; B) int a[2][]={1, 2, 3, 4, 5, 6}; C) int a[][3]={1, 2, 3, 4, 5, 6}; D) int a[2,3]={1, 2, 3, 4, 5, 6}; 8. 以下对二维数组a进行初始化正确的是______________。 A) int a[2][]={{1, 0, 1}, {5, 2, 3}}; B) int a[][3]={{1, 2, 3}, {4, 5, 6}}; C) int a[2][4]={{1, 2, 3}, {4, 5}, {6}}; D) int a[][3]={{1, 0, 1}, {}, {1, 1}}; 9. 以下不能对二维数组a进行初始化的是___________。 A) int a[2][3]={0}; B) int a[][3]={{1, 2},{0}}; C) int a[2][3]={{1, 2}, {3, 4}, {5, 6}}; D) int a[][3]={1, 2, 3, 4, 5, 6}; 10. 若有定义:int a[3][4];则正确引用数组a元素的是___________。 A) a[2][4] B) a[3][3] C) a[0][0] D) a[3][4] 11. 若定义了int b[][3]={ 1, 2, 3, 4, 5, 6, 7};则b数组第一维的长度是___________。 A) 2 B) 3 C) 4 D) 无确定值 12. 若有定义:int a[3][4]={0};则以下叙述中正确的是___________。 A) 只有元素a[0][0]可得到初值0 B) 此说明语句不正确 C) 数组a中各元素都可得到初值,但其值不一定为0 D) 数组a中每个元素均可得到初值0 13.若有定义:int a[][4]={0, 0};以下叙述中错误的是_____________。 A)数组a的每个元素都可得到初值0B)二维数组a的第一维大小为1 C)因为初值个数除以a中第二维大小的值的商为0,故数组a的行数为1 D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组

第7章数组 【练习7-1】将例7-3 程序中的break 语句去掉,输出结果有变化吗假设输入数据不变,输出什么 解答: 当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因 此程序输出会有变化。当输入数据仍为 2 9 8 1 9 时,输出将是index is 1 index is 4。 【练习7-2】将数组中的数逆序存放。输入一个正整数n(1 int main(void) { int i,n,temp; int a[10]; printf("Input n:"); scanf("%d",&n); printf("Input %d integer:",n); for(i=0;i int main(void) { int i,index,n; int a[10];

scanf("%d",&n); printf("Enter %d integrs:",n); for(i=0;i=0;i++) printf("%d ",a[i]); return 0; } 【练习7-4】找出不是两个数组共有的元素。输入一个正整数n (1<n≤10),再输入n 个整数,存入第1个数组中;然后输入一个正整数m(1 int main(void) { int i,j,k,m,n,flag,equal; int a[25],b[25],c[25]; printf("Enter m:"); scanf("%d",&m); printf("Enter %d integers:",m); for(i=0;i

☆C语言实验五(第七章一维数组:排序综合题)

【2008春上机编程题_C07】 【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”

形式、一行五个数据将满足条件的数据输出到屏幕: 【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。 参考程序: 简单起泡排序法:(参考教科书P134)

{ 双向起泡排序法:(参考上机指导书P54例、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k 个整数从大到小排序。排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。”

选择排序法:(参考上机指导书P50例)

课堂练习空余时间或课后业余时间练习知识题 【软件第七章】 选择: 1,下列一维数组的声明中,正确的是____(22)_____。 , A. int a[]; B. int n=10,a[n]; C. int a[10+1]={0}; D. int a[3]={1,2,3,4}; 5.以下程序运行后的输出结果是_____(25)___。 main() { char a[7]="a0\0a0\0";int i,j; i=sizeof(a);j=strlen(a); printf("%d %d",i,j); } 2 B.7 2 C.7 5 2 8.以下声明中错误的是_____(27)_____。 A. int a[2]; B. int a[]={0,1}; C. int a[3]=0; D. nt a[3][4]={0}; ¥ 11. 已知有声明"int m[]={5,4,3,2,1}, i=0;",下列对数组元素的引用中,错误的是_____(27)_____。 A. m[++i] B. m[5] C. m[2*2] D. m[m[4]] 参考资料:数制变换 输入一个十进制数,输出为二进制数形式的一维整型数组

第七章数组习题答案

第七章习题答案 一.单项选择题 1.B 2.D 3.A 4.B 5.A 6.B 7.D 8.C 9.C 10.B 11.C 12.C 13.A 14.D 15.C 16.C 二.填充题 1.类型0 越界整型表达式 2.连续数组名地址 3.0 6 4. 2 0 0 5....d? 0 6.[3][10] a[1] 7.windows 95 8.windows 95 9. 5 10.7 11.#include #include 。 12.#include for(i=0;i<20;i++) scanf(“%f”,&a[i]);pjz/=20; printf(“%f,%f”,pjz,t); 13.&a[i] i%10==0 a[i-1] 14.k=p 15.&x a[i] i- - i!=0 16.k i

三.程序分析题 1.该程序从键盘输入一行字符放在字符数组中,然后输出。 2.该程序从输入的10个字符串中找出最长的那个串,并显示最长的那个串及其长度。3.该程序的功能是从键盘输入10个字符串,从小到大排序并输出。 4.运行结果,输出3x3矩阵的主对角线和辅对角线的元素之和。18 10 5.4 25 27 16 6.输出结果: gabcdef fgabcde efgabcd 7.输出结果:******* ***** *** * 8. 1 0 2 2 5 7 13 20 9. 12 6,1,8,7,4,5,0,3,2 。 10.把矩阵a转置放到矩阵b 11. 运行结果输出:***** ***** ***** ***** ***** 12.运行结果把3x3矩阵a和b对应元素相加到矩阵c,输出矩阵c。 13.程序边定义边赋值的方式定义了一个字符数组str。它包括22个字符(注意′\1′和′\11′分别代表一个特定字符)及末尾由系统自动加入的串结束标志′\0′,。程序利用for循环逐个读出str数组中的字符赋给字符变量c,再由内嵌的switch语句根据c的值来控制具体输出的字符。直到读到字符串结束标志′\0′为止。 (1)循环是从k=2开始,首先读取的是str中的第三个字符S。循环体内除switch语句外,还有一条语句:putchar(? *?); ( 2 )continue语句要跳过循环体内尚未执行的语句,结束本次循环;break语句则仅仅跳出switch语句,仍要执行循环体中的语句。 (3)当从str中读取的字符与case中所有常量表达式的值都不相等时,执行default后的语句,原样输出字符,并跳过putchar(? *?)结束本次for循环,(如第三个S,第一个W,I,T,C,H,第三个W,M和P均属此)。 (4)当读到字符L时,与case中的‘L’相等,执行continue,结束本次for循环。没有输出。 (5)当读到字符1时,与case中的‘1’相等,执行break语句,跳出switch,输出一个字符*。 (6)当读到字符?\1?(第一次出现的)时,代表一个8进制的1,与case中的1相等,执行while循环。在while循环中,首先执行c=str[++k],取下一个字符?\11?,它既不等于?\1?又不等于?\0?,while循环继续执行,取出?W?。同理,再次执行while循环,取出字符?\1?,从而结束while循环,滑向下一个case,输出字符?#?,顺序执行到continue,结束

c语言复习题及答案第七章数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ; (1)(1)数组名后必须用方括弧 [ ] ,用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] for ( i =0 ; i<7 ; i ++ ) printf( “%c” , c1[ i ] ); (2)将整个字符串一次输入输出,用格式符%s ; 如:char c1[10] ; scanf ( “ %s”, c1) ; 100]; D) int N=100; int num[N]; (2003年9月) 25、有以下程序 main() { char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’,‘g’,‘h’,‘\0’}; int i,j; i=sizeof(a); j=strlen(a); printf(“%d,%d\b”i,j); } 程序运行后的输出结果是( )。 A)9,9 B)8,9 C)1,8 D)9,8 (2002年9月) 21、C 22、C 23、D 24、B 25、D 二、填空题 1、下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数放在一 维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。请填空。 fun(int x,int b[]) { int k=0,r; do { r=x%2; b[k++]=r; x/=2 ; } while(x); } (1996年4月) 2 2

相关文档
最新文档