1.题目
写一个函数将数组中的数逆序存放,例如int a[8]={1,2,3,4,5,6,7,8},逆序存放后为:a[8]={8,7,6,5,4,3,2,1}。
2.思路
这道题思路有很多
思路1:创建新数组存放
可以创建一个新的数组来保存逆序后的结果,具体的思路如下:
1. 在函数内部定义一个大小为 n 的新数组 b,用于保存逆序后的结果。
2. 使用两层循环遍历数组 a,将 a 中每个元素倒序放入数组 b 的对应位置中。
3. 遍历完整个数组后,将数组 b 中的结果返回给主函数。
思路2:在原来的数组上交换
也可以在原数组中进行操作,避免创建新的数组。具体的思路如下:
1. 使用一个循环遍历数组 a 的前一半元素,将其和数组 a 对应位置的后一半元素交换位置。
2. 遍历完整个数组后,原数组 a 中的元素已经逆序存放。
3.代码实现
思路1代码:
#include <stdio.h> int* reverse(int a[], int n) { static int b[100]; // 声明一个新的数组用于存放逆序后的结果 int i, j = 0; for (i = n - 1; i >= 0; i--) { // 遍历原数组,将元素倒序存入新数组 b[j++] = a[i]; } return b; // 返回逆序后的结果数组 } int main() { int a[8] = {1, 2, 3, 4, 5, 6, 7, 8}; int* b = reverse(a, 8); // 调用 reverse 函数获取逆序后的结果数组 printf("逆序后的数组:\n"); for (int i = 0; i < 8; i++) { printf("%d ", b[i]); // 输出逆序后的结果数组 } printf("\n"); return 0; }
思路2代码:
#include <stdio.h> void reverse(int a[], int n) { int temp; for (int i = 0; i < n / 2; i++) { // 遍历数组前一半元素,将其和后一半元素交换位置 temp = a[i]; a[i] = a[n - i - 1]; a[n - i - 1] = temp; } } int main() { int a[8] = {1, 2, 3, 4, 5, 6, 7, 8}; reverse(a, 8); // 调用 reverse 函数将数组元素逆序存放 printf("逆序后的数组:\n"); for (int i = 0; i < 8; i++) { printf("%d ", a[i]); // 输出逆序后的数组元素 } printf("\n"); return 0; }