三.多维数组
(一).二维数组
1.定义
2.二维数组的引用
3.二维数组的输入与输出
通过使用双层循环来实现二维数组的输入与输出
(1).实例代码
/*输入a[3][4]*/
for(i = 0; i < 3; i ++)
{
for(j = 0; j < 4; j ++)
{
scanf("%d",&a[3][4]);
}
}
/*输出a[3][4]*/
for(i = 0; i < 3; i ++)
{
for(j = 0; j < 4; j ++)
{
printf("%d",&a[3][4]);
}
}
4.二维数组的存储
计算机内存的编码规则是线性的,系统会为数组在内存中分配一段连续的内存空间,将二维数组元素按照先行后列的顺序存储在分配的内存区域内。
5.二维数组的初始化
示例:
(1).为全部元素赋值
int a【2】【3】={1,2,3,4,5,6};
int a【2】【3】={{1,2,3},{4,5,6}};
(2).为部分元素赋初值
int a【2】【3】= {{1},{3,5}};//a数组的元素依次为1,0,0,3,5,0
int a【2】【3】={1,3,5};//a数组元素依次为1,3,5,0,0,0
6.二维数组的应用
(1).矩阵求转置问题
示例代码:
a={ 1 2 3 b= { 1 4
4 5 6 }转置为——> 2 5
3 6 }
#include<stdio.h>
int main()
{
int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2];
int i, j;
for(i = 0; i <= 1;i ++)
{
for(j = 0; j <= 2; j ++)
{
b[j][i] = a[i][j];//实现转置,将a数组的值转置后放在b数组中
}
}
printf("array a: \n");//输出a数组
for(i = 0; i <= 1;i ++)
{
for(j = 0; j <= 2; j ++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
printf("array b: \n");//输出b数组
for(i = 0; i <= 2;i ++)
{
for(j = 0; j <= 1; j ++)
{
printf("%d",b[i][j]);
}
printf("\n");
}
return 0;
}
(2).矩阵乘法
思路如下:
//矩阵乘法
//a: m * n
//b: n * p
//c: m * p
//注意a b c矩阵形参实参的结合形式,每个矩阵的遍历
void MatrixMul(int ** a, int ** b, int ** c, int m, int n, int p)
{
//a b 相乘
for(int i = 0; i < m; i ++)
{
//a的第i行
int * pa = (int*)(a + i * n);
//c的第i行
int * pc = (int*)(c + i * p);
for(int j = 0; j < p; j ++)
{
pc[j] = 0; //c的第i行第j列
for(int k = 0; k < n; k ++)
{
int * pb = (int*)(b + k * p);
//a的i行,k列
//b的k行j列
//c的i行,j列
pc[j] += pa[k] * pb[j];
}
}
}
}
(3).求二维数组中的最大值最小值,以及主对角线元素的和
思路:最大值最小值的求法依旧是遍历思想,不过值得强调的一点是,涉及主对角线的矩阵必须是一个方阵。
示例代码:
#include "stdio.h"
#include"conio.h"//for getch()
int main( )
{
int a[3][3]={4,3,35,67,5,23,7,9,0}, i,j,maX,min,s;
max = min = a[0][0];
s = 0;
for(i = 0;i < 3;i ++)
{
for(j = 0;j < 3;j ++)
{
if(max <a[i][j])
maX=a[i][j];//找最大值
if(min>a[i][j])
min = a[i][j];//找最小值
if(i == j)
s = s+a[i][j];//主对角线上元素求和
}
}
printf("The maX is: %d\n", max);
printf("The min is: %d\n", min);
printf("S= %d\n", s);
getch();//使运行框停留
return 0;
}
(二).字符数组
此内容请到“C语言程序设计之数组,精华知识与基础知识汇总(下)”查看