一个题目:
Fill_array()函数将一个double数组和长度作为参数,将输入的函数存储在数组中。当用户将数组填满或输入非数字时,输入停止,并返回输入了多少个数字。
Show_array()输出一个数组。
Reverse_array()将一个double数组和长度作为参数,将存储的值进行反转(要求反转其他元素,但保留第一项和最后一项)。
要求输出,数组的录入,展示数组,反转数组,展示反转后的数组。
最后一个Reverse()函数要求过于简单,今天使用指针的方式进行实现。
这是一个利用指针反转元素的函数体(所有的元素进行反转)
void Reverse_array(double* arrbegin, double * arrend)
{
double temp;
while (arrbegin < arrend)
{
temp = *arrbegin;
*arrbegin = *arrend;
*arrend = temp;
arrbegin++;
arrend--;
}
}
逻辑十分简单,arrbegin指向数组的第一项元素,arrend指向元素的最后一个元素。当arrbegin < arrend时,将两项元素进行交换。
下来是arrbegin与arrend的定义
// 数组名相当于第一项元素的地址
double* arrbegin = array;
// 第一项的地址(下标为0) + 数组的大小 - 1 (数组的大小 - 1 为数组的最后一项元素)
double* arrend = arrbegin + size - 1;
那么如果要保留第一项和最后一项呢?
下来是arrbegin与arrend的定义
// 将第二项元素的地址传给arrbegin
double* arrbegin = &array[1];
// 第二项的地址(下标为1) + 数组的大小 - 3(arrend 指向数组的最后一项元素)
// 假设一共有5个元素,画图可以得到表达式
double* arrend = arrbegin + size - 3;
题目的实现:
#include
using namespace std;
int Fill_array(double[], int);
void Show_array(double[], int);
void Reverse_array(double*, double*);
int main()
{
int size;
double array[5];
size = Fill_array(array, 5);
Show_array(array, size);
double* arrbegin = &array[1];
double* arrend = arrbegin + size - 3;
Reverse_array(arrbegin, arrend, size);
Show_array(array, size);
system("pause");
return 0;
}
//Fill_array()函数的定义
int Fill_array(double arr[], int n)
{
int counter = 0;
for (int i = 0; i < n; i++)
{
cout << "please enter a number #" << i + 1 << endl;
cin >> arr[i];
if (!cin) //用户输入非数字则退出
{
cin.clear();
while (cin.get() != '\n')
{
continue;
}
break;
}
counter++;
}
return counter;
}
//Show_array()函数的定义
void Show_array(double arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << ' ';
}
cout << endl;
}
//Reverse_array()函数的定义
void Reverse_array(double* arrbegin, double * arrend)
{
double temp;
while (arrbegin < arrend)
{
temp = *arrbegin;
*arrbegin = *arrend;
*arrend = temp;
arrbegin++;
arrend--;
}
}