数组(一维与二维)

合集下载

C51 数组

C51 数组
数组名[行常量表达式 列常量表达式]= 初值表 行常量表达式][列常量表达式 初值表}; 数据类型 数组名 行常量表达式 列常量表达式 ={初值表 ;
赋值规则:按二维数组在内存中的排列顺序,将初值表中 的数据,依次赋给各元素。 如果对全部元素都赋初值,则“行数”可以省略。 注意:只能省略“行数”。
3.2.4 二维数组应用举例
例3-2-1 有M个学生,学习N门课程,已知 所有学生的各科成绩,编程:分别求每个学 生的平均成绩和每门课程的平均成绩。
#define NUM_std 5 /*定义符号常量人数为5*/ #define NUM_course 4 /*定义符号常量课程为4*/ #include <stdio.h> main() { int i,j; static xdata float score[NUM_std+1][NUM_course+1]={{78,85,83,65}, {88,91,89,93}, {72,65,54,75}, {86,88,75,60}, {69,60,50,72}}; for(i=0;i<NUM_std;i++) {for(j=0;j<NUM_course;j++) { score[i][NUM_course] += score[i][j];/*求第i个人的总成绩*/ score[NUM_std][j] += score[i][j]; /*求第j门课的总成绩*/ } score[i][NUM_course] /= NUM_course;/*求第i个人的平均成绩*/ }
素赋初值时也可以省去长度说明
例3-3-1 定义一个二维数组,在放字符串“BASIC”、 “DBASE”,并输出。

掌握一维和二维数组的定义和数组元素的引用方法(精)

掌握一维和二维数组的定义和数组元素的引用方法(精)
பைடு நூலகம்
static int arr[3][2]={{1, 2},{3}}; /*采用第①种赋初值方式*/ static int arr[3][2]={ 1, 2, 3}; /*采用第②种赋初值方式*/ 上面二种对数组arr部分元素赋初值的结果是相同的, 都是对数组arr的前面3个元素赋初值,后面叁个元素未 赋初值,系统自动化赋以0值。
12
§7.2 二维数组的定义和引用
在计算机中多维数组其实只是一个逻辑上的概念,在内 存中,多维数组只按元素的排列顺序存放,形成一个序 列,就好似一维数组一样。 §7.2.1 二维数组的概念
二维数组的应用很广,例如平面上的一组点的集合就可 用二维数组表示,平面上的点可用二维数组来表示:
08:47
13
⑦元素个数代表着数组的长度。
08:47 5
§7.1.2 一维数组使用
数组一经定义后,就可在程序中使用,使用格式如下: 数组名[下标] 例如 : var[3]=28; var[4]=var[2]; str[3]= ‘d’; str[2]=str[4]; printf(“%d”, a[0]); 说明: ①下标可以是整数或整型表 达式 。如:var[i+j]=2; ②C编译不检查下标是否 “出界”。
下标的值不应超过数组的长度,如var数组的长度为5, 则下标的取值在0~4的范围内。
08:47 6
【例7-1】 一维数组在程序中的使用
/*exam7_1.c 一维数组在程序中的使用*/ #include <stdio.h> main() { int i,a[5]={1,2,3,4,5}; /*初始化数组*/ printf("输出数组元素的正确值: \n"); for(i=0;i<5;i++) printf("%d\t",a[i]); printf("\n输出超出下标的元素的值:\n"); for(i=5;i<10;i++) /*使用超出下标的元素*/ printf("%d\t",a[i]); printf("\n改变数组元素的值:\n");

一维和二维数组的定义

一维和二维数组的定义

7.3 字符数组和字符串
7.3.4.1字符串输入输出 --包含头文件 字符串输入输出 包含头文件stdio.h 包含头文件 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存储单元 中的字符,直到遇到第一个‘\0’为止。并自动输出一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组元素地 址或下一章将要介绍的字符指针。 7.3.4.2字符串处理函数 -- 包含头文件string.h 字符串处理函数 1.字符串复制函数strcpy。调用形式如下: strcpy(s1,s2) 2.字符串连接函数strcat。调用形式如下: strcat(s1,s2)
第七章
数组
♦一维和二维数组的定义 ♦数组元素引用 ♦字符数组和字符串 ♦数组应用的基本算法
7.1一维数组
7.1.1 一维数组的定义
数组的维数是指表示数组使用的下标个数,如果数组中 每个元素只带有一个下标,称这样的数组为一维数组。 定义形式为: 类型说明符 数组名[常量表达式]; 数组名[常量表达式] 类型说明符指出数组元素的数据类型,数组名是标识 符,元素个数使用方括号和常量表达式。 【讨论】C语言数组大小的规定。 【讨论】如何理解数组名。
7.2 二维和多维数组
7.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标, 形式如下: 数组名[下标1][下标2]
7.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元, 数组元素按行顺序存放,先放行下标是0的元素,再 放行下标是1的元素,... 数组int a[3][4]的存储示意
7.3 字符数组和字符串
7.3.3 字符串数组
字符串数组就是数组中的每一个元素又都是存放字 符串的数组。 可以将一个二维字符数组看作一个字符串数组。 例:char line[10][80]; 数组line共有10个元素,每 个元素可以存放80个字符(79个普通字符,一个结束字 符),第一个下标决定字符串个数,第二个下标决定字 符串的最大长度。line是有10个字符串的数组,这些字 符串的最大长度为79。

数组的基础知识 一维数组 二维数组 控件数组 动态数组

数组的基础知识 一维数组 二维数组 控件数组 动态数组

1.2 数组的维数
如果数组的元素只有一个下标,则称这个数组为一 维数组。 用两个下标来表示元素的数组称为二维数组。对于 可以表示成表格形式的数据,例如矩阵、行列式 等,用二维数组来表示是非常方便的。 根据问题的需要,我们还可以选择使用三维数组、 四维数组,甚至更多维的数组。在Visual Basic 中最多允许有60维数组。例如我们想表示空间上 的一个点P,其坐标有三个,分别是X轴、Y轴、 Z轴上的坐标,那么我们可以使用三维数组来表 示,数组的第一维表示X坐标,第二维表示Y坐标, 第三维表示Z坐标,如用P(x,y,z)来表示。
ReDim [Preserve] 数组名[(维数定义)][As 数据类型]……
5.3 相关知识
几点说明: (1) “上界”和“下界”可以是常量和有确定值的变量; (2)可以使用“ReDim”语句多次改变数组的数组元素个数和维 数,但不能改变这个数组的数据类型; (3)如果重新定义数组,则会删除它原有数组元素中的数据,并 将数值型数组元素全部赋0,将字符型数组元素全部赋空串; (4)如果要重定义后不删除原有数据,应在定义数组时增加 “Preserve”关键字,只能改变最后一维的上界,不可以改变 数组的维数。 (5)ReDim语句只能出现在过程中。 由上可知,动态数组声明时省略了括号中的下标,没有给定数组 的大小。使用时需要用“ReDim”语句重新指出其大小。使用 动态数组的优点是根据用户需要,有效地利用存储空间,是在 程序执行到ReDim语句时才分配存储单元,而静态数组是在程 返回 序编译时分配存储单元的
返回
2.1数列排序案例说明
该程序可以产生一个包含十个元素的随机整数序 列,通过运行代码可以求出这个数列中的最大 值、数列的平均值以及按升序排列,当按下 “插入新数据”按钮时,用户可以通过键盘输 入一个新的整数,构成一个包含11个元素的数 组,并且把新输入的整数按升序插入到正确的 位置,

专题5 一维数组和二维数组的概念及基本应用

专题5 一维数组和二维数组的概念及基本应用

A) 3
B) 6
C) 10
D) 20 D
5.有以下程序 [08年4月]
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(“%d”,c[i]);
if(a[j]<a[k]) k=j; t=a[k];a[k]=a[i];a[i]=t; } printf(“排序结果为:\n”); for(k=0;k<6;k++) printf(“%d”,a[k]); }
例2 用交换排序法对数据升序排序,请填空 #inlcude<stdio.h> main() { int a[5]={4,6,1,3,9} i, t; for(i=0;i<5;i++)
for(j=0;j<4-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
printf(“排序结果为:\n”); for(i=0;i<5;i++)
printf(“%d”,a[i]);}
假设有5个数
98888 89666 66944 44493 33339
1 一维数组
数组是c语言中一种最简单的构造类型,每个定义好的数组包含一组同一 类型的变量,这些变量在内存中占有连续的存储单元,在程序中这些变量具 有相同的名字,但具有不同的下标,数组要先定义后使用。
1.1 一维数组定义的一般形式

