在昨天我们初步学习了C语言的二维数组部分,今天我们将继续昨天的学习,继续学习二维数组。话不多说,我们先来看看今天的学习目标:
1、求二维数组所有元素和、平均值
2、求二维数组中所对应平面位置的对角线之和,反对角线元素和
3、求每一行元素和、每一列元素之和
4、求所有元素的最大值、最小值
5、求每一行元素的最大值和最小值(求出每一行元素的最大值存入一个一维数组中,求改一维数组的升序排序)
6、简单地输出杨辉三角
7、把二维数组a赋值给数组b
8、二维数组的转置
一、求二维数组所有元素和、平均值
分析:1、定义求和变量并初始化为0(sum=0)
2、将数组元素(a[ i ][ j ])进行累加(sum+=a[ i ][ j ])
二、求二维数组中所对应平面位置的对角线之和,反对角线元素和
1、正对角线的判断条件(行下标==列下标)
2、反对角线的判断条件(行下表+列下标==最大下标)
注:橙色为正对角线,绿色为反对角线。
三、求每一行元素和、每一列元素之和
假设定义一个数组int a[ 2 ][ 3 ]; 求每一行每一列元素之和
分析:1、先了解两个【】之间谁控制行?谁控制列?
2、按行求值
求第一行 sum=0; sum=sum+a[ 0 ][ j ];
求第二行 sum=0; sum=sum+a[ 1 ][ j ];
3、按列求值
求第一列 sum=0; sum=sum+a[ i ][ 0 ];
求第二列 sum=0; sum=sum+a[ i ][ 1 ];
求第三列 sum=0; sum=sum+a[ i ][ 2 ];
四、求所有元素的最大值、最小值
假设定义一个数组int a[ 2 ][ 3 ]; 求 所有元素的最大值和最小值
分析:
1、定义最大值变量max,最小值变量min
2、假设定义第一个元素为最大值(max=【0】【0】)
假设定义第一个元素为最小值(max=【0】【0】)
3、数组范围之内,进行逐一比较
If(max<a【i】【j】){max=a【i】【j】;}
If(min>a【i】【j】){min=a【i】【j】;}
五、求每一行元素的最大值和最小值(求出每一行元素的最大值存入一个一维数组中,求改一维数组的升序排序)
假设定义一个数组int a[ 2 ][ 3 ]; 求每一行元素的最大值
分析:
- 定义一个最大值变量max,一个最小值变量min
- 按行求值
第一行:
假设第一个元素为最大值最小值(max=a【0】【0】 min=a【0】【0】)
逐一比较 if(max<a【i】【j】){max=a【i】【j】;}
If(min>a【i】【j】){min=a【i】【j】;}
第二行:
假设第一个元素为最大值最小值(max=a【1】【0】 min=a【1】【0】)
逐一比较 if(max<a【i】【j】){max=a【i】【j】;}
If(min>a【i】【j】){min=a【i】【j】;}
第三行:
假设第一个元素为最大值最小值(max=a【2】【0】 min=a【2】【0】)
逐一比较 if(max<a【i】【j】){max=a【i】【j】;}
If(min>a【i】【j】){min=a【i】【j】;}
六、简单地输出杨辉三角
如图所示我们总结一下杨辉三角的一些特性:
1、第一列和正对角线的元素均为1( if(j==0) | | j==i {a【i】【j】=1} )
2、其余所有元素均等于正上方元素及左上方元素之和( else{ a【i】【j】=a【i-1】【j】+a【i-1】【j-1】; } )
七、将二维数组a赋值给数组b(数组赋值)
先定义一个数组int a【2】【3】{1,2,3,4,5,6};将二位数组a赋值给数组b,输出b中所有的元素
分析
- 定义二维数组int b【2】【3】;
- 在a数组范围之内,逐一进行赋值,将a的元素给相对应的b元素
b【i】【j】= a【i】【j】;
八、二维数组的转置
转置,进行行列转换,行变成行,行变列
如图所示:
分析:
以元素5为例,在数组a中6的下标为a【1】【2】
在数组b中6的下标为b【2】【1】
总而言之行列交换a【i】【j】=》b【j】【i】
好了到这里我们也就完成了今天的学习,今天的内容比较多,所以也需要大家花更多的时间去理解消化,我相信大家通过对自己不断地高要求学习最终一定可以掌握C语言的技能学习。我还是会在底下放思维导图供大家理解,谢谢!
1、求和
①所有元素求和
sum=0;
for(i=0; i<h; i++)
{
for(j=0; j<l; j++)
{
sum = sum + a[i][j];
}
}
printf("和是%d" , sum);
②满足条件元素求和
for(i=0; i<h; i++)
{
for(j=0; j<l; j++)
{
if(条件) //奇偶数、四边、非四边、对角线、非对角线……
{
sum = sum + a[i][j];
}
}
}
if(a[i][j]%2==0) 偶数
if(a[i][j]%2!=0) 奇数
if(i==0 || i==h-1 || j==0 || j==lm -1) 四边
if( !(i==0 || i==h-1 || j==0 || j==l-1) ) 非四边
if(i==j || i+j==h-1) 对角线【正对角线\ 、 反对角线/】 【存在对角线、行列一定相等】
if( !(i==j || i+j==h-1) ) 非对角线
if(i%2!=0 && a[i][j]%2==0) 行下标为奇数的偶数元素
③每一行元素求和
for(i=0; i<3; i++)
{
sum=0;
for(j=0; j<4; j++)
{
sum = sum + a[i][j];
}
printf("第%d行元素之和是%d" , i+1 , sum);
}
④每一列元素求和
for(j=0; j<4; j++)
{
sum=0;
for(i=0; i<3; i++)
{
sum = sum + a[i][j];
}
printf("第%d列元素之和是%d" , j+1 , sum);
}
2、最大值
①所有元素最大值
//1、找第一个元素站上去 a[0][0]
max = a[0][0];
maxline = 0;
maxlist = 0;
for(i=0; i<line; i++)
{
for(j=0; j<list; j++)
{
if(max < a[i][j])
{
max = a[i][j];
maxline = i;
maxlist = j;
}
}
}
printf("最大值是%d在第%d行第%d列" , max , maxline+1 , maxlist+1);
②每一行元素的最大值
for(i=0; i<h; i++)
{
max = a[i][0];
for(j=0; j<l; j++)
{
if(max < a[i][j])
{
max = a[i][j];
}
}
printf("%d " , max);
}
②每一列元素的最大值
for(j=0; j<l; j++)
{
max = a[0][j];
for(i=0; i<h; i++)
{
if(max < a[i][j])
{
max = a[i][j];
}
}
printf("%d " , max);
}
3、边边角角的分析 【行数和列数相等的时候我们进行分析】
①正对角线 i == j
②反对角线 i+j == 行数-1
③四边 i==0 || i==n-1 || j==0 || j==n-1
④非四边 ! (i==0 || i==n-1 || j==0 || j==n-1)
⑤反对角先i+j==n-1将矩阵分为 左上角 VS 右下角 i+j<n-1 i+j>n-1
⑥正对角线i==j将矩阵分成 右上角 VS 左下角 i<j i>j
中间行 i==h/2
中间列 j==l/2
4、转置
行列互换,int a[3][4]; >> int b[4][3];
b[j][i] = a[i][j]
先转置
for(i=0; i<h; i++)
{
for(j=0; j<l; j++)
{
b[j][i] = a[i][j];
}
}
再输出
for(i=0; i<list; i++) //注意注意:i < list
{
for(j=0; j<line; j++) //注意注意:j < line
{
printf("%d " , b[i][j]);
}
}
5、关于技能赋初始值
int sum = 0;
int count = 0;
int p = 1;
char b[100] = "";
6、杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
特点: ①第一列 和 正对角线 都为1 if(j==0 || i==j) a[i][j] = 1;
②其余元素都等于上面两个角的元素之和 else a[i][j] = a[i-1][j] + a[i-1][j-1];
for(i=0; i<line; i++)
{
for(j=0; j<=i; j++) //三角形 j<=i
{
if(j==0 || j==i)
{
a[i][j] = 1;
}
else
{
a[i][j] = a[i-1][j] + a[i-1][j-1];
}
}
}
//输出
//正三角形输出
for(i=0; i<line; i++)
{
for(j=0; j<=i; j++) //三角形 j<=i
{
printf("%d " , a[i][j]);
}
}
//倒三角形输出
for(i=h-1; i>=0; i--)
{
for(j=0; j<=i; j++) //三角形 j<=i
{
printf("%d " , a[i][j]);
}
}