//自定义函数声明
void add(int *m,int *m1,int *m2,int r,int c)//矩阵加法
void sub(int *m,int *m1,int *m2,int r,int c)//矩阵减法
void mult(int *m,int *m1,int *m2,int r,int p,int c)//矩阵乘法
void disp(int *m,int r,int c)//打印数组数据(矩阵里的数据)
//主测试函数
void main()
{
int a[3][4]={{4,3,5,2},{5,1,7,3},{2,7,6,2}}
int b[3][4]={{2,4,4,-7},{4,2,5,-8},{7,-3,-4,2}}
int c[4][3]={{5,4,4},{1,3,1},{4,4,2},{7,1,3}}
int d[3][4]={0}
int e[3][4]={0}
int f[3][3]={0}
printf("\nA(3x4):\n")
disp(a[0],3,4)//显示矩阵a
printf("\nB(3x4):\n")
disp(b[0],3,4)//显示矩阵b
add(d[0],a[0],b[0],3,4)// 计算矩阵 a + b,并将结果存到d中
printf("\nD(3x4)=A+B:\n")
disp(d[0],3,4)//显示a+b的结果(即d中的数据)
sub(e[0],a[0],b[0],3,4)// 计算矩阵 a - b,并将结果存到e中
printf("\nE(3x4)=A-B:\n")
disp(e[0],3,4)//显示a-b的结果(即e中的数据)
printf("\nA(3x4):\n")
disp(a[0],3,4)// 显示矩阵a
printf("\nC(4x3):\n")
disp(c[0],4,3)//显示矩阵c
mult(f[0],a[0],c[0],3,4,3)//计算矩阵a*c 并将结果存到f中
printf("\nF(3x3)=A*C:\n")
disp(f[0],3,3)//显示a*c的结果(即f中的数据)
}
//函数定义
/*
*****函数功能:两个矩阵进行加法运算 C = A+B
*****参数: m 指向运算结果存放的二维数组(即矩阵) C的首地址
***** m1为矩形A的首地址,m2为矩形B的首地址
***** r 为矩阵的行数, c为矩阵的列数
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)这个表示将矩阵A的第i行j列的数据 与 矩阵B的第i行j列的数据 相加
然后将结果赋值给矩阵C的第i行j列数据
*(m1+i*c+j) :m1+i*c+j 这个表示指向矩阵A的第i行第j列的数据的指针,则 *(m1+i*c+j) 就表示矩阵A的第i行第j列的数据
*(m2+i*c+j) :m2+i*c+j 这个表示指向矩阵B的第i行第j列的数据的指针,则 *(m2+i*c+j) 就表示矩阵B的第i行第j列的数据
*(m+i*c+j) : m+i*c+j 这个表示指向矩阵C的第i行第j列的数据的指针,则 *(m+i*c+j) 就表示矩阵C的第i行第j列的数据
这里是用指针实现的,
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)
等价于
c[i][j] = a[i][j] + b[i][j]
*/
void add(int *m,int *m1,int *m2,int r,int c) //
{
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)
}
//注释与上边加法类似
void sub(int *m,int *m1,int *m2,int r,int c) //两个矩阵之间的减法运算
{
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j)
}
/*注释与上边类似,因为矩阵乘法运算公式较为复杂一些,可自行对照矩阵乘法运算公式
如矩阵c = a * b
for(k=0k<pk++)
t += *(m1+i*p+k) * *(m2+k*c+j)//表示将m1的第i行k列的数据 与 m2的第k行j列的数据相乘 ,
//并将p (k的值从0到p) 次结果进行累加
*(m+i*c+j)=t //最后将这个累加的结果赋值给矩阵c的第i行第j列的数据
*/
void mult(int *m,int *m1,int *m2,int r,int p,int c)//两个矩阵之间的乘法运算
{
int i,j,k,t
for(i=0i<ri++)
for(j=0j<cj++)
{
t=0
for(k=0k<pk++)
t += *(m1+i*p+k) * *(m2+k*c+j)
*(m+i*c+j)=t
}
}
//显示打印矩阵中的数据
void disp(int *m,int r,int c)
{
int i,j
for(i=0i<ri++)
{
for(j=0j<cj++)
printf("%6d",*(m+i*c+j))
printf("\n")
}
}
C语言标准最初只有一种注释
就是以/*开始 到*/结束。 中间部分 都是注释。
后来增加了行注释
以//开始。 //之后的整行 都是注释。
目前//用的更多一些。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)