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;
照一楼的说法虽然能运行了,但是不能倒序输出啊,还是原样输出 。
为什么必须用指针??? 展开
#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;
照一楼的说法虽然能运行了,但是不能倒序输出啊,还是原样输出 。
为什么必须用指针??? 展开
4个回答
展开全部
��这样的程序是没任何用的,因为你定义的函数根本没有返回值,在定义函数中执行过的变量根本不会回到主函数中,因此实际上变量的值根本未作任何改变。所以为什么你说最后输出的还是原始顺序,原因就在这里。
��事实上,你定义的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函数的定义放在主函数的前面,这样就不用在主函数中对函数进行声明,可以让程序稍微简洁一点。楼上两位说的用指针当然不错,并且指针是一种非常灵活和巧妙的方法,不过由于不知道楼主有没有学到过指针,因此我没有用指针来做这道题。推荐楼主多看看指针方面的程序,以后用指针编程会让程序简洁和灵活得多,是大有好处的。
��事实上,你定义的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函数的定义放在主函数的前面,这样就不用在主函数中对函数进行声明,可以让程序稍微简洁一点。楼上两位说的用指针当然不错,并且指针是一种非常灵活和巧妙的方法,不过由于不知道楼主有没有学到过指针,因此我没有用指针来做这道题。推荐楼主多看看指针方面的程序,以后用指针编程会让程序简洁和灵活得多,是大有好处的。
展开全部
因为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;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int swap(int m,int n)
{ int k;
{k=m;m=n;n=k;}
}
{ int k;
{k=m;m=n;n=k;}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询