首页 > 技术文章 > 《矩阵的一些基本操作》

sun- 2015-12-06 21:37 原文

  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 }

推荐阅读