int a[5 ][4 ]=2,5,-86,31 32,1,0,798 3,4,5,6 25,61,33,92 -51,21,37,96 这个数组中,一共有五行,怎样将任意两行交换,然后输出。输入格式为”%d%d”,输出数组元素的格式为”%5d”。
#include <stdio.h>
#define ROWS 5
#define COLS 4
void swap_rows(int arr[ROWS][COLS], int m, int n) {
int temp[COLS];
for (int i = 0; i < COLS; i++) {
temp[i] = arr[m][i];
arr[m][i] = arr[n][i];
arr[n][i] = temp[i];
}
}
int main() {
int arr[ROWS][COLS] = {2,5,-86,31},{32,1,0,798},{3,4,5,6},{25,61,33,92},{-51,21,37,96}};
printf("原始:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%2d ", arr[i][j]);
}
printf("\n");
}
printf("\n");
int m, n;
printf("输入m n");
scanf("%d %d", &m, &n);
swap_rows(arr, m - 1, n - 1);
printf("交换后:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%2d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
仅供参考!谢谢!
#include<stdio.h>
#define M 5
#define N 4
int main(void)
{
int a[M][N] = { 1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16,
17, 18, 19, 20
};
// b,c表示b行与c行对调
int b,c;
do
{
scanf("%d%d", &b, &c);
}
while ((b < 1 || b > M) || (c < 1 || c > M));
// 调换
if (c != b)
{
int tmp;
for (int i = b - 1, j = c - 1, k = 0; k < N; k++)
{
tmp = a[i][k];
a[i][k] = a[j][k];
a[j][k] = tmp;
}
}
// 输出调换后的数组
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
printf("%5d", a[i][j]);
}
puts("");
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:参考答案:
第一趟排序之后数组的状态:
{24,12,25,76,96,28,-1,101}
第二趟排序之后数组的状态:
{12,24,25,76,28,-1,96,101}