永发信息网

C 语言的问题11

答案:2  悬赏:20  手机版
解决时间 2021-07-17 20:26

#include<stdio.h>
#define N 100
void px(int *p,int n)
{ int max=*p,ma=0,min=*(p+1),mi=1,i,j;
for(i=0;i<n;i++)
{ if(*(p+i)>max) max=*(p+(ma=i));
if(*(p+i)<min) min=*(p+(mi=i));

}
j=*(p+0);*p=*(p+mi);*(p+mi)=j;
j=*(p+ma);*(p+ma)=*(p+n-1);*(p+n-1)=j;
}
void out(int *p,int n)
{ int i=0;while(p+i<p+n) printf("%d ",*(p+i++));printf("\n");
}
void input(int *p,int n)
{int i=0;
for(i=0;i<n;i++)
scanf("%d",p+i);
}
void main()
{ int a[N],*p=a,i,n;
printf("input n:\n");
scanf("%d",&n);
printf("input a[]:\n");input(p,n);
px(p,n);out(p,n);
}

该程序是将一个数组中最大值换到最后一个,最小值换到第一个,错在哪里,为什么输入 3 2 1 0 错

最佳答案

看到函数px()中的这两行:


j=*(p+0);*p=*(p+mi);*(p+mi)=j;
j=*(p+ma);*(p+ma)=*(p+n-1);*(p+n-1)=j;


按照你预想,第一行是将最小值换到最前,第二行是将最大值换到最后,但这里有问题,因为第一次的交换导致了最大值的位置改变了,这样在第二次交换时就错了


我给你改了函数px()的代码:


void px(int *p,int n)
{ int min=*p,mi=0,i,j;
for(i=0;i<n;i++)
{
if(*(p+i)<min) min=*(p+(mi=i));
}
j=*(p+0);*p=*(p+mi);*(p+mi)=j;
int max=*p,ma=0;
for(i=0;i<n;i++)
{
if(*(p+i)>max) max=*(p+(ma=i));
}
j=*(p+ma);*(p+ma)=*(p+n-1);*(p+n-1)=j;
}


全部回答
你需要改错 还是想程序调试通就行了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
解构艾弗森出来没有啊?哪里能看
我们这个时代选择服装设计是不是个好的出路?
孕妇要怎么办才能增加抵抗力
求弹头奇兵无敌挂+绝地挂发邮箱即可?
"但我们却无法欣赏"用英语怎么说
关于那块玉的价格
点别人QQ相册图标看相片,别人能发现吗?
鞋为什么调了呢?
班级怎样才好了起来
要怎样才能转换MP4
隋唐来客 z谁能给我个 观看或者下载这个电影
梦中梦到已过世的亲人,为什么会不理我
手机家园卖GB的问题
VS 里道具商城的中文ID道具
青岛到临沭的汽车发车时间,票价。在什么汽车
推荐资讯
网银没法充值
DNF我28了怎么还没有紫武器任务
她喜欢我,我喜欢她,为什么她却不愿意做我女
男友的前女朋友时不时和我男友联系,我要怎么
我国水的储藏量是多少?
一生有多少爱?
为什么我的电脑一开机QQ登录框会自动跳出来
QQ拼音的奖品怎么领不到呢 什么时段好领啊
[急]校运动会一班入场口号,要响亮要新颖.老
我DNF为什么进不去阿
伤了一个很重要的朋友怎么办?
学习数学 英语 语文 的过程中要注意或做到那
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?