您的位置:首页 > 健康 > 养生 > 免费网站建设加盟_安徽建设人才网官网_浏览器大全网站_推广营销平台

免费网站建设加盟_安徽建设人才网官网_浏览器大全网站_推广营销平台

2024/12/23 12:56:33 来源:https://blog.csdn.net/qq_21106275/article/details/143979251  浏览:    关键词:免费网站建设加盟_安徽建设人才网官网_浏览器大全网站_推广营销平台
免费网站建设加盟_安徽建设人才网官网_浏览器大全网站_推广营销平台

C语言中不仅可以存储一维数组,还可以存储二维数组。二维数组类似矩阵,有行/列等

二维数组的定义:数据类型 数组名[常量表达式1][常量表达式2];

示例:

int a[2][3];//定义一个2*3的二维int型数组
float f[3][4];//定义一个3*4的二维float型数组

二维数组的存储方式:

C语言对二维数组的存储方式是:将二维数组视为一种特殊的一维数组,它的元素又是一个一维数组。例如,对于二维数组:

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[0][0]->a[0][1]->a[0][2]->……->a[2][3]
获取数组元素:类似一维数组:数组名[下标1][下标2]

二维数组的初始化

1)分行给二维数组赋值。例如:

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

每行的元素使用花括号分隔开,中间用逗号分隔开

2)把所有的元素都写在一个花括号内,这样会按照数组在内存中的存储顺序给二维数组赋值。例如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

类似于一维数组,如果有未写的则默认为0

3)可以对二维数组的部分元素赋值:例如:

int a[3][4]={{1},{5},{9}};

则赋值结果是a[0][0]=1,a[1][0]=5,a[2][0]=9

int a[3][4]={{1},{0,6},{0,0,11}};

则赋值结果是a[0][0]=1,a[1][1]=6,a[2][2]=11
这种方法对非0元素较少时比较方便。

4)可以提供全部元素的初值,这样常量表达式1(即第一个下标)可以缺省不写,系统会根据输入的多少来计算行数。但常量表达式2(即第二个下标)不可缺省。例如:

int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

则系统自动计算出这个二维数组是a[3][4]
思考:如果int a[][4]={1,2,3,4,5,6,7,8,9,10};则该二维数组是多少?
答案:同样是a[3][4],只不过10以后的两个元素未初始化,变成默认值0

注意:C语言对于数组下标越界不予检查。因此对于数组的操作要十分注意其边界值。如果指定了数组长度而初始化元素个数多余指定的数组元素个数,如:

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

则会只取前n个数据进行初始化(n是指定长度,如这里n=6),后面的剩余数据舍弃。编译期间编译器会报warning。

练习1:自定义一个3*4的矩阵,输出矩阵中值最大的元素,并输出其数组下标
答案:

#include <stdio.h>
#define LINE 3
#define COL 4
int main()
{int a[LINE][COL]={55,11,77,33,22,88,44,100,121,66,555,99};//自定义int i,j,max,x=0,y=0;max=a[x][y];for(i=0;i<LINE;i++){for(j=0;j<COL;j++){if(a[i][j]>max){x=i;y=j;max=a[i][j];}}}printf("最大元素是%d\n数组下标是%d和%d\n",max,x,y);return 0;
}

练习2:打印杨辉三角型前10行
杨辉三角型:杨辉三角型是形如以下矩阵的三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
……
答案:

#include <stdio.h>
#define LINE 10
int main()
{int yanghui[LINE][LINE]={0};int i,j;//构造杨辉三角型for(i=0;i<LINE;i++){for(j=0;j<=i;j++){if(j==0)yanghui[i][j]=1;else if(i==j)yanghui[i][j]=1;elseyanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];}}//构造杨辉三角型end//打印杨辉三角型for(i=0;i<LINE;i++){for(j=0;j<LINE;j++){if(yanghui[i][j]!=0)printf("%-4d",yanghui[i][j]);}printf("\n");}//打印杨辉三角型endreturn 0;
}

使用数组的注意事项:

1)二维数组的第一个下标可以省略不写,编译器会根据我们初始化值的多少计算出数组的第一个下标。而第二个下标不可以省略不写。例如:

int a[3][]={1,2,3,4,5};//非法

如果这样写,编译器在分配内存的过程中不知道需要分配多大的空间(因为第二个下标未定),因此会报错。
2)不能为数组整体赋值。如:

int a[10]=1;
int a[10];a={1,2,3,4,5,6,7,8,9,10};
以上2种都是错误的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com