| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 771 人关注过本帖
标题:指针的一道小题,我快疯了!怎么弄不明白?!
只看楼主 加入收藏
zwlcdh
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-2-8
收藏
 问题点数:0 回复次数:10 
指针的一道小题,我快疯了!怎么弄不明白?!
输入10个整数,将其中最小的与第一个数对换,把最大的数与最后一个数对换。写3个函数:1。输入10个数2。进行处理3。输出10个数
#include<stdio.h>
void ru(int *p,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",*(p+i));
}
void chuli(int *pt,int n)
{int i,p=0,k,temp;
for(i=0;i<n;i++)
if(*(pt+i)>p){p=*(pt+i);k=i;}
temp=*pt;*pt=*(pt+k);*(pt+k)=temp;
for(i=n-1;i>=0;i--)
{temp=*(pt+n);*(pt+n)=*(pt+i);*(pt+i)=temp;}
}
void chu(int *p,int n)
{int i;
for(i=0;i<n;i++)
printf("%d ",*(p+i));
printf("\n");
}
void main()
{int a[10];
ru(a,10);
chuli(a,10);
chu(a,10);
}
搜索更多相关主题的帖子: 指针 
2007-03-07 18:38
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
感觉这里有问题
for(i=n-1;i>=0;i--)
{temp=*(pt+n);*(pt+n)=*(pt+i);*(pt+i)=temp;}
}
=*(pt+n);这里超出范围。

谁有强殖装甲第二部,可以Q我460054868
2007-03-07 18:45
zwlcdh
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-2-8
收藏
得分:0 
我又改了一下可还是不对!!!
#include<stdio.h>
void ru(int *p,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",*(p+i));
}
void chuli(int *pt,int n)
{int i,p=0,k,temp;
for(i=0;i<n;i++)
if(*(pt+i)>p){p=*(pt+i);k=i;}
temp=*pt;*pt=*(pt+k);*(pt+k)=temp;
temp=*(pt+n-1);
for(i=n-1;i>=0;i--)
{if(*(pt+i)<temp) temp=*(pt+i);k=i;}
temp=*(pt+n-1);*(pt+n-1)=*(pt+k);*(pt+k)=temp;
}
void chu(int *p,int n)
{int i;
for(i=0;i<n;i++)
printf("%d ",*(p+i));
printf("\n");
}
void main()
{int a[10];
ru(a,10);
chuli(a,10);
chu(a,10);
}
2007-03-07 18:57
se7en_enter
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-11
收藏
得分:0 
#include<stdio.h>
void ru(int *p,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",*(p+i));
}
void chuli(int *pt,int n)
{
int i,p=0,k,temp;

for(i=0;i<n;i++)

 if(*(pt+i)>p)
 {p=*(pt+i);k=i;}

/*找出最大的数,始终存在P中,用K来标记地址*/

temp=*(pt+n-1);*(pt+n-1)=*(pt+k);*(pt+k)=*temp;

/*这里好象没有找出最小的数吧!应该象上面一样,写一个找出最小的数的语句,始终存放在P中,用K来标记地址,在进行交换*/

p=*pt;/*用P来代表数组的第一个数*/

for(i=0;i<n;i++)
{
if(*(pt+i)<p)
{p=*(pt+i);k=i;}


temp=*pt;*pt=*(pt+k);*(pt+k)=temp;




void chu(int *p,int n)
{int i;
for(i=0;i<n;i++)
printf("%d ",*(p+i));
printf("\n");
getch();/*屏幕停下,观看程序运行结果*/
}
void main()
{int a[10];
ru(a,10);
chuli(a,10);
chu(a,10);
}
不知道对不对

年轻有年轻的冲动,成熟有成熟的魅力。莫让时间冲淡一切,要让一切充实时间
2007-03-07 19:16
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
改为这样:
#include<stdio.h>
void ru(int *p,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",&(*(p+i)));因为*(p+i)相当于p[i]
}

谁有强殖装甲第二部,可以Q我460054868
2007-03-07 19:17
se7en_enter
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-11
收藏
得分:0 
没看见他的输入函数还存在问题

年轻有年轻的冲动,成熟有成熟的魅力。莫让时间冲淡一切,要让一切充实时间
2007-03-07 19:23
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 

for(i=n-1;i>=0;i--)
{temp=*(pt+n);*(pt+n)=*(pt+i);*(pt+i)=temp;}

这里为什么要各个元素向后退位啊?只是说“对换”而已啊!!!!还有,程序中没有找出最小元素!可以在找大数的同时找小数,这样还可以省些时间呢

scanf("%d",&(*(p+i)));因为*(p+i)相当于p[i] //这里直接(p+i)就行了

2007-03-07 21:04
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 
再补充一下
p的初始值不应该是 0 ,因为整数包括负数,p的初始值应该是 *(pt+n-1)

[此贴子已经被作者于2007-3-7 21:09:54编辑过]

2007-03-07 21:07
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 

for(i=0;i<n;i++)

 if(*(pt+i)>p)
  {p=*(pt+i);k=i;} //p记录最大的数,k记录其地址;p的初始值为*(pt+n-1)
else if(t>*(pt+i))
{t=*(pt+i);x=i;} //t记录最小的数,x记录其地址;t的初始值为*pt

下面也相应加上对换的语句

这样的好处是减少了比较的次数
最后如果x=n-1得注意,因为大数换到最后了,再去换小数的时候就出错了

[此贴子已经被作者于2007-3-7 21:25:17编辑过]

2007-03-07 21:19
zwlcdh
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-2-8
收藏
得分:0 

谢谢大家,谢谢大家!
老是犯输入的错误!!!
输入我改成
void ru(int *p,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",p+i);
}
后面还有点问题,我马上就修改!谢谢大家关心

2007-03-07 21:56
快速回复:指针的一道小题,我快疯了!怎么弄不明白?!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024692 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved