标题:请帮帮小弟看懂这条程序,讲的尽量详细点,谢谢了!
只看楼主
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
已结贴  问题点数:20 回复次数:13 
请帮帮小弟看懂这条程序,讲的尽量详细点,谢谢了!
程序代码:
#include <stdio.h>

void main()
{
      void  exchange(int *q1, int *q2, int *q3);

      int a, b, c, *p1, *p2, *p3;

      scanf("%d %d %d", &a, &b, &c);
      p1 = &a;
      p2 = &b; 
      p3 = &c;

      exchange(p1, p2, p3);  //确保a > b > c
      printf("%d %d %d\n", a, b, c);
}


void  exchange(int *q1, int *q2, int *q3) //int *q1 = p1;
{
      void swap(int *pt1, int *pt2); //用于交换&……&%

      if( *q1 < *q2 )
      {
            swap(q1, q2);
      }
      if( *q1 < *q3 )
      {
            swap(q1, q3);
      }
      if( *q2 < *q3 )
      {
            swap(q2, q3);
      }
}

 
void  swap(int *pt1, int *pt2)
{
      int temp;

      temp = *pt1;
      *pt1 = *pt2;
      *pt2 = temp;
}

为什么这段程序部事先声明好所有函数,而是在定义中声明函数。比如说“
void main()
{
      void  exchange(int *q1, int *q2, int *q3);...
还有void  exchange(int *q1, int *q2, int *q3) //int *q1 = p1;
{
      void swap(int *pt1, int *pt2); //用于交换&……&%...”
这是什么结构额?为什么不能事先把“exchang”和“swap”一起声明了,然后在下面就直接调用。按源程序的结构让我看的好凌乱啊!!!
搜索更多相关主题的帖子: exchange 
2014-10-04 17:13
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
得分:3 
“为什么不能事先把“exchang”和“swap”一起声明了,然后在下面就直接调用”

你怎么知道不能?它是仅仅只写出这一种方法而已

坚持----------------------------------唯一的道路
shit ! ! !
2014-10-04 17:20
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
得分:0 
回复 2 楼 wssy213
你看它都是void类型的,我把它在开头声明了就会报错的。。
2014-10-04 17:29
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
得分:3 
void  exchange(int *q1, int *q2, int *q3);
声明的位置有问题。
应该把它在主函数前面声明。
2014-10-04 18:06
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
得分:0 
回复 3 楼 弟大勿勃
你是怎么写的,贴出来

坚持----------------------------------唯一的道路
shit ! ! !
2014-10-04 18:08
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
得分:0 
回复 5 楼 wssy213
程序代码:
#include <stdio.h>
void  exchange(int *q1, int *q2, int *q3)
void swap(int *pt1, int *pt2)
void main()
{
    

      int a, b, c, *p1, *p2, *p3;

      scanf("%d %d %d", &a, &b, &c);
      p1 = &a;
      p2 = &b; 
      p3 = &c;

      exchange(p1, p2, p3);  //确保a > b > c
      printf("%d %d %d\n", a, b, c);
}


void  exchange(int *q1, int *q2, int *q3) //int *q1 = p1;
{

      if( *q1 < *q2 )
      {
            swap(q1, q2);
      }
      if( *q1 < *q3 )
      {
            swap(q1, q3);
      }
      if( *q2 < *q3 )
      {
            swap(q2, q3);
      }
}

 
void  swap(int *pt1, int *pt2)
{
      int temp;

      temp = *pt1;
      *pt1 = *pt2;
      *pt2 = temp;
}

我就是这个意思,不是说先写主程序的话必须先声明要调用的函数“void  exchange(int *q1, int *q2, int *q3)
和void swap(int *pt1, int *pt2)”,但不行啊。是不是应为都是void型的原因?我对这个不太懂,请指教啊!如果你能写出来帮我改改看嘛大神~~
2014-10-05 15:12
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:3 
void  exchange(int *q1, int *q2, int *q3)
                                        ^
void swap(int *pt1, int *pt2)
                            ^

声明也没说不用结尾啊


2014-10-05 15:56
dcl2014
Rank: 4
等 级:业余侠客
威 望:1
帖 子:58
专家分:273
注 册:2014-9-20
得分:3 
俺来完了 都解决了
2014-10-05 16:24
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
得分:0 
回复 7 楼 zklhp
那为什么能在主函数中声明exchang函数
程序代码:
void main()
{
      void  exchange(int *q1, int *q2, int *q3);

      int a, b, c, *p1, *p2, *p3;
?这种结构我以前没见过额,还有他下面被调用的函数exchang又有出现swap函数的声明
void  exchange(int *q1, int *q2, int *q3) //int *q1 = p1;
{
      void swap(int *pt1, int *pt2); 
,这又是怎么回事?
2014-10-05 16:30
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
得分:0 
唉。。没人指点一下吗?
2014-10-06 12:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436855-1-1.html




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

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