#include
void change(int* p1, int* p2);
int max(int *a), min(int *a);
int a[10];
int main()
{
int i,m,n;
printf("请输入十个整数(整数之间用逗号隔开):");
for (i = 0;i < 10;i++)
{
scanf_s("%d,", &a[i]);
}
int* p1 = a;
n = min(p1);
int* p2 = a;
m = max(p2);
int* t1 = &(a[m]), * t2 = &(a[n]);
change(t1, &a[9]);
change(t2, &a[0]);
for (i = 0;i < 10;i++)
{
printf("%d", a[i]);
}
return 0;
}
int max(int* a)
{
int max_num;
int count_num;
for (int i = 0;i < 10;i++)
{
if (i == 0)
{
max_num = a[0];
count_num = 0;
}
else
{
if (max_num < a[i])
{
max_num = a[i];
count_num = i;
}
}
}
return count_num;
}
int min(int* a)
{
int min_num;
int count_num;
for (int i = 0;i < 10;i++)
{
if (i == 0)
{
min_num = a[0];
count_num = 0;
}
else
{
if (min_num > a[i])
{
min_num = a[i];
count_num = i;
}
}
}
return count_num;
}
void change(int* p1, int* p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
return;
}
输入十个整数,输出结果要求把最大的数和最后一个数交换,最小的数和第一个数交换,其余整数顺序位置不变(要求用指针完成)
那个a可以代表数组的地址,不是所说的只定义了首元素,
你的错误在不应该是两个值互换,应该是把最小值放前面其余的数都要往后移,最大值放最后其余的往前移
修改如下,改动处见注释,供参考:
#include<stdio.h>
#define N 10 //修改
void change(int* p1, int* p2);
int max(int* a), min(int* a);
int main()
{
int i, m, n, a[N]; //修改
printf("请输入十个整数(整数之间用空格隔开):");
for (i = 0; i < N; i++) //修改
{
scanf_s("%d", &a[i]); //数字间以空格隔开
//scanf_s("%d,", &a[i]); 修改
}
int* p1 = a;
n = min(p1);
int* p2 = a;
m = max(p2);
if (m == 0) m = n; //修改,如果最大值在第一位
int* t1 = &(a[m]), * t2 = &(a[n]);
change(t2, &a[0]); //修改,先移动最小值到第一位
change(t1, &a[9]); //再移动最大的到最末位
for (i = 0; i < N; i++) //修改
{
printf("%d ", a[i]);//修改
}
return 0;
}
int max(int* a)
{
int max_num;
int count_num;
for (int i = 0; i < N; i++) //修改
{
if (i == 0)
{
max_num = a[0];
count_num = 0;
}
else
{
if (max_num < a[i])
{
max_num = a[i];
count_num = i;
}
}
}
return count_num;
}
int min(int* a)
{
int min_num;
int count_num;
for (int i = 0; i < N; i++) //修改
{
if (i == 0)
{
min_num = a[0];
count_num = 0;
}
else
{
if (min_num > a[i])
{
min_num = a[i];
count_num = i;
}
}
}
return count_num;
}
void change(int* p1, int* p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
return;
}