02-4 练习 数组元素逆置
描述:声明一个 5 个元素的数组,并且将元素逆置。(eg 原数组 12345,倒置后为 54321)
#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int end = sizeof(arr) / sizeof(arr[0]) - 1;
int temp = 0;
for (int i = 0;i < (end + 1)/2 ;i++)
{
temp = arr[i];
arr[i] = arr[end - i];
arr[end - i] = temp;
}
for (int i = 0;i < end + 1;i++)
{
cout << arr[i] <<" ";
}
system("pause");
return 0;
}
这个和 b 站上的好像有点不同。教程上是使用 while 检测 start 和 end 的值的大小。我把 b 站上的抄下来。
#include <iostream>
using namespace std;
int main()
{
int arr[5] = { 1,2,3,4,5 };
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0]) - 1;//结束下标
while (start < end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start = start + 1;
end = end - 1;
}
for (int i = 0;i < 5;i++)
{
cout << arr[i] <<" ";
}
system("pause");
return 0;
}
可能是喜欢 for 所以一开始就想到使用 for 了。while (start < end)
的用途其实就是i < (end + 1)/2
。
sizeof(arr) / sizeof(arr[0]) - 1
用来计算数组 arr
的最后一个元素的下标。它通过计算数组的总大小除以一个元素的大小,然后减一,得到数组的长度减一,也就是最后一个元素的下标。
然后,使用一个循环来反转数组。这个循环是:对于数组中的每一个元素,将其与数组尾部的对应元素进行交换。
以上两个的输出结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
5 4 3 2 1 请按任意键继续. . .
逃了.......
想一下为什么会需要i < (end + 1)/2
或者说是(start < end)
。如果让他一直跑下去,已经交换的会被再次交换,则会出现又被交换回去了的情况。
我们试着把for (int i = 0;i < (end + 1)/2 ;i++)
改为for (int i = 0;i < (end + 1) ;i++)
运行一下:结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
1 2 3 4 5 请按任意键继续. .
:-)