第8章 数组

第8章 数组
首页 上一页
– 二维数组的存储
• 从逻辑上看,二维数组元素间的关系相当 于矩阵:第一维长度是矩阵的行数,第二 维长度是矩阵的列数。 • 从存储上看,内存是一维的、线性的空间, 那么就要采取一定的方式将二维的数组映 射到一维的内存中去。 • C语言中采用行优先的方式来存储二维数 组,同一行中再按列顺序存放。 • 若有定义: static float f[3][4]; 则f是一个3行4列的数组,它在内存中的 存储示意图如右图所示: 上一页
• b[i]和b+i都表示第i行首地址,二者值相同,但类型却不同: 前者的基类型为二维数组元素类型,后者的基类型为二维数 组的行(即一维数组类型)。 • 若考虑b为一维数组类型的一维数组,*(b+i)为b的第i个元 素,则*(b+i)与b[i]等价。
– 数组元素的地址
• 二维数组元素地址的类型是基类型为数组元素类型的指针 类型,如&b[i][j]就可以看作基类型为整型的指针类型。 • 对于二维数组b中第i行、第j列(0<=i<=2,0<=j<=3)的元素的 地址可表示为:b[i]+j或*(b+i)+j。 •二维数组在内存中按行序顺次存放,元素b[i][j]之前已存放 了第0行、第1行、…第i-1行共i行元素;在第i行中,b[i][j]之 前已经存放了第0列、第1列、…第j-1列共j个元素,即b[i][j] 之前共有i*4+j个元素,那么,b[i][j]的地址也可表示为 : &b[0][0]+i*4+j或b[0]+i*4+j。 上一页
– 将字符串常量赋给字符数组
• 可将字符串常量中的字符逐个赋值给字符数组,且最后一 个字符是空字符。 • 可以在定义字符数组时同时将字符串常量赋值给它。 • 定义字符数组时可省略数组的长度,系统会根据所赋字符 串常量的实际长度来确定字符数组的长度。 上一页

