C语言小问题,这个小程序哪错了???

#include<stdio.h>#include<conio.h>main(){intswap(intm,intn);inti,j;scanf("%d%d",&i,&j... #include<stdio.h>
#include<conio.h>
main()
{
int swap(int m,int n);
int i,j;
scanf("%d%d",&i,&j);
swap(i,j);
printf("%d\t%d",i,j);
getch();
}
int swap(int m,int n)
int k;
k=m;m=n;n=k;
照一楼的说法虽然能运行了,但是不能倒序输出啊,还是原样输出 。
为什么必须用指针???
展开
 我来答
jrrww
2010-05-20 · TA获得超过9523个赞
知道大有可为答主
回答量:3290
采纳率:32%
帮助的人:2223万
展开全部
��这样的程序是没任何用的,因为你定义的函数根本没有返回值,在定义函数中执行过的变量根本不会回到主函数中,因此实际上变量的值根本未作任何改变。所以为什么你说最后输出的还是原始顺序,原因就在这里。
��事实上,你定义的swap函数可以通过一个简单的二元整型数组实现,因为return语句只能带回一个值,而你的函数中存在两个变量,是无法直接被带回的。使用数组的话,就可以通过swap函数在原始数组里直接进行修改,这样就避免使用return语句带回,因为此时数组里的各变量的值已经发生改变,所以直接输出即可。
��把你的程序修改了一下,如下所示:

#include<stdio.h>
main()
{
void swap(int s[]);���/*定义为空类型就可以避免使用return语句*/
int a[2];
scanf("%d %d",&a[0],&a[1]);��/*请注意你的原程序,%d%d中间没空格或逗号是错误的,系统会无法判断究竟把哪个数赋给哪个变量*/
swap(a);
printf("%d\t%d",a[0],a[1]);
getchar();
}
void swap(int s[])��/*你的函数定义为什么不加花括号?明显有问题*/
{
int k;
k=s[0];
s[0]=s[1];
s[1]=k;
}

��当然你也可以把swap函数的定义放在主函数的前面,这样就不用在主函数中对函数进行声明,可以让程序稍微简洁一点。楼上两位说的用指针当然不错,并且指针是一种非常灵活和巧妙的方法,不过由于不知道楼主有没有学到过指针,因此我没有用指针来做这道题。推荐楼主多看看指针方面的程序,以后用指针编程会让程序简洁和灵活得多,是大有好处的。
AmiyaVenus
2010-05-20 · TA获得超过4296个赞
知道大有可为答主
回答量:2845
采纳率:100%
帮助的人:2480万
展开全部
因为swap中的mn都是局部变量,里面怎么操作对主函数中的i,j都是没关系的,所以需要用指针,通过指针,改变指针指向的i,j地址值,来达到改变i,j的目的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-05-20
展开全部
要用指针,修改如下:

//---------------------------------------------------------------------------

#include<stdio.h>
#include<conio.h>
main()
{
int swap(int *m,int *n);
int i,j;
scanf("%d%d",&i,&j);
swap(&i,&j);
printf("%d\t%d",i,j);
getch();
}
int swap(int *m,int *n)
{int k;
k=*m;*m=*n;*n=k;
}
//---------------------------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daisucai
2010-05-20 · 超过20用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:62.4万
展开全部
int swap(int m,int n)
{ int k;
{k=m;m=n;n=k;}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式