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(" ======================================= "); 26 printf(" 1,矩阵相加 3,矩阵相乘 "); 27 printf(" 3,矩阵转置 4,冒泡排序 "); 28 printf(" 5,求二维数组中最大值的行号和列号 "); 29 printf(" 0,退出系统 "); 30 printf(" ======================================= "); 31 while(1) 32 { 33 printf("请输入你的选择:"); 34 scanf("%d",&n); 35 switch(n) 36 { 37 case 1:printf("矩阵相加 ");JuZhenXiangJia();break; 38 case 2:printf("矩阵相乘 ");JuZhenXiangCheng();break; 39 case 3:printf("矩阵转置 ");JuZhenZhuanZhi();break; 40 case 4:printf("冒泡法排序 ");MaoPaoPaiXu();break; 41 case 5:printf("打雷台算法求二维数组中最大值的行号和列号 ");Max();break; 42 case 0:TuiChu();break; 43 default:printf("输入的选项不存在!请重新输入 "); 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为两行三列矩阵): "); 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(" 矩阵A如下所示: "); 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(" "); 68 } 69 printf(" 请输入矩阵B的元素(矩阵A为两行三列矩阵): "); 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(" 矩阵B如下: "); 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(" "); 85 } 86 printf(" "); 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(" 矩阵C如下: "); 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(" "); 103 } 104 printf(" "); 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为两行三列矩阵): "); 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(" 矩阵A如下所示: "); 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(" "); 127 } 128 printf(" 请输入矩阵B的元素(矩阵A为三行四列矩阵): "); 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(" 矩阵B如下: "); 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(" "); 144 } 145 printf(" "); 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(" 矩阵C如下: "); 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(" "); 166 } 167 printf(" "); 168 } 169 170 void JuZhenZhuanZhi() 171 {//矩阵的转置 172 int i,j; 173 int A[M][N],B[N][M]; 174 printf("请输入矩阵A的元素(矩阵A为两行三列矩阵): "); 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(" 矩阵A如下所示: "); 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(" "); 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为: "); 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(" "); 207 } 208 } 209 210 void MaoPaoPaiXu() 211 {//冒泡法排序 212 int i,j,t; 213 int a[10]; 214 printf("请输入10个整数: "); 215 for(i=0;i<10;i++) 216 { 217 scanf("%d",&a[i]); 218 } 219 printf(" "); 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("排序后的数组为: "); 233 for(i=0;i<10;i++) 234 { 235 printf("%3d",a[i]); 236 } 237 printf(" "); 238 } 239 240 void Max() 241 {//打雷台算法求二维数组中最大值的行和列 242 int i,j,row=0,colum=0,max; 243 int a[N][P]; 244 printf("请输入二维数组的元素(二维数组是三行四列): "); 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(" 二维数组如下: "); 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(" "); 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 row=%d colum=%d ",max,row,colum); 275 } 276 277 void TuiChu() 278 {//退出系统函数 279 exit(0); 280 }