C语言知识点总结8【二维数组】

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

C语言知识点总结8【二维数组】

一、二维数组的定义

●一个3行,4列的二维数组。其行号:0,1,2;其列号:0,1,2,3

●最大下标的元素为a[2][3],没有a[3][4]这个元素

●数组共有3行,每一行都是:4个元素的一维数组,每一行的数组名分别为:a[0],a[1],a[2]

●从整体看,任何一个二维数组都可以看成是一个一维数组,只不过其数组元素又是一个一维数

组。

●二维数组定义同时若有初始化,可以省略行号不写:如int a[][3]={1,2,3,4,5,6};系统会按照数据

的个数,和规定的列数,来确定数据分几行?

●二维数组定义同时若有初始化,可以省略行号不写,但列号不能省略:如int a[3][ ]={1,2,3,4,5};

系统无法按照数据的个数,和规定的行数,来确定数据分几列。

二、二维数组的存储及地址关系

二维数组在计算机中的存储是按行连续存储。先保存第一行,在第一行末尾开始存第二行,依此类推。

这里,a是a[0]的地址,a[0]是数组元素a[0][0]的地址,则a是地址的地址,即二级地址

三、 二维数组的初始化

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};

3、 部分元素赋值

4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。

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

四、 二维数组的输出

五、

二维数组的输入

六、二维数组的应用

案例1:计算一个二维数组的主对角线元素之和

主对角线元素的特点:行号与列号相同。选择性求和。

反对角线元素的特点:?

#include

void main()

{

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

int i,j;

int s=0;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(i==j)s=s+a[i][j];

printf("%4d\n",s);

}

案例2:一共有5名同学,参加了3门课程的考试。输入所有学生的各科的成绩,并打印输出。

#include

void main()

{int a[5][3];

int i,j;

for(i=0;i<5;i++)

for(j=0;j<3;j++)

scanf("%d",&a[i][j]);

printf("C语言\t高数\t英语\n");

for(i=0;i<5;i++)

{for(j=0;j<3;j++)

printf("%d\t",a[i][j]);

printf("\n" );

}

}

案例3:找出上述表格中每门课程的最高得分。

【案例4】设计一个3*5的二维数组,用来存储三名同学(每行为一名同学信息)三门课的成绩,并计算三门课的总分,放在第4列,平均分放在第5列。

#include

void main()

{

int a[3][5];

int i,j;

int s=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",&a[i][j]); //接收三行中的前3列,用于存放三门课的成绩

for(i=0;i<3;i++) //对每行完成下面计算

{

s=0; //每一行,计算之前,先将s变量清0

for(j=0;j<3;j++)

s+=a[i][j]; //用循环,计算每行三门课的和

a[i][3]=s; //将和存入第4列

a[i][4]=s/3; //将平均值存入第5列

}

printf("语文\t英语\t数学\t总分\t平均分\n");

for(i=0;i<3;i++)

{for(j=0;j<5;j++)

printf("%d\t",a[i][j]);

putchar('\n');

}

}

【案例5】找一个二维数组中,每行的最大值,并输出

案例分析:分别对每一行数据进行下面操作:

第0行:m=a[0][0],m和a[0][1]到a[0][3]比较,遇到更大的,就给m,并记录下标Array第1行:m=a[1][0],m和a[1][1]到a[1][3]比较,遇到更大的,就给m,并记录下标

第2行:m=a[2][0],m和a[2][1]到a[2][3]比较,遇到更大的,就给m,并记录下标

因此得规律:第i行,m=a[i][0]

参考代码如下:

#include

void main()

{

int a[3][4];

int i,j;

int m,hang,lie;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

for(i=0;i<3;i++)

{

m=a[i][0];hang=i;lie=0; //给m赋值

for(j=1;j<4;j++)

if(m

printf("第%d行的最大值为:%d,它所在的数组元素为:a[%d][%d]\n",i,m,hang,lie); //比较结束后,输出该行的最大值及其下标

}

}

相关文档
最新文档