一维数组的定义和引用(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组大小最好用宏来定义,以适应未来可能的变化
#define SIZE 10 int a[SIZE];

数组大小定义好后,将永远不变。
下标越界是大忌!

使用大于最大下标的下标,将访问数组以外的空间。那里 的数据是未知的,可能带来严重后果
一维数组的输入和输出
只能逐个对数组元素进行操作(字符数组例外)
main()
{ int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; 例2将一个二维数组行 printf("array a:\n"); 和列元素互换,存到另 for (i=0;i<=1;i++) 一个二维数组中。 { for (j=0;j<=2;j++) { printf("%5d",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } 程序运行结果: printf("array b:\n"); array a: for (i=0;i<=2,i++) 1 2 3 4 5 6 { for(j=0;j<=1;j++) array b: printf("%5d",b[i][j]); 1 4 printf("\n"); 2 5 } 3 6
6.2
二维数组的定义和引用
6.2.1 二维数组的定义 当数组中的每个元素带有两个下标时,称这样的数组 为二维数组,其中存放的是有规律地按行、列排列 的同一类型数据。所以二维数组中的两个下标,一 个是行下标,一个是列下标。 二维数组的定义格式: 类型说明符 数组名[常量表达式][常量表达式]; 例如:float a[3][4],b[5][10];
6.1.3 一维数组元素的初始化
2)对数组的部分元素初始化
当初值个数少于所定义数组元素的个数时,系统将 自动给后面的元素补0。 例: int a[10]={0,1,2,3,4};
int b[10]={1};
a 0 1 2 3 4 0 0 0 0 0 b 1 0 0 0 0 0 0 0 0 0
数组的使用注意:
例1:编程序使a[0]到a[9]的值为0~9,然后按逆序输 6.1.4 一维数组程序举例 出。 main() { int i,a[10]; for (i=0; i<=9;i++)
a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]); } 运行结果如下:
9876543210
6.2.3 二维数组的初始化
二维数组的初始化分为4种情况: 1)分行给二维数组初始化 例: int a[2][3] ={{1,2,3},{4,5,6}}; 赋值后数组中各元素的值为: a[0][0]=1、 a[0][1]=2、 a[0][2]=3 a[1][0]=4、 a[1][1]=5、 a[1][2]=6
例3:有一个3*4的矩阵,求值最大的元素及 其所在的行号、列号。
max=a[0][0] for i=0 to 2 for j=0 to 3 a[i][j]>max 真 max=a[i][j] row=i col=j 输出: max和col

main( )
{int max, i , j , row=0, col=0;
第6章 数组
a[9]
数组a
a[8] a[7]
a
a[1]
a[0]

6.1 6.2 6.3
一维数组的定义和引用 二维数组的定义和引用 字符数组

数组:有序数据的集合。 注意:数组中的每一个元素都属于同一个数据类型, 用一个统一的数组名和下标来唯一地确定数组中的 元素。

一维数组:相同类型的数据按照线性次序顺序地排 列,所组成的集合。
上机作业
必做题:
1、通过键盘给一个2行3列的二维数组输入及输 出数据。 2、有一个3*4的矩阵,求值最小的元素及其所 在的行号、列号。
3、把一个3行3列的二维数组的行和列互换。
选做题:
1、求一个3*3矩阵对角线元素之和。
注意:
1)下标可以是整型常量或整型表达式。 例如: a[2][3]、 a[3-1][2*2-1]、 y[i+k][j+k] 2)在使用数组元素时,注意下标值应在已定义的数组大小的范 围内。 例如: int a[3][4]; … a[3][4]=3; //代表某一个元素 //定义数组的维数和各维的大小
(2) 数组名后是用方括弧括起来的常量表达式,不能用圆括弧。如: int a(5);
(3) 常量表达式表示元素的个数,即数组长度。
例如:在a[5]中,5表示a数组有5个元素,下标从0开始,
分别是,a[0],a[1],a[2],a[3],a[4]。 (4) 常量表达式中可以包括常量和符号常量,不能包含变量。 例如:int n; scanf("%d",&n);

