输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换.
写3个函数:①输人 10个数;②进行处理,③输出10个数。 (用指针方法处理):
题解明天写,先救一下作业。
纯C版本
#include <stdio.h>
int a[10];
viod intput(int* a)
{ int i
for(i=0;i<10;i++)
{
scanf("%d", &a[i]);
}
}
void exchange(int* a)
{
//sort(a,a+10);这段记得删一下
//解释一下,在下面代码中p++不是自己的值加一,而是指向的a[n]的n+1。
int* max, * min, * p, temp;
max = min = a;//max与min都指向数组a的第一个数,即a[0]。
for (p = a + 1; p < a + 10; p++)
if (*p < *min)min = p;//p指向的数小于min指向的数,就使min指向p指向的数。
temp = a[0]; a[0] = *min; *min = temp;//将最小数与第一个数交换。
for (p = a + 1; p < a + 10; p++)
if (*p > *max)max = p;//p指向的数大于max指向的数,就使max指向p指向的数。
temp = a[9]; a[9] = *max; *max = temp;
}
viod output(int* a)
{
int* p;
for (p = a; p < a + 10; p++)
printf("%d ", *p);
}
int main(int argc, char const *argv[])
{
intput(a);
exchange(a);
output(a);
return 0;
}
c++
#include <bits/stdc++.h>
using namespace std;
int a[10];
bool intput(int* a)
{
for(int i=0;i<10;i++)
{
cin >> a[i];
}
}
bool exchange(int* a)
{
//sort(a,a+10);
int* max, * min, * p, temp;
max = min = a;
for (p = a + 1; p < a + 10; p++)
if (*p < *min)min = p;
temp = a[0]; a[0] = *min; *min = temp;
for (p = a + 1; p < a + 10; p++)
if (*p > *max)max = p;
temp = a[9]; a[9] = *max; *max = temp;
}
bool output(int* a)
{
int* p;
for (p = a; p < a + 10; p++)
printf("%d ", *p);
}
int main(int argc, char const *argv[])
{
intput(a);
exchange(a);
output(a);
return 0;
}
原理自己看书,无脑理解就是当*P指向一个数组时(数组本身也是一种指针)P=a和P=a+1;指的是P指向数组a的第一位a[0];P++是让P指向数组a的下一个元素,即a[1];再加下去就是指向a[2]......a[n]