/*
功能:1,矩阵相加
2,矩阵相乘
3,矩阵转置
4,冒泡排序
5,打雷台算法
作者:SunHongGuang
时间:2015/12/13
*/
#include<stdio.h>
#include<stdlib.h>
#define M 2
#define N 3
#define P 4
void JuZhenXiangJia()
{//两个矩阵相加
int i,j;
int A[M][N],B[M][N],C[M][N];
//由用户输入矩阵A的元素
printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&A[i][j]);
}
}
//在屏幕上显示矩阵A
printf("\n矩阵A如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",A[i][j]);
}
printf("\n");
}
//由用户输入矩阵B的元素
printf("\n请输入矩阵B的元素(矩阵B为两行三列矩阵):\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&B[i][j]);
}
}
//在屏幕上显示矩阵B
printf("\n矩阵B如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",B[i][j]);
}
printf("\n");
}
//矩阵A和矩阵B相加的和放在矩阵C中
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
C[i][j]=A[i][j]+B[i][j];
}
}
printf("\n矩阵A与矩阵B的和为矩阵C如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",C[i][j]);
}
printf("\n");
}
printf("\n");
}
void JuZhenXiangCheng()
{//矩阵相乘
int i,j,k;
int A[M][N],B[N][P],C[M][P];
//由用户输入矩阵A的元素
printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&A[i][j]);
}
}
//在屏幕上显示矩阵A
printf("\n矩阵A如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",A[i][j]);
}
printf("\n");
}
//由用户输入矩阵B的元素
printf("\n请输入矩阵B的元素(矩阵B为三行四列矩阵):\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
scanf("%d",&B[i][j]);
}
}
//在屏幕上显示矩阵B
printf("\n矩阵B如下所示:\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
printf("%3d",B[i][j]);
}
printf("\n");
}
//矩阵A乘以矩阵B积放在矩阵C中
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<P;j++)
{
C[i][j] = 0;
for(k=0;k<N;k++)
{
C[i][j] = C[i][j]+A[i][k]*B[k][j];
}
}
}
printf("\n矩阵A乘以矩阵B为矩阵C如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<P;j++)
{
printf("%5d",C[i][j]);
}
printf("\n");
}
printf("\n");
}
void JuZhenZhuanZhi()
{//矩阵转置
int i,j;
int A[M][N],B[N][M];
printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&A[i][j]);
}
}
printf("\n矩阵A如下所示:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",A[i][j]);
}
printf("\n");
}
//矩阵A转置为矩阵B
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
B[j][i] = A[i][j];
}
}
printf("转置后得到的矩阵B为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("%3d",B[i][j]);
}
printf("\n");
}
}
void MaoPaoPaiXu()
{//冒泡排序
int i,j,t;
int a[10];
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(j=0;j<9;j++) //实现9趟比较
{
for(i=0;i<9-j;i++) //在每一趟比较中比较9-j次
{
if(a[i]>a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
}
printf("排序后的数组为:\n");
for(i=0;i<10;i++)
{
printf("%3d",a[i]);
}
printf("\n\n");
}
void DaLeiTaiSuanFa()
{//打雷台算法求二维数组中最大值的行和列
int i,j,row=0,colum=0,max;
int a[N][P];
printf("请输入二维数组的元素(二维数组是三行四列):\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("二维数组如下:\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
max = a[0][0];
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
if(a[i][j]>max)
{
max = a[i][j];
row = i;
colum = j;
}
}
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
}
void TuiChu()
{
system("pause");
printf("请按任意键退出...");
exit(0);
}
void XuanZhe()
{//选择操作函数
int n;
printf("\t===============================================\n");
printf("\t\t<1>矩阵相加\t<2>矩阵相乘\n");
printf("\t\t<3>矩阵转置\t<4>冒泡排序\n");
printf("\t\t<5>求二维数组中最大值的行号和列号\n");
printf("\t\t<0>退出系统...\n");
printf("\t===============================================\n");
while(1)
{
printf("请输入你的选择:");
scanf("%d",&n);
switch(n)
{
case 1:printf("***矩阵相加***\n");JuZhenXiangJia();break;
case 2:printf("***矩阵相乘***\n");JuZhenXiangCheng();break;
case 3:printf("***矩阵转置***\n");JuZhenZhuanZhi();break;
case 4:printf("***冒泡法排序***\n");MaoPaoPaiXu();break;
case 5:printf("***打雷台算法求二维数组中最大值的行号和列号***\n");DaLeiTaiSuanFa();break;
case 0:TuiChu();break;
default:printf("输入的选项不存在!请重新输入:\n");
}
}
}
void main()
{
XuanZhe();
system("pause");
return;
}