C语言入门:二维数组的概要

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//2个小队 每个小队有6名成员 1500
//一维数组的定义格式 有一个下标 用一个循环
//类型说明符 数组名 【长度】;
//二维数组的定义格式 有二个下标 用两个循环
//类型说明符 数组名 【下标1(行)】【下标2(列)】;
int arr[2][6]; //一共12个成员
//数组的下标 从0 开始的 不管是行 还是列
//二维数组的引用
//arr[0][0]=123123;
//arr[0][1]=124;
//循环赋值
//定义两个下标 行和列
int h,l;
//二维数组的循环赋值
for(h=0;h<2;h++)//行 下标 从0开始
{
for(l=0;l<6;l++)//列
{
arr[h][l]=1; //二维数组中的元素 全部赋值为1
}
}
//循环输出
for(h=0;h<2;h++)//行 下标 从0开始
{
for(l=0;l<6;l++)//列
{
printf("%d ",arr[h][l]);
}
printf(" ");
}
}

//-----------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{ //3行4列的二维数组
//二维数组求和
int arr[3][4];
int i,j,sum=0;//行 列 求和
//先给二维进行赋值 输入 赋值
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("请输入一个数:");
scanf("%d",&arr[i][j]);
sum=sum+arr[i][j];//累加公式
}
}
//然后 累加求和 矩阵输出
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",arr[i][j]);
}
printf(" ");
}

printf("二维数组之和为:%d,平均分:%.2f",sum,(float)sum/(i*j));
}

//-----------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//二维数组的对角线之和( 左对角线 右对角线)
int arr[4][4]={{1,2,3,4},{1,1,1,1},{5,5,5,5},{1,1,1,1}};
//1.行初始化 2.列初始化 3.部分初始化
//int brr[4][4]={1,2,3,4, 5,6,7,8, 9,10,11,12 };
int i,j,sum=0,rsum=0;//行下标 列下标 求和 右对角线之和
printf("打印数组中的元素结果: ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",arr[i][j]);
}
printf(" ");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i==j)//因为咱要求 左对角线
{
sum=sum+arr[i][j]; //左对角线的和
}
}
}
printf("左对角线的和为:%d ",sum);

for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i+j==3)//行下标+列下标 ==最大长度-1(最大下标值)
{
rsum=rsum+arr[i][j];
}
}
}
printf("右对角线的和为:%d ",rsum);
}

//-----------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//二维数组每一行的和
int arr[4][4]={{1,2,3,4},{1,1,1,1},{5,5,5,5},{1,1,1,1}};
int a[4];//一维数组 用来存放 二维数组的每一行 和
int i,j,sum;//下标行 下标列 每一行的和
printf("1. 直接求完,就输出。 ");
for(i=0;i<4;i++)//行
{
sum=0;//求行 在这初始化就可以了
for(j=0;j<4;j++)//列
{
sum=sum+arr[i][j];
}
//直接求完 一行。
printf("%d行的一行之和为:%d ",i,sum);
//打印二维数组的行的结果。 1. 直接求完,就输出。
}
printf("2.利用新数组(求每一行的和完之后根据下标存到新数组里) ");
// 2.利用新数组(求每一行的和完之后根据下标存到新数组里)
for(i=0;i<4;i++)//行
{
sum=0;//求行 在这初始化就可以了
for(j=0;j<4;j++)//列
{
sum=sum+arr[i][j];
a[i]=sum;//把每一行的和 赋值给 新数组中
}
}
//循环输出一维数组的结果
for(i=0;i<4;i++)
{
printf("%d行的结果为:%d ",i,a[i]);
}
}

//-----------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//二维数组的转置 行变列 列变行
//{1,2,3}
//{4,5,6} 2行3列
//通过转置 变成 3行2列
//{ , }
//{ , }
//{ , }

int arr[2][3],brr[3][2];
int i,j;//行 列
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("输入一个数:");
scanf("%d",&arr[i][j]);
}
}
//先打印出来, 查看一下。
printf("打印出来,看看效果。 ");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",arr[i][j]);
}
printf(" ");
}
//转置的效果
printf("二维数组转置之后的效果: ");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)//转置的功能
{
brr[j][i]=arr[i][j]; //赋值符号 是把 后面的元素 赋值到 前面的变量中
// 0,0 -> 0,0
// 0,1 -> 1,0
// 0,2 -> 2,0
}
}
//打印 转置之后结果。
for(j=0;j<3;j++)
{
for(i=0;i<2;i++)
{
printf("%d ",brr[j][i]);
}
printf(" ");
}
}

//-----------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int arr[4][4]={{1,2,3,4},{1,8,1,16},{5,5,5,5},{1,24,1,48}};
int ou[16],ji[16],o=0,q=0;//计数也是下标
int h,l,t;//冒泡排序
//二维数组中 所有奇数全部 为当前2倍,比如3 --》 3*2
//所有的偶数 全部乘6 如果 2 --》 2*6
//拆分数组 二维数组 变成 两个一维数组
int i,j;//循环的下标
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(arr[i][j]%2==0)//找到元素 为偶数的时候
{
ou[o]=arr[i][j];
o++;//下标移动 也可以理解为 计数。
}
else
{
ji[q]=arr[i][j];
q++;//下标移动 也可以理解为 计数。
}
}
}
//一定打印出来 因为 需要 检查一下。
printf("偶数的: ");
for(i=0;i<o;i++)
{
printf("%d ",ou[i]);
}
printf(" 奇数的: ");
for(j=0;j<q;j++)
{
printf("%d ",ji[j]);
}

//对两个数组 进行 冒泡排序 h,l ,t 行 列 中间变量
//把变化之后的 奇数 进行冒泡排序从小到大 一维数组
for(h=1;h<q;h++)//行
{
for(l=0;l<q-h;l++)//列 下标 从 0
{
if(ji[l]>ji[l+1])//拿第一个元素 和 他后面的元素 比较
{
t=ji[l];
ji[l]=ji[l+1];
ji[l+1]=t;
}
}
}
printf(" 奇数的冒泡排序:从小到大: ");
for(j=0;j<q;j++)
{
printf("%d ",ji[j]);
}
//把变化之后的 偶数 进行冒泡排序从大到小 一维数组
for(h=1;h<o;h++)//行 从1开始
{
for(l=0;l<o-h;l++)//列是下标 从0开始
{
if(ou[l]<ou[l+1])//l是小写的L
{
t=ou[l];
ou[l]=ou[l+1];
ou[l+1]=t;
}
}
}
printf(" 偶数的冒泡排序:从大到小: ");
for(i=0;i<o;i++)
{
printf("%d ",ou[i]);
}

}

二维数组的注意事项

1.行序号和列序号的下标都是从 0 开始的。元素 a[i][j] 表示第 i+1 行、第 j+1 列的元素。

2.数组 int a[m][n] 最大范围处的元素是 a[m1][n1]。所以在引用数组元素时应该注意,下标值应在定义的数组大小的范围内。 

3.定义数组时用到的“类型说明符 数组名[常量表达式][常量表达式]”和引用数组元素时用到的“数组名[下标][下标]”是有区别的。前者是定义一个数组,以及该数组的维数和各维的大小。而后者仅仅是元素的下标,像坐标一样,对应一个具体的元素。

原文地址:https://www.cnblogs.com/ZJ-CN/p/12260856.html