1 //矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置以及冒泡排序 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define M 2 5 #define N 3 6 #define P 4 7 int main() 8 {//主函数 9 void XuanZhe(); 10 XuanZhe(); 11 system("pause"); 12 return 0; 13 } 14 15 void XuanZhe() 16 {//选择函数 17 int n; 18 //函数声明 19 void JuZhenXiangJia(); 20 void JuZhenXiangCheng(); 21 void JuZhenZhuanZhi(); 22 void MaoPaoPaiXu(); 23 void Max(); 24 void TuiChu(); 25 printf("\t=======================================\n"); 26 printf("\t\t1,矩阵相加\t3,矩阵相乘\n"); 27 printf("\t\t3,矩阵转置\t4,冒泡排序\n"); 28 printf("\t\t5,求二维数组中最大值的行号和列号\n"); 29 printf("\t\t0,退出系统\n"); 30 printf("\t=======================================\n"); 31 while(1) 32 { 33 printf("请输入你的选择:"); 34 scanf("%d",&n); 35 switch(n) 36 { 37 case 1:printf("矩阵相加\n");JuZhenXiangJia();break; 38 case 2:printf("矩阵相乘\n");JuZhenXiangCheng();break; 39 case 3:printf("矩阵转置\n");JuZhenZhuanZhi();break; 40 case 4:printf("冒泡法排序\n");MaoPaoPaiXu();break; 41 case 5:printf("打雷台算法求二维数组中最大值的行号和列号\n");Max();break; 42 case 0:TuiChu();break; 43 default:printf("输入的选项不存在!请重新输入\n"); 44 } 45 } 46 } 47 48 void JuZhenXiangJia() 49 {//两个二维数组相加 50 int i,j; 51 int A[M][N],B[M][N],C[M][N]; 52 printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n"); 53 for(i=0;i<M;i++) 54 { 55 for(j=0;j<N;j++) 56 { 57 scanf("%d",&A[i][j]); 58 } 59 } 60 printf("\n矩阵A如下所示:\n"); 61 for(i=0;i<M;i++) 62 { 63 for(j=0;j<N;j++) 64 { 65 printf("%3d",A[i][j]); 66 } 67 printf("\n"); 68 } 69 printf("\n请输入矩阵B的元素(矩阵A为两行三列矩阵):\n"); 70 for(i=0;i<M;i++) 71 { 72 for(j=0;j<N;j++) 73 { 74 scanf("%d",&B[i][j]); 75 } 76 } 77 printf("\n矩阵B如下:\n"); 78 for(i=0;i<M;i++) 79 { 80 for(j=0;j<N;j++) 81 { 82 printf("%3d",B[i][j]); 83 } 84 printf("\n"); 85 } 86 printf("\n"); 87 //矩阵A和矩阵B的和放在矩阵C中 88 for(i=0;i<M;i++) 89 { 90 for(j=0;j<N;j++) 91 { 92 C[i][j] = A[i][j]+B[i][j]; 93 } 94 } 95 printf("\n矩阵C如下:\n"); 96 for(i=0;i<M;i++) 97 { 98 for(j=0;j<N;j++) 99 { 100 printf("%3d",C[i][j]); 101 } 102 printf("\n"); 103 } 104 printf("\n"); 105 } 106 107 void JuZhenXiangCheng() 108 {//两个二维数组相乘 109 int i,j,k; 110 int A[M][N],B[N][P],C[M][P]; 111 printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n"); 112 for(i=0;i<M;i++) 113 { 114 for(j=0;j<N;j++) 115 { 116 scanf("%d",&A[i][j]); 117 } 118 } 119 printf("\n矩阵A如下所示:\n"); 120 for(i=0;i<M;i++) 121 { 122 for(j=0;j<N;j++) 123 { 124 printf("%3d",A[i][j]); 125 } 126 printf("\n"); 127 } 128 printf("\n请输入矩阵B的元素(矩阵A为三行四列矩阵):\n"); 129 for(i=0;i<N;i++) 130 { 131 for(j=0;j<P;j++) 132 { 133 scanf("%d",&B[i][j]); 134 } 135 } 136 printf("\n矩阵B如下:\n"); 137 for(i=0;i<N;i++) 138 { 139 for(j=0;j<P;j++) 140 { 141 printf("%3d",B[i][j]); 142 } 143 printf("\n"); 144 } 145 printf("\n"); 146 //矩阵A和矩阵B相乘,积放在矩阵C中 147 for(i=0;i<M;i++) 148 { 149 for(j=0;j<P;j++) 150 { 151 C[i][j] = 0; 152 for(k=0;k<N;k++) 153 { 154 C[i][j] = C[i][j]+A[i][k]*B[k][j]; 155 } 156 } 157 } 158 printf("\n矩阵C如下:\n"); 159 for(i=0;i<M;i++) 160 { 161 for(j=0;j<P;j++) 162 { 163 printf("%5d",C[i][j]); 164 } 165 printf("\n"); 166 } 167 printf("\n"); 168 } 169 170 void JuZhenZhuanZhi() 171 {//矩阵的转置 172 int i,j; 173 int A[M][N],B[N][M]; 174 printf("请输入矩阵A的元素(矩阵A为两行三列矩阵):\n"); 175 for(i=0;i<M;i++) 176 { 177 for(j=0;j<N;j++) 178 { 179 scanf("%d",&A[i][j]); 180 } 181 } 182 printf("\n矩阵A如下所示:\n"); 183 for(i=0;i<M;i++) 184 { 185 for(j=0;j<N;j++) 186 { 187 printf("%3d",A[i][j]); 188 } 189 printf("\n"); 190 } 191 //矩阵转置为矩阵B 192 for(i=0;i<M;i++) 193 { 194 for(j=0;j<N;j++) 195 { 196 B[j][i] = A[i][j]; 197 } 198 } 199 printf("转置后得到的矩阵B为:\n"); 200 for(i=0;i<N;i++) 201 { 202 for(j=0;j<M;j++) 203 { 204 printf("%3d",B[i][j]); 205 } 206 printf("\n"); 207 } 208 } 209 210 void MaoPaoPaiXu() 211 {//冒泡法排序 212 int i,j,t; 213 int a[10]; 214 printf("请输入10个整数:\n"); 215 for(i=0;i<10;i++) 216 { 217 scanf("%d",&a[i]); 218 } 219 printf("\n"); 220 for(j=0;j<9;j++) //进行9次循环,实行9趟比较 221 { 222 for(i=0;i<9-j;i++) //在每一趟中比较9-j次 223 { 224 if(a[i]>a[i+1]) 225 { 226 t = a[i]; 227 a[i] = a[i+1]; 228 a[i+1] = t; 229 } 230 } 231 } 232 printf("排序后的数组为:\n"); 233 for(i=0;i<10;i++) 234 { 235 printf("%3d",a[i]); 236 } 237 printf("\n"); 238 } 239 240 void Max() 241 {//打雷台算法求二维数组中最大值的行和列 242 int i,j,row=0,colum=0,max; 243 int a[N][P]; 244 printf("请输入二维数组的元素(二维数组是三行四列):\n"); 245 for(i=0;i<N;i++) 246 { 247 for(j=0;j<P;j++) 248 { 249 scanf("%d",&a[i][j]); 250 } 251 } 252 printf("\n二维数组如下:\n"); 253 for(i=0;i<N;i++) 254 { 255 for(j=0;j<P;j++) 256 { 257 printf("%3d",a[i][j]); 258 } 259 printf("\n"); 260 } 261 max = a[0][0]; 262 for(i=0;i<N;i++) 263 { 264 for(j=0;j<P;j++) 265 { 266 if(a[i][j]>max) 267 { 268 max = a[i][j]; 269 row = i; 270 colum = j; 271 } 272 } 273 } 274 printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum); 275 } 276 277 void TuiChu() 278 {//退出系统函数 279 exit(0); 280 }