一维数组和二维数组的区别

一维数组和二维数组的区别

(1)一维数组行排列的一维数组又称一维水平数组,如果我们现在要输入一个包含1,2,3,4,5五个数字的数组,我们首先要选择一个一行五列的区域,这里就选择了A1:E1区域,然后在上方的编辑栏内输入数组公式“={1,2,3,4,5}”,接着按Ctrl+shift+enter组合键来执行计算,这样就能将数组公式中的数字分别依次输入到相应的单元格当中(得到结果后,编辑栏将会显示公式为“{={1,2,3,4,5}}”),这样就能得到一个一维水平数组了。

具体流程可以参考下面的动态图:Ctrl+shift+enter有一维水平数组,自然就有纵向排列的数组。

生成这样的数组,过程与上面十分类似,具体流程如下:首先要选择一个一列五行的区域,这里就选择了A1:A5区域,然后在上方的编辑栏内输入数组公式“={1;2;3;4;5}”,接着依然按Ctrl+shift+enter组合键来执行计算,这样就能将数组公式中的数字分别依次输入到相应的单元格当中(得到结果后,编辑栏将会显示公式为“{={1;2;3;4;5}}”)。

具体流程可以参考下面的动态图:动态示例图(2)二维数组二维数组的突出特点便是多行多列,其形式与矩阵类似,这里有必要说明一点,为了更好地理解二维数组,我们从上面两种一维数组的数组公式“={1,2,3,4,5}”,“={1;2;3;4;5}”可以看出,横向一维数组用中的每个数字使用逗号隔开,纵向一维数组是用分号隔开,所以二维数组中分号和逗号必然是必不可少的组成部分,希望大家提前能有这个概念。

