指针的问题,高手请帮忙

Xiaoloveliuforever 2008-12-08 08:20:06
有一个小题目,要求输入10个整数,将最小的跟第一个交换,最大的跟最后一个交换,去他的顺序不变,并输出。下面是我做的,有问题,不知道怎么改。

#include<iostream>
using namespace std;

void input(int*p)
{
cout<<"please input 10 numbers(int):"<<endl;
for(int i=0;i<10;i++)
cin>>*(p+i);
cout<<endl;
}

void range(int*p)
{
int min,max,temp1,temp2;
min=*p;
max=*p;
for(int i=1;i<10;i++)
{
if(*(p+i)<min) min=*(p+i);

if(*(p+i)>max) max=*(p+i);

}
temp1=min;min=*p;*p=temp1;
temp2=max;max=*(p+9);*(p+9)=temp2;

}

void output(int*p)
{
for(int i=0;i<10;i++)
cout<<*(p+i)<<" ";
cout<<endl;
}

int main()
{
int a[10];
int *p=&a[0];

void input(int*);
void range(int*);
void output(int*);

input(p);
range(p);
output(p);

return 0;
}
高手们都来帮帮忙吧
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xiaoloveliuforever 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nullah 的回复:]
C/C++ code
#include <iostream>
using namespace std;

void input(int*p)
{
cout <<"please input 10 numbers(int):" <<endl;
for(int i=0;i <10;i++)
cin >> *(p+i);
cout << endl;
}

void range(int*p)
{
int min,max,temp1,temp2,ii = 0,jj = 0;
min=*p;
max=*p;
for(int i=1;i <10;i++)
{
if(*(p+i) < min)
{

[/Quote]
你的程序跟我改后几乎一样,呵呵~~谢谢你
不过你发帖的时候我已经结帖了,不能给你分了,不好意思
nullah 2008-12-08
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

void input(int*p)
{
cout <<"please input 10 numbers(int):" <<endl;
for(int i=0;i <10;i++)
cin >> *(p+i);
cout << endl;
}

void range(int*p)
{
int min,max,temp1,temp2,ii = 0,jj = 0;
min=*p;
max=*p;
for(int i=1;i <10;i++)
{
if(*(p+i) < min)
{
min = *(p+i);
ii = i;
}
//我比较简单的改了下 用ii jj分别记录最大值和最小值的位置

if(*(p+i)> max)
{
max = *(p+i);
jj = i;
}

}
temp1 = *(p+ii);//要搞清楚你要交换的是哪两个数
*(p+ii)= *p;
*p = temp1;

temp2 = *(p+jj);
*(p+jj) = *(p+9);
*(p+9) = temp2;

}

void output(int*p)
{
for(int i=0;i <10;i++)
cout <<*(p+i) <<" ";
cout <<endl;
}

int main()
{
int a[10];
int *p = &a[0];

void input(int*);
void range(int*);
void output(int*);

input(p);
range(p);
output(p);

return 0;
}


  • 打赏
  • 举报
回复
void range(int*p)
{
int min,max,temp1,temp2;
min=*p;
max=*p;
for(int i=1;i <10;i++) //最好记住最大值和最小值的位置
{
if(*(p+i) <min) min=*(p+i);

if(*(p+i)>max) max=*(p+i);

}
temp1=min;min=*p;*p=temp1; //仅交换了最小值的临时存储点和第一个位置的数据,并没有换最小值所在点的数据
temp2=max;max=*(p+9);*(p+9)=temp2; //同理

}
//下面的我改的
void range(int*p)
{
int *min,*max,temp1,temp2;
min=p;
max=p;
for(int i=1;i <10;i++)
{
if(*(p+i) < *min) min=(p+i);

if(*(p+i)>*max) max=(p+i);

}
temp1=*min;*min=*p;*p=temp1;
temp2=*max;*max=*(p+9);*(p+9)=temp2;

}

Xiaoloveliuforever 2008-12-08
  • 打赏
  • 举报
回复
谢谢~~~~~~
奔跑哥 2008-12-08
  • 打赏
  • 举报
回复
这是个明显的错误啊,min,max是临时变量,并不能写入到数组中。你应该在查找min,max的过程中保存他们所在的下标,然后利用这个下标在数组中修改。
Claude 2008-12-08
  • 打赏
  • 举报
回复
up

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