/* 功能: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; }
时间: 2024-10-14 23:51:34