例:int a[3];
6.1
一维数组的定义和引用
6.1.1 一维数组的定义 一维数组的定义格式: 类型说明符 数组名[常量表达式];
例如:
int a[10];
它表示数组名为a,此数组有10个元素。
系统会在内存分配连续的10个int空间给此数组
一维数组
a
0 1
2
3 4
5
6
7
8
9
说明: (1) 数组名命名规则和变量名相同,遵循标识符定名规则。
int a[10], i ; 输入方法: 输入第i个数组元素: scanf("%d",&a[i]); 输入整个数组元素: for (i=0;i<10;i++) scanf("%d",&a[i]);
输出方法:
输出第i个数组元素: printf("%d",a[i]); 输出整个数组元素: for (i=0;i<10;i++) printf("%d",a[i]);
2)将所有数据写在一个花括弧内,按数组排列 的顺序对各元素赋初值。
如:int a[2][3] ={1,2,3,4,5,6};
a 1 2 3 4 5 6
3)只给部分元素赋初值。
当某行一对花括号内的初值个数少于该行中元 素的个数时,系统将自动给该行后面的元素补 0。 如:int t[3][4]={1,5,9};
int a[n];
6.1.2 一维数组元素的引用
数组元素的引用形式: 数组名[下标];
注意:
1)数组必须先定义,后使用。 2)数组的下标都是从0开始。 3)下标可以是整型常量或整型表达式。 例如:
a[i]=3;
printf( “%d” , a[3] ); scanf ( “%d” , &a[3] );
6.1.3 一维数组元素的初始化
一维数组的初始化分为2种情况: 1)对数组的全部元素初始化 例:int a[5]={0,1,2,3,4}; int a[ ]={0,1,2,3,4}; 注意: 对数组元素全部赋初值时,可以不指定数组的长度。 请问:
a[0],a[1],a[2],a[3],a[4] 分别是多少?
例5.2 编程序:在给定的数组中查找用户输入的值,并输出查找 结果。 #include <stdio.h> 运行情况: #define N 6 d:2 ↙ main() a[3]=2 { int a[]={7,5,4,2,1,8}, i=0, d; printf(“d: ”); scanf("%d",&d); while (i<N&&a[i]!=d) i++; if (i<N) printf(“a[%d]=%d\n",i,d); else printf(“%d未找到\n",d); }
常见错误
int n=15; int data[n];
只能定义静态数组
int data[5]; data[5]=10; //C语言对数组不作越界检查,使用时要注意
数组中元素 个数必须是 正整数
int a[10],i; for(i=1; i<=10; i++) scanf(“%d”,&a[i]);
int a[10]; float i; a[i]=10;
int a[3][4]={{1,2,3,4}, {9,8,7,6},{-10,10,-5,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];
row=i; col=j;
} printf(“max=%d,row=%d,col=%d\n”,max,row,col); 程序运行结果: } max=10,row=2,colum=1
a[1][1]
a[1][2]
二维数组
int b[3][4];
b
3 8 1
5 10 4
9 7 3
7 2 6
二维数组
0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3
对应的下标
6.2.2 二维数组的引用
二维数组元素的引用形式: 数组名[行下标][列下标];
定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。
说明: (1) 二维数组的行、列下标均从0开始。
(2)二维数组中元素排列的顺序是:按行存放,即在内存 中先顺序存放第一行的元素,再存放第二行的元素。 例:int a[2][3]
a[0][0]
a[0][1]
a[0][2]
a[1][0]
int h[3][4]={{1},{0,6},{0,0,11}};
t
1 0 0
5 Fra Baidu bibliotek 0
9 0 0
0 0 0
h 1
0 0
0 6 0
0 0 11
0 0 0
4)数组初始化时可以省略第一维的长度,但第 二维的长度不能省。
如:int t[ ][3]={{1,2,3},{4,5,6}}; int a[ ][3]={1,2,3,4,5,6}; int a [ ][ 4]={{0,0,3},{},{0,10}};
第一维的长度按以下规则决定:
当初值个数能被列下标除尽时,所得商就是第一维的大小。 当初值个数不能被列下标除尽时,第一维大小=所得商+1。
程序运行结果: 6.2.4 二维数组的应用 1 2 3 4 5 6 7 8 9 10 11 12 例1. 通过键盘给一个31 行42 列的二维数组输入及输出数据。 3 4 main() 5 6 7 8 {int a[3][4] , i , j , k; 9 10 11 12 for (i=0;i<3;i++) for (j=0, j<4,j++) scanf("%d“, &a[i][j]); for (i=0;i<3;i++) { printf(“\n"); for (j=0, j<4,j++) printf("%d\t", a[i][j]); } printf(“\n"); }
相关文档
最新文档