扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
直接输入对应元素即可。
创新互联建站是一家专业从事网站制作、成都网站设计、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,创新互联建站依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
m*m的矩阵,即a[m][m]这种形式的数组。
于是,左上角,就是第一行第一个元素,用C语言表示就是a[0][0];
右下角,也就是最后一行最后一个元素,C语言表示为a[m-1][m-1];
然后根据类型进行输出即可。如整型矩阵可以用语句
printf("左上角=%d, 右下角=%d\n", a[0][0], a[m-1][m-1]);
上面那个程序是我写的,下面写的是两个2*2矩阵相加和相乘的程序(行数和列数可以在主函数中更改),不得不说一句,有关矩阵的东西就是麻烦:
#include stdio.h
#include stdlib.h
int** NewMatrix(int row,int col) //动态开辟一个数组
{
int i,j;
int** matrix;
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//输入矩阵的元素
printf("please input the array elements:\n") ;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
scanf("%d",matrix[i][j]);
}
}
return matrix;
}
//两矩阵相加a[row][col]+b[row][col]
int **addMatrix(int** a,int** b,int row,int col)
{
int i,j;
int** matrix;
//动态建立一个矩阵空间以存放运算结果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//计算a+b
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
matrix[i][j] = a[i][j] + b[i][j];
}
}
return matrix;
}
//两矩阵相乘a[row][com]*b[com][col]
int **multiplyMatrix(int **a,int **b,int row,int com,int col)
{
int i,j,k;
int** matrix;
//动态建立一个矩阵空间以存放运算结果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//计算a+b
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
matrix[i][j] = 0;
for(k=0;kcom;k++)
{
matrix[i][j] += a[i][k] * b[k][j];
}
}
}
return matrix;
}
void main()
{
int i,j;
int row = 2,col = 2; //行数和列数在此更改
int **a,**b,**c;
a = NewMatrix(row,col); //动态建立矩阵a
b = NewMatrix(row,col); //动态建立矩阵b
//调用函数,求两矩阵的和
c = addMatrix(a,b,row,col);
//输出两矩阵的和
printf("\na add b is:\n");
for(i=0;irow;i++)
{
printf("\n");
for(j=0;jcol;j++)
{
printf("%d ",c[i][j]);
}
}
//调用函数,求两矩阵的积
c = multiplyMatrix(a,b,row,row,col);
//输出两矩阵的积
printf("\na multiply b is:\n");
for(i=0;irow;i++)
{
printf("\n");
for(j=0;jcol;j++)
{
printf("%d ",c[i][j]);
}
}
}
本来程序还可以写得简单一些,由于你要求两矩阵同时能够相加和相乘,从而可以判定两矩阵的行数和列数应该是相等的,因而在函数传递参数的时候只要传一个就行了。但是考虑到程序的可移植性,我在写相加和相乘的子函数时,考虑了普遍性,即对于给定的任意的row和col(甚至row != col),加法和乘法都能够适用。然而这样一来,形参看起来就比较多了。你自己就情况而定吧,不懂的地方发我消息。
①目标
存在N×N二维数组矩阵,
将数组右上半三角元素中的值乘以了m
~
②命令行
#include stdio.h
#include stdlib.h
#include string.h
#define N 5
~
③定义函数
viod fun(int a[ ][N],int m)
1.先行后列,全部遍历
{int i,j;
for(i=0;iN;i++)
for(j=0;jN;j++)
if(i=j)a[i][j]*=m;
}
2.先行后列,遍历右上三角
{int i,j;
for(i=0;iN;i++)
for(j=i;jN;j++)
/*0ijN,j为从i到N*/
a[i][j]*=m;
}
3.先列后行,全部遍历
{int i,j;
for(j=0;jN;j++)
for(i=0;iN;i++)
if(i=j)a[i][j]*=m;
}
4.先列后行,遍历右上三角
{int i,j;
for(j=0;jN;j++)
for(i=j;iN;i++)
/*0ijN,i为从j到N*/
a[i][j]*=m;
}
~
④主函数
void main()
{int a[N][N],m,i,j;
printf("The array\n");
for(i=0;iN;i++)
{for(j=0;jN;j++)
{a[i][j]=rand()%20;
/*二维数组元素a[i][j]为0到19的随机数。*/
printf("%4d",a[i][j]);}
printf("\n");
}
m=rand()%4;
/*矩阵右上半三角翻m倍,m为0到19的随机数。*/
printf("m=%4d\n",m);
fun(a,m);
/*利用fun函数,将二维数组右上角翻 m倍。*/
printf("the result\n");
for(i=0;iN;i++)
{for(j=0;jN;j++)
printf("%4d",a[i][j]);
/*遍历行列后,依次输出翻m倍后的二维数组的各元素。*/
printf("\n");}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流