第六章 数组(最终版)

合集下载

C++程序设计 第六章 数组

C++程序设计  第六章 数组

C++程序设计第6章数组单个变量只能存放一个数据值。

当程序中要处理一组相同类型、彼此相关的一组数据时,单个变量就不适合了,就需要一种特殊的数据结构来处理,这就是数组。

数组(array)是一种派生类型。

一个数组能同时存放多个数据值,并能对每个数据进行访问。

本章将介绍一维数组、二维数组和字符数组的定义及使用。

6.1 一维数组一个数组(array)是由相同类型的一组变量组成的一个有序集合。

数组中的每个变量称为一个元素(element),所有元素共用一个变量名,就是数组的名字。

数组中的每个元素都有一个序号,称为下标(index)。

访问一个元素就可以用数组名加下标来实现。

数组必须先定义后使用。

6.1.1 一维数组的定义一维数组就是具有一个下标的数组。

定义一个数组有3个要素:类型、名称与大小。

语法格式为:<数据类型> <数组名> [<常量表达式>]其中,<数据类型>确定了该数组的元素的类型,可以是一种基本数据类型,也可以是已定义的某种数据类型。

<数组名>是一个标识符,作为数组变量的名字。

方括号中的<常量表达式>必须是一个正整型数据,其值为元素的个数,即数组的大小或长度。

注意这里的方括号[]表示数组,而不是表示可缺省内容。

例如,下面定义了三个不同类型的数组:int a[5]; //定义了一个int数组afloat b[20]; //定义了一个float数组bdouble c[5]; //定义了一个double数组c对于上面数组a,元素类型为int,a是数组名,方括号中的10表示数组的长度,即该数组包含了5个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]。

如果一个数组有n个元素,那么数组中元素的下标从0开始到n-1。

具有相同类型的数组可以在一条说明语句中定义。

例如:int a1[5], a2[4]; //同时定义两个整型数组具有相同类型的单个变量和数组也可以在一条语句中定义。

完整版第6章数组

完整版第6章数组

第6章数组6.1怎样定义和引用一维数组6.1.1怎样定义一维数组一般格式:类型数组名[常量表达式]; 如: int a[10];说明:(1) 数组名的命名规则遵循C 语言的标识符;(2) 常量表达式,用来指定该数组中元素的个数,也就是该数组的长度。

该长度必须在这里是一个常量表达式(数字常量、符号常量) ,不能是变量。

由 于前面已经指定了类型,指定了元素个数后,该数组一共占用的空间大小就确定 了,^口:上例,a 是int 型,每个int 型在VC 中占4字节,而后面又定义了 10 个元素,所以,a 共占用了 4*10=40个字节的空间;(3) 可以使用sizeof 运算来求出某个数组占用了多少空间; 特别强调,其中常量表达式不能是变量,如:int n=10;int a[n];//错误,因为n 是变量 #defi ne N 10 int b[N]; //正确,因为N 是符号常量 int c[N+3]; //正确的,因为N+3是常量表达式对于以下定义: int a[10];那么,系统就会在内存中划出一片存储空间,女口 右图:显然,每个元素在内存中都是连续的,从而可以 根据上一个元素的地址,来计算出下一个元素的地址, 假设a 的第0个元素存在1000地址上,那么,a[5]的 地址:Add (a[0])+5*4=1020。

而对 a[i]的地址:Add (a[i])=Add (a[0]+i*4)(4) 数组定义后,元素的排列是从a[0]开始的,因此定义的int a[10] 中, 只有a[0]~a[9],并不存在a[10]这个元素。

(5) 数组定义后,其中的每个元素的值都是不确定的(就是不知道值为多 少,也可以说是随机的),如果想要在定义时就有初值,可以有两种方法:方法一:用static 来修饰,那么,该数组中的每个元素都会被初始化为 0: static int b[10]; //数组b 中的10个元素每个值都是010001004 100810201036int a[10]; //数组a中的10个元素值不确定方法二:在定义时,同时给出值,如:int c[10]={1,2,3}; // 给出了3 个值如果所给的值比数组元素少,那么后面的每个元素都会自动初始化成0,如上面的 c 数组,后面的c[3]~c[9] 都是0(6)前面第 4 点说了,定义的a[10] 的元素是从a[0]~a[9] ,没有a[10] 这个元素,如果在程序中引用了a[10],实际上是一种“越界错误”,但是在VC中,一般还发现不了。

