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