第二次博客作业
目前在c++的学习上,存在的问题还有很多,尤其突出的问题就在数组这一方面。
例如:
数组在作为函数参数传递的时候,就退化为指针了,这个时候无论是sizeof(array)还是sizeof(*array)得到的都只能是这个指针指的一个元素所占的字节数目(4),而不能得到数组的长度!!
7-2 数组元素换位
在主函数中输入n个整数到数组中,调用函数(要求被调参数为⑴数组名 ⑵数组元素的个数)完成将数组中的最小值与第0个元素对调,将数组中的最大值与最后一个元素对调,主函数中输出调换后的数组。要求函数用指针变量作形参。
输入格式:
第一行是一个整数n,表示元素个数; 第二行是n个整数,表示数组的n个元素。
输出格式:
输出调换元素后的数组,以空格分隔。
输入样例:
在这里给出一组输入。例如:
5
2 4 1 6 3
输出样例:
在这里给出相应的输出。例如:
1 4 2 3 6
。
解题思路:先定义两个函数,把该数组的最大值和最小值找出来,然后通过指针作为形参,用*a=*(a+min); 和*(a+n-1)=*(a+max);这两个语句进行数组中的最小值与第0个元素对调和数组中的最大值与最后一个元素对调。
#include <iostream>
using namespace std;
void change(int *a,int n)
{
int min=0,i;
for(i=1;i<n;i++)
{
if(*(a+i)<*(a+min))
{
min=i;
}
}
int t;
t=*a;
*a=*(a+min);
*(a+min)=t;
int max=0,k;
for(i=1;i<n;i++)
{
if(*(a+i)>*(a+max))
{
max=i;
}
}
int l;
l=*(a+n-1);
*(a+n-1)=*(a+max);
*(a+max)=l;
}
int main()
{
int n;
cin >> n;
int a[n];
int i;
for(i=0;i<n;i++)
{
cin >> a[i];
}
change(a,n);
for(i=0;i<n;i++)
{
cout << a[i];
if(i<n-1)
{
cout << " ";
}
}
}