C++课件第六章数组

C++课件第六章数组

解决方法
在使用数组之前,应该为其所有元素 分配初始值。可以使用循环来遍历数 组并为每个元素赋值。同时,也可以 考虑使用标准库中的容器类,如 std:vector或std:array,它们可以自 动管理元素的初始化和销毁。
数组下标从0开始还是从1开始
总结词
详细描述
在C中,数组的下标从0开始而不是从 1开始。
C++课件第六章 数 组
目录
CONTENTS
• 数组的概述 • 数组的声明与初始化 • 数组的操作 • 数组的应用 • 数组的常见错误与注意事项 • 练习题与答案
01
数组的概述
数组的概述
• 请输入您的内容
02
数组的声明与初始 化
一维数组的声明与初始化
总结词
一维数组是具有线性结构的数组,可以通过指定数组大小来 声明和初始化。
插入排序
将数组分为已排序和未排序两部分,初始时已排序部分包含一个元素,之后从未排序部分 取出元素,并在已排序部分找到合适的插入位置插入,并保持已排序部分一直有序。重复 此过程,直到未排序部分元素为空。
数组在查找算法中的应用
线性查找
从数组的第一个元素开始,逐个比较,直到找到目标元素或遍历完整个数组。
详细描述
在C中,一维数组的声明需要指定数组的大小,例如int array[10]表示一个包含10个整数的数组。可以通过指定初始 值来初始化数组,例如int array[5] = {1, 2, 3, 4, 5}。如果没 有指定初始值,数组将自动被初始化为0或空值。
二维数组的声明与初始化
总结词
二维数组是具有矩阵结构的数组,可以通过指定行数和列数来声明和初始化。
详细描述
在C中,二维数组的声明需要指定行数和列数,例如int array[3][4]表示一个包含3行4列的二维数组。可以通过指 定初始值来初始化二维数组,例如int array[2][3] = {{1, 2, 3}, {4, 5, 6}}。如果没有指定初始值,数组将自动被初 始化为0或空值。

F第6章数组

F第6章数组

2
3
4 100 110 200 210
READ(*,*) NS, S GOTO 2 本题要点: ENDIF 设置一个存放学生 WRITE(*,100) 号与成绩的数组 WRITE(*,110)((T(I,J), J=1,2), I=1,N) WRITE(*,200) DO 4 I=1, 4 WRITE(*,210) I, NUM(I) CONTINUE FORMAT(5X,’STUDENT NUM’, 4X, ‘LEVEL’) FORMAT(8X, I6, 8X, I2, ‘L’) FORMAT(5X, ‘LEVEL’, 6X, ‘NO. STUD’) FORMAT(7X, I2, ‘L’, 8X, I6) END
6.1 引言
前几章研究了对单个数的处理,那么对一 批数据如何处理?例如人口普查,大型方程 组的求解,图象处理等等,都涉及到大批量 “数”的处理和“数”的组织。 例1,在六万人口区进行人口普查,统计各 年龄段人数。
I=1 20 If (I <= 60000) Then Read(*,*) AGE If AGE = 1 Then A1 = A1 + 1 If AGE = 2 Then A2 = A2 + 1 ... ... If AGE = 110 Then A110 = A110 + 1 I=I+1 有110 Goto 20 行, Endif 太冗 长 ... ...
7 6 4 10
第二轮
20 30
…….. DO 30 I=1, 19 K=20-I DO 20 J=1, K IF(A(J) .GT. A(J+1)) THEN TEMP=A(J) A(J)=A(J+1) A(J+1)=TEMP ENDIF CONTINUE CONTINUE WRITE(*,1010) ……..

C语言 第六章 数组

C语言 第六章 数组
2.
6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程

