💥一、逆序函数是什么?
示例:输入1 4 7 9 3
输出:3 9 7 4 1
通俗来说就是将数组一行数据倒着打印。
✨二、逆序函数原码
🥳1.直接逆序
思路:
1.利用scanf与for循环获取多组数据;
2.用left与right两个变量进行左右交换,交换完左边向右靠近,右边向左边靠近,继续交换,直到 left>=right为止;
图示如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void reverse() { int i = 0; int j = 0; int tmp = 0; printf("请输入你要输入数的个数:"); scanf("%d", &j); int arr[] = { 0 };//注意这里数组没有确定个数 for (i = 0; i < j; i++) { scanf("%d", &arr[i]); } int left = 0; int right = j-1; while (left <= right)//利用左右下标逐渐向中间靠近 { tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } for(i = 0;i <=j-1;i++) { printf("%d\n",arr[i]); } } int main() { reverse(); return 0; }
由于上述代码利用数组存储个数时没有确定数组个数就会导致如下情况:
正确做法:
int arr[10] = {0}//允许输入十个数以内的逆序,也可换成100或者其他
修改后代码如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void reverse() { int i = 0; int j = 0; int tmp = 0; printf("请输入你要输入数的个数(<10):"); scanf("%d", &j); int arr[10] = { 0 }; for (i = 0; i < j; i++) { scanf("%d", &arr[i]); } int left = 0; int right = j-1; while (left <= right)//利用左右下标逐渐向中间靠近 { tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } for(i = 0;i <=j-1;i++) { printf("%d\n",arr[i]); } } int main() { reverse(); return 0; }
🥳🥳2.创建临时数组逆序
思路:
将数组的数从后往前放入到临时创建的数组中
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void reverse() { int i = 0; int j = 0; int tmp = 0; printf("请输入你要输入数的个数(<10):"); scanf("%d", &j); int arr[10] = { 0 }; for (i = 0; i < j; i++) { scanf("%d", &arr[i]); } //直接逆序 //tmp = arr[j];//先将最后一个数存储起来 //for (i = j; i > 0; i--) //{ // arr[j] = arr[j - 1];//循环逆转 //} //arr[0] = tmp;//将第一个储存最后一个数完成逆转 //创建临时数组实现逆序 int tem[10] = { 0 };//创建临时数组 for (i = 0; i < j; i++) { tem[i] = arr[j-i- 1];//将arr数组后面的数存储到tem数组前面 } for(i = 0;i <=j-1;i++)//打印逆序后的数组 { printf("%d\n",arr[i]); } } int main() { reverse(); return 0; }
🎉三、结言
以上就是C语言实现逆序数组完整实现啦~🌹🌹🌹土土这里用了两种方法一种是直接发利用左右两个指针来遍历,另一种是创建临时数组来将原来的数组中的数从后往前放置,两种方法各有优缺点哦~如果有什么问题,欢迎打在评论区或者私法给我哦~💖💖