//读下列程序。 //(1)将其改写为传递引用参数; //(2)说出其功能; //(3)将findmax()函数改写为非递归函数(重新考虑参数个数)。 const int size = 10; void findmax(int *a,int n,int i,int *pk); int main(){ int a[size]; int n=0; cout<<"please input "<<size<<" datas:\n"; for(int i=0;i<size;i++){ cin>>a[i]; } findmax(a,size,0,&n); cout<<"the maximum is "<<a[n]<<endl <<"its index is"<<n<<endl; } void findmax(int *a,int n,int i,int *pk){ if(i<n){ if(a[i]>a[*pk]) *pk=i; findmax(a,n,i+1,&(*pk)); } }
时间: 2023-06-18 09:08:27 浏览: 49
1. 将函数findmax()改为传递引用参数的形式:
```cpp
void findmax(int *a, int n, int &i, int &pk);
```
2. 程序的功能是在给定数组a中找到最大值及其下标。
3. 将findmax()函数改写为非递归函数:
```cpp
void findmax(int *a, int n, int &i, int &pk) {
pk = 0;
for (i = 1; i < n; i++) {
if (a[i] > a[pk]) {
pk = i;
}
}
}
```
新版函数使用循环遍历数组,找到最大值及其下标。
相关问题
用c++:读下列程序。 (1)将其改写为传递引用参数。 (2)说出其功能。 (3)将findmax()函数改写为非递归函数(重新考虑参数的个数)。 /* 请输入10个数据: 33 91 54 67 82 37 85 63 19 68 最大的数是:91 它的下标是:1 */
(1) 将其改写为传递引用参数:
```
#include<iostream>
using namespace std;
void findmax(int a[], int n, int &max, int &index)
{
max = a[0];
index = 0;
for (int i = 0; i < n; i++)
{
if (a[i] > max)
{
max = a[i];
index = i;
}
}
}
int main()
{
int a[10], max, index;
cout << "请输入10个数据:";
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
findmax(a, 10, max, index);
cout << "最大的数是:" << max << endl;
cout << "它的下标是:" << index << endl;
return 0;
}
```
(2) 这个程序的功能是输入10个数,然后找到这10个数中的最大值及其下标。
(3) 将findmax()函数改写为非递归函数:
```
#include<iostream>
using namespace std;
void findmax(int a[], int n, int &max, int &index)
{
max = a[0];
index = 0;
for (int i = 1; i < n; i++)
{
if (a[i] > max)
{
max = a[i];
index = i;
}
}
}
int main()
{
int a[10], max, index;
cout << "请输入10个数据:";
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
findmax(a, 10, max, index);
cout << "最大的数是:" << max << endl;
cout << "它的下标是:" << index << endl;
return 0;
}
```
这里将for循环的初值改为1,将max初始化为a[0],然后遍历数组,如果发现当前元素大于max,则更新max和它的下标index。
(1)将其改写为传递引用参数。 (2)说出其功能。 将findmax()函数改写为非递归函数(重新考虑参数的个数)
(1)函数改写为传递引用参数后的样子:
```
void findmax(const int arr[], const int size, int& max_index, int& max_value) {
max_index = 0;
max_value = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > max_value) {
max_index = i;
max_value = arr[i];
}
}
}
```
(2)该函数的功能是在给定的整数数组中找到最大值以及其对应的下标。
将findmax()函数改写为非递归函数:
```
void findmax(const int arr[], const int size, int& max_index, int& max_value) {
max_index = 0;
max_value = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > max_value) {
max_index = i;
max_value = arr[i];
}
}
}
```
这是findmax()函数的非递归版本。由于该函数的功能可以通过一次循环完成,因此不需要使用递归。