第6章 数组

第6章 数组
9
数组的声明- 6.2 数组的声明-二维数组
• 二维数组即下标个数为 的数组,其声明形式为: 二维数组即下标个数为 的数组, 声明形式为 即下标个数为2的数组 •
数组名[常量表达式 常量表达式2]; 常量表达式1][常量表达式 数据类型 数组名 常量表达式 常量表达式 例如,如果要存储60名学生 门课程的成绩, 名学生3门课程的成绩 例如,如果要存储 名学生 门课程的成绩,就可 以声明一个二维数组: 以声明一个二维数组: float score[60][3]; 或 const int row = 60, col = 3; float score[row][col]; 二维数组可以看做一个二维表(如图6-2所示 所示), 二维数组可以看做一个二维表(如图 所示), 因此,通常将数组中的第1个下标 即常量表达式1) 个下标( 因此,通常将数组中的第 个下标(即常量表达式 ) 称为行下标 行下标, 个下标( 称为行下标,第2个下标(即常量表达式 )称为列 个下标 即常量表达式2)称为列 下标。如score[row][col]中,row为行下标,col为 下标。 中 为行下标, 为 为行下标 列下标。 列下标。
比如,要存储60名学生 门课程的成绩, 名学生3门课程的成绩 比如,要存储 名学生 门课程的成绩,也可以 采用如下形式的一维数组: 采用如下形式的一维数组: float score[180]; 该一维数组长度为180,所以可以用来存储60名 该一维数组长度为 ,所以可以用来存储 名 学生*3门课程 门课程=180份成绩信息。 份成绩信息。 学生 门课程 份成绩信息
存储和分析的情况, 存储和分析的情况,而仅使用先前所学习的基本数 据类型来解决这类问题会非常烦琐。 据类型来解决这类问题会非常烦琐。 比如要对一个班中50名学生的成绩求平均值,就需 比如要对一个班中 名学生的成绩求平均值, 名学生的成绩求平均值 要定义50个变量 个变量score1, score2, …, score50来保存这 要定义 个变量 来保存这 50名学生的成绩,然后再通过计算 名学生的成绩, 名学生的成绩 (score1+score2+…+score50)/50得到平均成绩。如 得到平均成绩。 … 得到平均成绩 果求10000名儿童的平均体重,这种方法的编程工 名儿童的平均体重, 果求 名儿童的平均体重 作量就会非常大。 作量就会非常大。

C++课件 第六章 数组讲课稿

C++课件 第六章 数组讲课稿
• 定义内容: ·数组名 :必须是合法标示符 ·类型(存储属性/数据类型) ·大小(维数/元素个数)
• 定义的一般形式: 存储属性 数据类型 数组名[常量表达式][常量
表达式]… 常量表达式:常量或符号常量,其值必须为正,
不能为变量 !如:int n=5;int a[n];这样定义是错 误的,如下为正确的:int a[10],b[5][4]; char name[8], ch[2][3]; static float x[8*2+1], table[2][3][4];
f[i] = f[i-1] + f[i-2]; for(i=0; i<20; i++)
{ if (i%5 == 0) cout<<endl;
cout<<setw(12)<<f[i]; } }
【例】以下程序的运行结果 是什么?
#include <iostream.h> void main() {int a[][3]={{1,2,3},{4,5},{6},{0}};
Байду номын сангаас 【例】void main()
{int a[]={1,2,3,4,5,6}; static int b[6]={2,3,0,4}; int i;
结果: a=1,b=2
sum(int,int,int);
a=2,b=3
for (i=0;i<6;i++) {sum(a[i],b[i],i);
a=3,b=0
C++课件 第六章 数组
问题的引入
例:输入10个学生某门学科的成绩,求平均成绩。
开始
1、当读入下一分数时,前一分数值是否还能找到? 2、如何将低记于数平器均i=成1、绩总的分分z数f=打0 印出来?

C++课件第6章数组

C++课件第6章数组
C++课件第6章数组
C++课件第6章数组介绍了数组的概念、使用方法以及与指针的关系。学习数 组的多种用途和技巧,让你的程序设计更加高效和灵活。
一维数组
定义
了解一维数组的概念和声明方法。
遍历
掌握一维数组的遍历方法和技巧。
操作
学习如何对一维数组进行插入、删除和修改操作。
排序
掌握一维数组的排序算法和实现。

二维数组
定义
遍历
了解二维数组的概念和声明方法。
学习如何对二维数组进行遍历操 作。
操作
掌握二维数组的操作技巧和常见 应用。
多维数组
1 定义
了解多维数组的概念和声明方法。
3 操作
掌握多维数组的操作技巧和应用场景。
2 遍历
学习如何对多维数组进行遍历操作。
4 排序
学习多维数组的排序算法和实现。
数组作为参数
1
传递方式
了解数组作为参数的传递方式,如按值传递和按引用传递。
2
使用方法
学习数组作为参数时的使用方法和注意事项。
3
示例
掌握数组作为参数的实例和常见应用。
动态数组
定义
了解动态数组的概念和声明方法。
申请和释放
学习如何在程序运行过程中动态申请和释放内存。
使用方法
掌握动态数组的使用方法和常见问题。
STL中的数组
概述
了解STL中数组的概念和用处。
定义和初始化
学习如何定义和初始化STL中的数 组。
元素的访问
掌握STL数组中元素的访问方法和 技巧。
总结与思考
1 应用场景和注意事项
总结数组在实际应用中的常见场景和注意事项。

第六章 数组.

第六章 数组.

sc(i, j) = InputBox("输入sc(" &i & "," & j & ") 的值") Next j Next I
3、数组在内存中存放的顺序 数组在内存中存放时,首先变化的是最后一维的 下标,然后变化倒数第二维的下标…(按行存放)。 例如,数组A(4,3)在内存中的分配如下:
A(0,0) A(1,0)
其表示形式: A(1),A(6) X(1,1), X1(1,6), X(2,6)
Y(0,0,0), Y(1,2,5)
6.2 一维数组
一、 一维数组的声明 (无隐式声明)
形式:
Dim 数组名([<下界>to]<上界>)[As <数据类型>] 或: Dim 数组名[<数据类型符>]([<下界>to]<上界>) ‘ 声明了a数组有6个元素 数组元数的数据类型
二、 访问整个数组
对于数组中的各个元素,我们可以用数组名称 (索引值)进行访问。然而,是无法只用数组名称就 对所有的元素进行计算。
例如:要把数组中的各元素值都加上1 这是错误的! Dim X(4)
X=X+1 For I=0 to 4 x(i)=x(i) +1 这是正确的!
Next
无法对数组中的所有元素同时进行运算处理。 但是,可以一次“读取”整个数组本身。
6.4 数据排序与查找
数据交换
将A和B两个变量中的数值交换
A=B B=A Temp=A
A=B
B=Temp
一、选择排序
算法思想:
1)对有n个数的序列(存放在数组a(n)中),从中选 出最小(升序)或最大(降序)的数,与第1个数交 换位置;

《高级语言程序设计教学课件》第6章数组课件

《高级语言程序设计教学课件》第6章数组课件

二维数组的使用
通过实例演示,掌握二维数组的操作方法,如访问和修改元素,以及使用嵌 套循环处理二维数组的常见算法。
《高级语言程序设计教学 课件》第6章数组课件
通过本课件学习数组的基本概念、元素类型和存储方式,了解初始化、赋值 以及多维数组的使用。还将介绍数组在排序和查找算法中的应用。
介绍数组
数组是一种数据结构,可以存储多个相同类型的元素。它提供了方便的方式 来组织和访问数据,适用于各种编程任务。
数组的定义及基本概念
数组的下标及合法范围
了解数组下标的概念和用法,以及合法范围的限制。学习如何正确使用数组下标来访问和修改数组中的 元素。
一维数组的使用
学习如何声明、初始化和操作一维数组。通过实际示例演示使用一维数组解决常见的编程问题。
二维数组的定义及初始化
介绍二维数组的概念和用法,并学习如何声明和初始化二维数组。了解二维 数组在矩阵和图像处理中的应用。
了解如何定义数组,并掌握相关术语,如数组长度、数组元素和下标,以型和存储方式
学习不同类型的数组元素,例如整数、浮点数和字符,以及数组在内存中的存储方式,为更深入的理解 和应用提供基础。
数组的初始化和赋值
掌握数组的初始化方法,包括直接初始化和循环初始化。了解如何对数组进行赋值,以便存储和操作数 据。

c语言教学第6章 数组

c语言教学第6章  数组

§ 6.1 基本概念
整形、实型、字符型都属于基本类型。 其存储特点是:每个变量单独存储,亦称简单变 量。 如:char X=„a‟; int y1=0,y2; y2=X-1; 各变量之间独立存放,没有任何联系。
数组
数组是一种构造的数据类型,在计算机中分配连续 的内存空间。 数组:按序排列的具有相同类型的变量的集合。 用一符号名(数组名)来表示这一数组; 用数组名跟下标来唯一确定数组中的元素;
四、二维数组的初始化 (按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 2、按行赋值 如:int x[2][3]={ {1,2,3},{4,5,6} }; 3、部分赋值 如:static int x[2][3]={1,2,4}; static int x[2][3]={ {1,2,},{4} }; 4、省略第一维长度 如: static int x[][3]={1,2,3,4,5,6,7};
课后 练习:分别定义一个一维数组和一个二维数组并 初始化,找出一维数组和二维数组中的最大元素和最小 元素以及对应的下标。
§6.4
字符数组
定义形式: char 数组名[exp]
一 、字符数组的定义 如:char c[5]; 在C语言中没有专门的字符串 c[0]=„h‟; c[1]=„a‟ 变量,而是将字符串存入字符数 c[2]=„p‟; c[3]=„p‟; 组来处理。 c[4]=„y‟; 即用一个一维数组来存放一 还可以这样定义: 个字符串,每个元素存放一个字 int c[5]; 符。
c[0]=„h‟; c[2]=„p‟; c[4]=„y‟; c[1]=„a‟ c[3]=„p‟;
二、字符数组的初始化
1、按单个元素赋值
static char c[10]={„s‟,„t‟,„o‟,„r‟,„e‟};

《高级语言程序设计教学课件》第6章 数组-97页文档资料

《高级语言程序设计教学课件》第6章 数组-97页文档资料

f[2] f[7] f[12] f[17]
f[3] f[8] f[13] f[18]
f[4] f[9] f[14] f[19]
int i;
1
1
2
3
5
int f[20]={1, 1}; 8
13
21
34
55
89
144
for(i=2; i<20; i9+8+7) 1597
f[i]=f[i-2]+f[i-1];
printf(“Please input 10 for(i=0; i<10; i++) {
scanf(“%d”, &a[i]); avg+=a[i] }
data:\n”); /*输入10个数*/
11
avg=avg/10;
printf(“平均值为:%f\n”, avg);
for(i=1; i<10; i++)
整个数组 – 数组元素表示形式:
数组名[下标表达式] 其中:下标可以是整型常量或整型表达式
6
数组使用举例
例 a[0] = a[3] + a[5] + a[2*4]; 例 a[i] = a[i-1] + a[i-2]; 例 int a[10];
printf("%d", a);
7
数组元素的输入
a•[数0]组=1不;初始a[化1,]=其2;元素a[值2]为=随3;机a数[3]=4; a[4]=5; • 部分数组元素赋初值,没有赋初值的元素为0
例 • 当i全nt部数a[组5]元=素{6赋,2初,值3}时;,可不指定数组长度 a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 例 int a[]={1,2,3,4,5,6}; 编译系统根据初值个数确定数组元素个数

《高级语言程序设计教学课件》第6章数组

《高级语言程序设计教学课件》第6章数组

数组的定义方式
在高级语言中,我们可以使用语法来定义数组。常见的方式包括静态数组和动态数组。通过定义数组的大小和 数据类型,我们可以在程序中声明并初始化数组变量。
数组的元素访问方法
访问数组的元素可以通过数组变量和索引值的方式进行。索引值表示数组中 元素的位置,我们可以使用索引值来读取或修改数组中的元素。数组索引从0 开始,依次递增。
数组的传递方式
数组可以通过值传递和引用传递的方式进行参数传递。在值传递中,函数会 复制数组的元素到新的内存空间,而在引用传递中,函数操作的是原始数组 的地址。
数组在函数中的应用
数组在函数中的应用非常广泛。我们可以将数组作为函数的参数和返回值, 实现各种功能,如排序、搜索、过滤和统计等。通过函数的封装和调用,我 们可以实现对数组的复杂操作。
《高级语言程序设计教学 课件》第6章数组
数组是一种重要ห้องสมุดไป่ตู้数据结构,在高级语言程序设计中起到了至关重要的作用。 本章将介绍数组的概念、定义方式以及它在函数中的应用。我们还将学习各 种排序和搜索算法,以及动态数组的实现方式。
数组的概念及作用
数组是一种存储相同类型数据的容器,它能够提供高效的数据访问和处理。通过使用数组,我们可以组织和操 作大量数据,实现复杂的算法和数据结构。
数组的初始化方式
初始化数组可以通过显式赋值和循环赋值的方式。显式赋值是指在定义数组时直接给定初始元素的值。循环赋 值是通过循环语句逐个给数组元素赋值。
多维数组的定义及访问
除了一维数组,我们还可以定义多维数组。多维数组是由多个一维数组组成的,可以通过多个索引值来访问数 组中的元素。多维数组在处理矩阵和图像等复杂数据结构时非常有用。

计算机二级C语言第6章 数组

计算机二级C语言第6章 数组
定义一个二维数组的语句格式是: 类型标识符数组名[常量表达式1][常量表达式2] 【说明】 ①“类型说明符”说明了数组中的元素的类型,它可以是基本的数据 类型,也可以是构造数据类型,它告诉编译器数组中每个元素占用了 多少字节(每种数据类型都占用固定大小的内存)。
②“数组名”是数组的名称,它的命名方式与变量名相同,必须遵循 标识符的命名规则。
6.4.2 字符数组的引用
字符数组元素的引用与引用数值数组元素类似,也是将字符数组的每 个元素当成普通 的变量来使用。 一维字符数组的引用方式如下::
数组名[行下标表达式][列下标表达式] 【说明】 在引用字符数组时,同样要做到正确使用下标表达式。
6.4.3 字符数组的初始化
6.4 字 符 数 组
6.4.1 字符数组的定义
1.一维字符数组的定义 一维字符数组用于存储和处理一个字符串,其定义格式与一维数值数 组一样。形式如下:
char 数组名[下标表达式] 【说明】
数组名与下标表达式的意义与一维数值数组的数组名和下标表达式的 意义相同。 2.二维字符数组的定义 二维字符数组用于同时存储和处理多个字符串,其定义格式与二维数 值数组一样。
全国计算机等级考试教程
二级C语言程序设计
6.1 有关数组的基本概念
1.数组 数组是一组具有相同数据类型的数据的有序集合。 2.数组元素 在一个数组中,构成该数组的成员称为数组单元,即数组元素。
数组有两个基本的要素,即数据和数据的位置。其中,数据可以是前 面介绍的基本数据类型(整型、实型、字符型),也可以是构造数据 类型。数据的位置就是数据在数组中的相对位置,称之为“下标”。 3.数组维数 数组维数简单地说,就是在数组中元素“下标”的个数。
6.3.3 二维数组的初始化

第六章 数组

第六章 数组

第六章数组1 一维数组1.1 数组初始化1.2 对数组使用 sizeof 运算符2 多维数组2.1 多维数组初始化2.2 常量数组第六章数组到目前为止,我们见过的变量都只能村粗和单个数据项,这样的变量称为标量(scalar)。

C 语言也支持聚合变量,这类变量可以存储多个数据项。

C 语言提供两种类型的聚合变量:数组和结构体。

这章我们主要讲讲数组,结构体留到以后再讲。

1一维数组数组是含有多个数据项的数据结构,并且这些数据项都具有相同的数据类型。

这些数据项称为数组的元素,我们可以根据元素在数组中的位置来选取元素。

最简单的数组就是一维数组。

数组元素在内存中是依次排列的,如下图所示:声明一个数组,我们需要指定数组元素的类型和数量。

如:int a[10];数组元素可以是任何类型,数组的长度则必须是常量表达式(能够在编译期间求值的表达式)。

因为程序以后可能需要调整数组的长度,所以一般情况下,我们会使用宏来定义数组的长度:#define N10...int a[N];数组索引我们可以用数组索引来访问数组中的元素。

在 C 语言中,数组索引是从0开始的,所以长度为 n 的数组索引范围为0~ n-1。

假如 a 是含有10个元素的数组,那么这些元素可以依次标记为 a[0], a[1],..., a[9],如下图所示:数组和for循环是好伙伴,它们往往结伴而行。

下面给出了在长度为 N 的数组上的一些常见操作:/* c le a rs a */for (i=0; i<N; i++)a[i] =0;/* re a ds d a t a into a */for (i=0; i<N; i++)s ca nf("%d", &a[i]);/* sums the element of a */for (i=0; i<N; i++)sum+=a[i];C 语言有一个常被人诟病的问题:不检查数组索引越界(why?)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学学院
例6.3
用冒泡法对10个数排序
动画演示
排序过程: (1)比较第一个数与第二个数,若为逆序 a[0]>a[1],则交换;然后比较第二个数与第三个 数;依次类推,直至第n-1个数和第n个数比较为 止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上。 (2)对前n-1个数进行第二趟冒泡排序,结果使次 大的数被安置在第n-1个元素位置上。 (3)重复上述过程,共经过n-1趟冒泡排序后,排 序结束。
j
j
j
j
kБайду номын сангаас
49 38 27 ] j 49 49 j 38 ] 65 ]
四趟: 13
五趟: 13 六趟: 13
27
27 27
38
38 38
49
49 49
[76
65 65
97
[97 76
65 ]
76 ] [97 ]
计算机科学学院
Ch5_201.c
输入n 个数给a[1] 到 a[n] for i=1 to n-1 k=i for j=i+1 to n a[j]<a[k] 真 k=j
第六章 数组
西安工程大学
本章内容:
6.1 一维数组的定义和引用 6.2 二维数组的定义和引用 6.3 字符数组
请做练习
计算机科学学院
6.1
一维数组的定义和引用
基本数据类型有: 整型 实型 字符型 C语言还提供了构造类型的数据: 数组类型 结构体类型 共用体类型 构造类型数据是由基本类型数据按一定规则组成 的,也称 “导出类型”。 数组是有序数据的集合,数组中的每一个元素属于 同一数据类型,用数组名和下标唯一标识数组元素。
6.2
二维数组的定义和引用
6.2.1 二维数组的定义 二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式]
例如: float a[3][4],b[5][10]; a为3行4列的数组,b为5行10列的数组。
[注意]:不能写成 float a[3,4],b[5,10];
计算机科学学院
C语言对二维数组采用这样的定义方式, 使我们可以把二维数组看作是一种特殊的一维 数组:它的元素又是一个一维数组。 例如:
可以把a看作是一个一维数组,它有3个元 素:a[0]、a[1]、a[2]。每个元素又是一 个包含4个元素的一维数组。可以把a[0]、a[1]、 a[2]看作是3个一维数组的名字。 如图:
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 计算机科学学院
计算机科学学院
二维数组a是由3个元素组成
例 int a[3][4];
a[0] a[0][0] a[0][1] a[0][2] a[0][3] a[1] a[1][0] a[1][1] a[1][2] a[1][3] a[2] a[2][0] a[2][1] a[2][2] a[2][3] 行名
每个元素a[i]由包含4个元素 的一维数组组成
在第二种写法中,花括弧中有5个数,系 统就会据此自动定义a数组的长度为5。
计算机科学学院
但若被定义的数组长度与提供初值 的个数不相同,则数组长度不能省略。 例如: 想定义数组长度为10,就不能省略 数组长度的定义,而必须写成 int a[10]={1,2,3,4,5}; 只初始化前5个元素,后5个元素为0。
计算机科学学院
6.2.2
二维数组的引用
数组名[下标][下标]
二维数组元素的引用形式: 二维数组元素的初始化
分行初始化: 按元素排列顺序初始化 例 int a[2][3]={{1,2,3},{4,5,6}}; 例 int a[][3]={1,2,3,4,5}; a[2][3]={1,2,4}; 例 int a[2][3]={1,2,3,4,5,6}; a[][3]={{1},{4,5}}; 例例 int int a[2][3]={{1,2},{4}};
计算机科学学院
数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先 多维数组:最右下标变化最快
int a[3][2]
0 1 2
3 4 5
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
6.1.3 一维数组的初始化
对数组元素的初始化可以用以下方法实现:
(1) 在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8, 9};
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
0
1
2
3
4
5
6
计算机科学学院
[注意]: 不能使用数组元素a[6]。
计算机科学学院
(4) 常量表达式中可以包括常量和符号 常量,不能包含变量。
例如: 下面这样定义数组是不行的: int n; scanf("%d",&n); int a[n];
计算机科学学院
6.1.2
一维数组元素的引用
数组必须先定义,后使用。c语言规定 只能逐个引用数组元素而不能一次引用整 个数组。 数组元素的表示形式为: 数组名 [下标] 下标可以是整型常量或整型表达。例如: a[0]=a[5]+a[7]-a[2*3]
计算机科学学院
#include “stdio.h” void main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ",a[i]); } 运行结果如下: 9 8 7 6 5 4 3 2 1 0 计算机科学学院
i != k 真 a[i]a[k] 输出a[1] 到 a[n]
计算机科学学院


