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 }
![]()