您的位置:首页 > 编程语言

矩阵相关运算代码实现

2016-06-14 18:41 661 查看
1. 两个矩阵相乘

#include <iostream>
#include<stdio.h>
using namespace std;

int main()
{
int a[3][3],b[3][3],c[3][3];
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
printf("please input a[%d][%d]\n",i,j);
scanf("%d",&a[i][j]);
}
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
printf("please input b[%d][%d]\n",i,j);
scanf("%d",&b[i][j]);
}
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
c[i][j] = 0;
for(int k=0;k<3;k++)
{
c[i][j] += a[i][k]*b[k][j];
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d\t",c[i][j]);
}
printf("\n");
}
return 0;
}


2.矩阵转置

#include <iostream>
#include<stdio.h>
using namespace std;

int main()
{
int a[3][3],temp;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
printf("please input a[%d][%d]\n",i,j);
scanf("%d",&a[i][j]);
}
for(int i=0;i<3;i++)
for(int j=i;j<3;j++)    // 此句是关键
{
if(i==j)continue;
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
return 0;
}


3.求矩阵的鞍点(行最大,列最小)

#include <iostream>
#include<stdio.h>
#define M 3
#define N 4
using namespace std;

int main()
{
int a[M]
;
int i,j;
int temp = 0;
int maxNum,t,k;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
for(i=0;i<M;i++)
{
maxNum = a[0][0];
for(j=i+1;j<N;j++)
{
if(a[i][j]>a[i][maxNum])
maxNum = j;
}
for(t=1,k=0;k<M&&t;k++)
{
if(a[k][maxNum]<a[i][maxNum])
{
t = 0;
break;
}
}
if(t) printf("%d,%d,%d\n",i,maxNum,a[i][maxNum]);
}
return 0;
}


4.矩阵周边之和问题

#include <iostream>
#include<stdio.h>

using namespace std;

int main()
{
int M,N;
int sum = 0;
printf("please input the value of M,N \n");
scanf("%d%d",&M,&N);
int a[M]
;
printf("please input the value of a[][]");
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
{
if(i==0||i==M-1)
{
sum += a[i][j];
}
else
{
if(j==0||j==N-1)
sum += a[i][j];
}
}
printf("%d\n",sum);
return 0;
}


5.判断矩阵是否为对称阵

#include <iostream>
#include<stdio.h>

int main()
{
int a[3][3],flag=1;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
for(int i=0;i<3;i++)
for(int j=i;j<3;j++){
if(a[i][j]!=a[j][i]){
flag = 0;
}
}
if(flag)printf("该矩阵是对称阵");
else{
printf("该矩阵不是对称阵");
}
return 0;
}


6.判断一个矩阵是另一个矩阵的子矩阵
#include <iostream>
#include <cstdio>
using namespace std;
int a[100][100],b[100][100];
int ma,na,mb,nb;
bool check(int x,int y)
{
bool ans=1;
for(int i=0;i<nb;i++)
{
for(int j=0;j<mb;j++)
{
if(a[x+i][y+j]!=b[i][j])
{
ans=0;
break;
}
}
}
return ans;
}

int main()
{
scanf("%d%d%d%d",&na,&ma,&nb,&mb);
for(int i=0;i<na;i++)
{
for(int j=0;j<ma;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<nb;i++)
{
for(int j=0;j<mb;j++)
{
scanf("%d",&b[i][j]);
}
}
int ans1=0;
for(int i=0;i<na;i++)
{
for(int j=0;j<ma;j++)
{
if(check(i,j)==1)
{
ans1=1;
break;
}
}
}
printf("%d\n",ans1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: