C语言_inverse逆序_二维数组

时间:2020年9月14日 11:39:56

以 二维数组 角度

// 写一个 inverse 函数,此函数的功能是: 将一个 3*4 的二维数组中的值按逆序重新存放。
// 用二维数组的角度

#define M 3  // M 行数,N列数
#define N 4
#include 

void inverse(int a[][N], int b[][N])
{
	int i, j;
	for (i = 0; i < M; i++)
		for (j = 0; j < N; j++)
			b[M - i - 1][N - j - 1] = a[i][j];
}

int main()
{
	int a[M][N], b[M][N];
	int i, j;
	printf("请输入 %d*%d 的二维数组:\n", M,N);

	for (i = 0; i < M; i++)
		for (j = 0; j < N; j++)
			scanf_s("%d", &a[i][j]);
	inverse(a, b);
	printf("逆序存放后的结果为:\n");

	for (i = 0; i < M; i++)
	{
		for (j = 0; j < N; j++)
			printf("%d\t", b[i][j]);
		printf("\n");
	}
		
	return 0;
}

运行结果:
C语言_inverse逆序_二维数组_第1张图片
-------------------------------//-----------------------------------

以 一维数组 角度

C语言_inverse逆序_二维数组_第2张图片

// 以 一维数组 的方式看待 a 数组 ( p < q )
// p 从上往下移动, q 从下往上移动, p 和 q 指针所指向的内容交换

#define _CRT_SECURE_NO_WARNINGS
#define M 3
#define N 4
//const int M = 3, N = 4;  // M 行数,N 列数,C++语言中定义常量的用法
#include 

void swap(int* p1, int* p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}
// 以 int * a 这样的方式传参,使得在子程序中以 一维的方式看待数组
// 也就是说,把数组看成了 一个具有 M * N 个元素的,每个元素都是 int 的数组

void inverse(int* a, int n)
{
	int* p, * q;
	for (p = a, q = a + n - 1; p <= q; p++, q--)
		swap(p, q);
}

int main()
{
	int a[M][N];
	int i, j;
	printf("请输入 3*4 的二维数组:\n");
	for (i = 0; i < M; i++)
		for (j = 0; j < N; j++)
			scanf("%d", &a[i][j]);
	inverse(&a[0][0], M * N);
	printf("逆序存放后的结果为:\n");
	for (i = 0; i < M; i++)
	{
		for (j = 0; j < N; j++)
			printf("%d\t", a[i][j]);
		printf("\n");
	}
	return 0;
}

运行结果同方法一。

你可能感兴趣的:(C语言练习,c语言)