按如下函数原型编程从键盘输入一个m行n列的二维数组,然后根据输入mode值将数组进行水平翻转,垂直翻转或转置操作。其中数组行列数m,n,操作方式mode的值由用户键盘输入。已知m和n的值都不超过10,mode=0时水平翻转数组,mode=1时垂直翻转数组,mode =2时转置数组。向二维数组输入数据,数组输出和操作数组的函数原型如
时间: 2023-06-17 22:05:11 浏览: 105
下:
```c
void inputArray(int array[][10], int m, int n);
void outputArray(int array[][10], int m, int n);
void flipArray(int array[][10], int m, int n, int mode);
```
其中,inputArray函数用于输入数组,outputArray函数用于输出数组,flipArray函数用于进行翻转或转置操作。
以下是完整代码实现:
```c
#include <stdio.h>
void inputArray(int array[][10], int m, int n);
void outputArray(int array[][10], int m, int n);
void flipArray(int array[][10], int m, int n, int mode);
int main() {
int m, n, mode;
int array[10][10];
printf("请输入数组的行数和列数(以空格分隔):");
scanf("%d %d", &m, &n);
printf("请输入数组的元素值:\n");
inputArray(array, m, n);
printf("请输入操作模式(0:水平翻转,1:垂直翻转,2:转置):");
scanf("%d", &mode);
printf("操作前的数组:\n");
outputArray(array, m, n);
flipArray(array, m, n, mode);
printf("操作后的数组:\n");
outputArray(array, m, n);
return 0;
}
void inputArray(int array[][10], int m, int n) {
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &array[i][j]);
}
}
}
void outputArray(int array[][10], int m, int n) {
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
}
void flipArray(int array[][10], int m, int n, int mode) {
int temp, i, j;
switch (mode) {
case 0: // 水平翻转
for (i = 0; i < m; i++) {
for (j = 0; j < n / 2; j++) {
temp = array[i][j];
array[i][j] = array[i][n - 1 - j];
array[i][n - 1 - j] = temp;
}
}
break;
case 1: // 垂直翻转
for (i = 0; i < m / 2; i++) {
for (j = 0; j < n; j++) {
temp = array[i][j];
array[i][j] = array[m - 1 - i][j];
array[m - 1 - i][j] = temp;
}
}
break;
case 2: // 转置
for (i = 0; i < m; i++) {
for (j = i + 1; j < n; j++) {
temp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = temp;
}
}
break;
default:
printf("未知的操作模式\n");
break;
}
}
```
阅读全文