比如我们现在需要生成一个三行三列的数组,就以1,2,3,4,5,6,7,8,9为数组中的数据元素,我们首先要选择一个三行三列的区域,这里就选择了A1:C3区域,然后在上方的编辑栏内输入数组公式“={1,2,3;4,5,6;7,8,9}”,接着按Ctrl+shift+enter组合键来执行计算,这样就能将数组公式中的数字分别依次输入到三行三列的区域相应的单元格当中(得到结果后,编辑栏将会显示公式为“{={1,2,3;4,5,6;7,8,9}}”),这样就能得到一个二维数组了。

C与数据结构 第9次课--一维数组和二维数组的定义和使用

C与数据结构 第9次课--一维数组和二维数组的定义和使用
《C语言与数据结构》
第9次课----一维数组和二维数组的定义和使用
第4章
一维数组元素的引用
引用形式 数组名[整型表达式] 下标的取值 0≤ 整型表达式 ≤元素个数-1 例如 int a[10]; 表示有10个整型元素,分别为: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
第4章
二维数组的初始化
二维数组定义时赋值,可以按行分段赋值,也可以 按行连续赋值。 例如 按行分段赋值: int a[3][3]={ {80,75,92}, {61,65,71}, {59,63,70} }; 按行连续赋值: int a[3][3]={ 80,75,92,61,65,71,59,63,70 };
在全部元素赋值的情况下,这两种 赋初值的结果是完全相同的。
《C语言与数据结构》
第9次课----一维数组和二维数组的定义和使用
第4章
二维数组的初始化
例如 (1)int a[3][3]={ {80,75}, {61}, {59,63} }; (2)int a[3][3]={ 80,75,61,59,63 }; (3)int a[3][3]; 问题:这三行的结果如何? (1)
第4章
一维数组的定义
定义形式 类型标识符 数组名[整型常量表达式]; 本质 声明数组元素的类型和个数之后,编译器才能为 该数组分配合适的内存。 举例 #define M 20 int a[10]; 定义a是有10个整型元素的数组 float b[5]; 定义b是有5个浮点型元素的数组 char ch[M+6];定义ch是有M+6即26个元素的字符 型数组
《C语言与数据结构》
第9次课----一维数组和二维数组的定义和使用
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 例 有一个3×4的矩阵,求出其中最大值,以及它所在的行和列。 main() { int i,j,r=0,c=0,max; static int a[3][4]={{1,5,3,4},{9,8,7,6},{-8,20,1,2}}; max=a[0][0]; for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; r=i; c=j; } printf(″max=%d,r=%d,c=%d\n″,max,r,c); }
注意:数组元素的下标(行 static 数据类型 二维数组名[常量][常量]={{常量列
表},…};
功能: 定义一个二维数组,并给每个数组元素赋初值。
(1)分行给二维数组赋初值。
static int a[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; (2)将所有数据写在一个花括弧内,按数组排列的顺序对各元素 赋初值。 static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; (3)可以对部分元素赋初值。


一维数组的定义和引用
二维数组的定义和引用
字符数组
一维数组的定义和引用
1.1 一维数组的定义 格式: [存储类型] 数据类型 数组名[常量表达式]; 功能: 定义一个一维数组,常量表达式的值,就是数组元素的个 数。 例如:int a[10]; 表明数组名为a,此数组有10个元素.
说明:
(1)数组名规定和变量名相同,遵守标识符命名规则。 (2)数组名后是用方括弧括起来的常量表达式,不能为圆括弧。
2.4 二维数组应用举例 • 例 求一个3×3矩阵的主对角线之和。 main() { static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) sum=sum+a[i][j]; printf(“sum=%d”,sum); } 运行结果: sum=15
static int a[3][4]={{1},{5},{9}};
结果为 1 0 0 0 5 0 0 0 9 0 0 0
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以 不指定,但第二维的长度不能省略。如:
static int a[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12}; • 等价于: static int a[][4] ={1,2,3,4,5,6,7,8,9,10,11,12}; 在定义时也可以只对部分元素赋初值,而省略第一维的长度,但应 分行赋初值。如: static int a[][4] ={{0,0,1},{0},{0,6}}; 0 0 1 0 0 0 0 0 0 6 0 0
1.4 一维数组应用举例
例1: 已有10个数,求它们当中的最大值。 main() {int i,max; static int n[10]={8,2,4,6,7,1,0,85,32,54}; max=n[0]; /* 将数组第1个元素赋给变量max */ for(i=1;i<10;i++) if(n[i]>max) max=n[i]; printf(″max=%d\n″,max); } 运行结果: max=85
(3)给一个数组中全部元素值为0,可以写成:
static int a[10]={0,0,0,0,0,0,0,0,0,0}; 或 static int a[10]; (4)给全部数组元素赋初值时,可以不指定数组长度: static int a[5]={1,2,3,4,5}; 可以写成: static int a[]={1,2,3,4,5};
例2: 用数组来处理求Fibonacci数列问题。 Fibonacci数列F(n)的定义如下: 1 当n=0,1时 F( n) F(n-1)+F(n-2)当n≥2时 main() { int i; static 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″); /* 每行输出5个数据 */ printf(″%10d″,f[i]);
1.3 一维数组的初始化
• 格式:static 数据类型 数组名[常量]={常量列表};
• 功能:在定义数组时对数组元素赋以初值。 (1)给数组a各元素赋以初值:
static int a[10]={0,1,2,3,4,5,6,7,8,9};
(2)给一部分元素赋初值,后几个元素值为0。 static int a[10]={0,1,2,3,4};


运行结果如下:
• • 1 8 1 13 2 21 3 34 5 55


89
987
144
1597
233
2584
377
4181
610
6765
二维数组的定义和引用
2.1 二维数组的定义 格式:[存储类型] 数据类型 数组名[常量表达式1][常量表达式2]; 功能: 定义一个二维数组。表达式1是数组元素的行数,表达式2是 数组元素的列数。 例如: float a[3][4],b[5][10]; 在 C语言中,二维数组中元素排列的顺序是按行存放. 2.2 二维数组的引用 二维数组元素的表示形式为: 数组名[下标1][下标2]
(1)下标可以是整型常量或表达式,例如: a[2][3],a[2-1][2*2-1]。 (2)数组元素可以出现在表达式中,也可以被赋值。 b[1][2]=a[1][2]/3; (3)在使用数组元素时,应该注意下标值应在已定义的数组大小 的范围内,如:
int a[3][4];
a[3][4]=3; /*a[3][4]超过了数组的范围*/
(3)常量表达式表示元素个数,即数组的长度。常量表达式可以 是整型的常量或符号常量,不能是变量
下面的定义是错误的。
int n; scanf(″%d″,&n); int a[n]; (4)数组元素的下标从0开始。 如:a[0],a[1],a[2],…,a[9]。 1.2 一维数组元素的引用 数组元素的表示形式: 数组名[下标] 下标可以是整型常量、整型变量或整型表达式。 例如:a[0]=a[5]+a[7]-a[2*2]。
相关文档
最新文档