#include <stdio.h> void main() { int a[11],i,j,k,x; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<10;i++) { k=i; for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j; if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;} } printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); 计算机科学学院 }
例6.2 用数组求Fibonacci数列前20个数。
0 1 2
3 4 5
1 1 2 3 5 ……...
f[0] f[1] f[2] f[3] f[4] f[5]
19
f[19] 计算机科学学院
main() {
}
int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%12d",f[i]); }
计算机科学学院
int c[2][3][4]
0 1 2 3 4 5 6 7 ………...
20 21 22 23
c[0][0][0] c[0][0][1] c[0][0][2] c[0][0][3] c[0][1][0] c[0][1][1] c[0][1][2] c[0][1][3] c[0][2][0] c[0][2][1] c[0][2][2] c[0][2][3] c[1][0][0] c[1][0][1] c[1][0][2] c[1][0][3] c[1][1][0] c[1][1][1] c[1][1][2] c[1][1][3] c[1][2][0] c[1][2][1] c[1][2][2] c[1][2][3]
全部初始化 第一维长度省略初始化 第一维长度省略初始化 部分初始化 部分初始化 全部初始化
1 2 3 4 5 6 1 2 3 4 5 0 4 0 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 0 4 0 0 1 1 2 0 3 0 4 4 5 5 6 0
计算机科学学院
#define SIZE 10 void main() x[SIZE],i,max,min; 6.1.4 { int 一维数组程序举例 printf("Enter 10 integers:\n"); 例6.1 输入 10个整数,找出其中最大值和最小 for(i=0;i<SIZE;i++) 值。 { printf("%d:",i+1); 步骤: scanf("%d",&x[i]); 1. 输入:for } 循环输入10个整数 2. 处理: max=min=x[0]; for(i=1;i<SIZE;i++) (a) 先令max=min=x[0] { x[i] if(max<x[i]) max=x[i]; (b) 依次用 和max,min 比较(循环) if(min>x[i]) min=x[i]; 若max<x[i],令max=x[i] } 若min>x[i], 令 min=x[i] printf("Maximum value is %d\n",max); 3. 输出:max 和min printf("Minimum value is %d\n",min); 计算机科学学院 }
相关文档
最新文档