| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4937 人关注过本帖
标题:将三个整数从大到小输出(指针方法 麻烦高手给点思路!谢谢 呵呵)
只看楼主 加入收藏
clqngw
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-4-17
收藏
 问题点数:0 回复次数:14 
将三个整数从大到小输出(指针方法 麻烦高手给点思路!谢谢 呵呵)
看到一位仁兄的帖子  就是那个要将三个输入的整数从大到小输出的题目   就想看能不能用现在在学的指针给解决了,就写下了下面的代码,可是到后来自己都觉得很混乱,错误百出,都写不下去了,最后勉强写了“}",貌似终于写完了,可是一编译....................望高手指点一下思路,我原本的想法是先写一个swap函数,再用指针调用交换地址,实现大小的输出。

#include<stdio.h>
int swap(int *a,int *b)
{
  int temp;
  int m,int n;
  a=&m;
  b=&n;
  if(m<n)
{
  temp=*a;
  *a=*b;
  *b=temp;
}
}
main()
{
   int i,j,k;
   int *p1,*p2,*p3;
   p1=&i;
   p2=&j;
   p3=&k;
   scanf("%d%d%d",&i,&j,&k);
   swap(&i,swap(&j,&k));
   printf("%d%d%d",*p1,*p2,*p3);
}
   有什么可笑的地方,还望高手一笑的同时,给予指点,我刚学c..............
搜索更多相关主题的帖子: 整数 指针 思路 麻烦 
2008-05-21 16:46
clqngw
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-4-17
收藏
得分:0 
高手们路过的时候   麻烦给一点指教啊    不要就这么让这帖沉了啊    谢谢啊   呵呵
2008-05-22 15:42
天地自由行
Rank: 2
等 级:论坛游民
帖 子:79
专家分:16
注 册:2008-5-15
收藏
得分:0 
个人认为没什么必要这么做,简单事情复杂化了
2008-05-22 17:18
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
int swap(int *a,int *b)
{
  int temp;
  int m,int n;
  a=&m;
  b=&n;
  if(m<n)
{
  temp=*a;
  *a=*b;
  *b=temp;
}
}

真汗。。。。。。。
你的m,n的值是从哪里飞来得?

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-22 17:22
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
实在是错得没边~根本没法改
你的交换函数可以写成这样~
void swap(int *a,int *b)
{
  int temp;
  if(*a<*b)
{
  temp=*a;
  *a=*b;
  *b=temp;
}
}

调用的时候需要3次才能顺序排列

[[it] 本帖最后由 nobush 于 2008-5-22 11:36 编辑 [/it]]
2008-05-22 17:28
纨酷子帝
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-4-30
收藏
得分:0 
第一:如四楼所讲,请改为五楼
第二:
这句swap(&i,swap(&j,&k)); 你用swap作了形参,那么swap必须返回地址类型!!!!!!!第三:
swap(&i,swap(&j,&k)); 并不能实现三个数由大到小!如i=3,j=5,k=4。swap(5,4)不交换,
swap(5,3)交换5和3,得到  5,3,4  !!!!!!
第四:
有种算法最坏只要三次比较七次移动

编程高手 QQ群:19728471。只为交流,共同进步,非诚勿扰!
2008-05-24 14:55
伤心的我
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-5-24
收藏
得分:0 
swap(&i,swap(&j,&k));调用函数直接传变量地址也行哦。我没试过。下次我试试!不过我一般是传指针变量或者数组名,
2008-05-24 17:16
伤心的我
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-5-24
收藏
得分:0 
#include"stdio.h"
main()
{int swap();/*被调函数声明*/
int a,b,c,*p1,*p2,*p3;
printf("please input a,b,c:\n");/*请输入a,b,c三个数*/
scanf("%d%d%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;/*分别给三个指针变量赋值*/
if(*p1<*p2) swap(p1,p2);
if(*p1<*p3) swap(p1,p3);
if(*p2<*p3) swap(p2,p3);
printf("%d%d%d",a,b,c);
getch();
}
int swap(int*x,int*y)
 {int t;
  t=*x;
 *x=*y;
 *y=t;
}
/*我写的不知道对不》有不对望指出,谢谢*/
2008-05-24 17:36
纨酷子帝
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-4-30
收藏
得分:0 
/*由于楼主非要用指针就这样搞。楼主,swap函数不应定义为int型,因为无返回值;声明时指明参数类型,编译时会检查的;getch()不用*/
/*算法一:最坏情况下,需比较3次,移动9次*/
#include "stdio.h"
void main()
{void swap(int *x,int *y);
int a,b,c;
printf("please input a,b,c:\n");
scanf("%d %d %d",&a,&b,&c);/*输入以空格间开*/
swap(&a,&b);
swap(&a,&c);
swap(&b,&c);
printf("%d %d %d\n",a,b,c);
}
void swap(int *x,int *y)
{int t;
if(*x<*y) {t=*x;*x=*y;*y=t;}
}
/*算法二:最坏情况下,需比较3次,移动7次,更好!*/
#include "stdio.h"
void main()
{void swap(int *x,int *y,int *z);
int a,b,c;
printf("please input a,b,c:\n");
scanf("%d %d %d",&a,&b,&c);/*输入以空格间开*/
swap(&a,&b,&c);
printf("%d %d %d\n",a,b,c);
}
void swap(int *x,int *y,int *z)
{int t;
if(*x<*y) {t=*x;*x=*y;*y=t;}
if(*y<*z) {
    t=*z;*z=*y;
    if(*x>=t) *y=t;
    else {*y=*x;*x=t;}
    }
}

编程高手 QQ群:19728471。只为交流,共同进步,非诚勿扰!
2008-05-25 00:50
njinji007
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-14
收藏
得分:0 
大家都有弄得比较烦了.
用个编译器自带的函数解决.
2008-05-25 01:53
快速回复:将三个整数从大到小输出(指针方法 麻烦高手给点思路!谢谢 呵呵)
数据加载中...
 
   



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

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