|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目如下:
1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请分别用数组写法和指针法完成上述功能。
函数原型分别为:void action1(int dArray[],int n)和void action2(int *pInt,int n)。
数组的那一种我已经解决了,不知道指针的怎么写,下面我写的运行不对,不知道哪里出了问题,请指教。
#include <stdio.h>
void action2(int *p,int n)
{
int max,min,i,pmin = 0,pmax = 0,t1,t2;
max = min = *(p);
for(i = 1; i < n; i++)
{
if(*(p+i)<min)
{
min = *(p+i);
pmin = i;
}
else if (*(p+i)>max)
{
max = *(p+i);
pmax = i;
}
}
t1 = *(p);
*(p) = *(p+min);
*(p+i) = t1;
t2 = *(p+n-1);
*(p+n-1) = *(p+max);
*(p+max) = t2;
}
int main()
{
int i,n,arr[10000];
int *p = arr;
printf("请输入即将输入的数目个数:");
scanf("%d",&n);
printf("请输入一组数:");
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
action2(arr,n);
for(i = 0;i < n;i++)
{
printf("%d ",arr[i]);
}
return 0 ;
}
本帖最后由 tailor_long 于 2017-12-7 20:32 编辑
楼主大人,你好,在下写了一个程序,完美运行无BUG
楼主大人可以一试
#include <stdio.h>
void maxInt(int *p, int max, int n, int *a){
//找出p数组中出现的最大的数以及他的下标
int temp = 0;
for(int i=0; i<n; i++)
{
if(max < *(p+i)){
max = *(p+i);
temp = i;
}
}
*a = max;
*(a+1) = temp;
//把P数组中最大的数传给a[0],下标传给a[1];
}
void minInt(int *p, int min, int n, int *b){
//找出p数组中出现的最小的数以及他的下标
int temp = 0;
for(int i=0; i<n; i++)
{
if(min > *(p+i)){
min = *(p+i);
temp = i;
}
}
*b = min;
*(b+1) = temp;
//把P数组中最小的数传给b[0],下标传给b[1];
}
void exchangeMax(int *a, int *p, int n){//将最大的数和p数组中最后一个数交换
int temp = *(p+n-1);
*(p+n-1) = *(p + a[1]);
*(p+a[1]) = temp;
}
void exchangeMin(int *a, int *p, int n){//将最小的数和p数组中第一个数交换
int temp = *(p);
*(p) = *(p + a[1]);
*(p+a[1]) = temp;
}
void action2(int *p,int n)
{
int max,min,i;
int pmin = 9999,pmax = -99999;
int a[2], b[2];
maxInt(p, pmax, n, a);
minInt(p, pmin, n, b);
//printf("the max of this array is p[%d] = %d and the min of this array is p[%d] = %d\n", a[1], a[0], b[1], b[0]);
//将最大的数和p数组中最后一个数交换
exchangeMax(a, p, n);
maxInt(p, pmax, n, a);
minInt(p, pmin, n, b);
if(a[1] == n-1 && b[1] == 0){//判断当前p数组是不是最大数放在最后,最小数放在最前面,如果是,那么程序结束
return ;
}
else{//如果不是,//将最小的数和p数组中第一个数交换
exchangeMin(b, p, n);
}
}
int main()
{
int i,n,arr[10000];
int *p = arr;
printf("input the length of array\n");
scanf("%d",&n);
printf("input the member of array: \n");
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
action2(arr,n);
for(i = 0;i < n;i++)
{
printf("%d ",arr[i]);
}
return 0 ;
}
|
|