道士带敏捷10怎么样:C程序代码有疑问

来源:百度文库 编辑:高考问答 时间:2024/05/09 11:45:34
swap(int pt1,int pt2)
{int temp;
temp=pt1;
pt1=pt2;
pt2=temp;
}
exchange(int q1,int q2,int q3)
{if(q1<q2) swap(q1,q2);
if(q1<q3) swap(q1,q3) ;
if(q2<q3) swap(q2,q3) ;
}
main()
{int a,b,c;
printf("Input a,b,c:") ;
scanf("%d %d %d",&a,&b,&c);
exchange(a,b,c);
printf("\n%d,%d,%d\n",a,b,c);
}
程序可以运行,但把输入的数还照原样输出,怎么回事?应该从大到小输出才队哎呀?

当执行exchange函数时,他将传入的a b c建了一个副本,q1 q2 q3,所以在函数内只改变了q1 q2 q3 但是a b c 并没有改变
swap也一样

改成以下就OK了

#include <stdio.h>
swap(int *pt1,int *pt2)
{int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
exchange(int *q1,int *q2,int *q3)
{if(*q1<*q2) swap(q1,q2);
if(*q1<*q3) swap(q1,q3) ;
if(*q2<*q3) swap(q2,q3) ;
}
main()
{int a,b,c;
printf("Input a,b,c:") ;
scanf("%d %d %d",&a,&b,&c);
exchange(&a,&b,&c);
printf("\n%d,%d,%d\n",a,b,c);
}
--------------------------------
不要跟我挣,你们学C才几天阿,这么简单的题都不会阿--圣桑君 隔壁的虫子

尤其是隔壁的虫子,你要是不懂就别瞎评我的代码
我告诉你你写的这个不行,交换的地方100%没成功,指针都不会用还来评我的代码,回家再看几年书吧

没有调查就没有发言权!!!!!!!!!!!!!!!!
----------------------------------

希望如此

我是没学几天
不过以你那拽样
在我眼里迟早是个菜鸟!

void swap(int *p1,int *p2)
{
int temp;
temp=*p1;*p1=*p2;*p2=temp;
}
void exchange(int q1,int q2,int q3)
{
int *pq1=&q1,*pq2=&q2,*pq3=&q3;
if(q1<q2) swap(pq1,pq2);
if(q1<q3) swap(pq1,pq3);
if(q2<q3) swap(pq2,pq3);
printf("big to small:%d,%d,%d\n",q1,q2,q3);
}
int main(void)
{
int a,b,c;
printf("\Input a b c\n");
scanf("%d%d%d",&a,&b,&c);
exchange(a,b,c);
getch();
return 0;
}

上面是用指针做的,运行了,没问题。可我想楼主的本意应该不是用指针做吧?
比如我不用指针做函数参数,就用整型变量做函数swap的形参。下面代码的bug在哪里?
void swap(int p1,int p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
}
void exchange(int q1,int q2,int q3)
{
if(q1<q2) swap(q1,q2);
if(q1<q3) swap(q1,q3);
if(q2<q3) swap(q2,q3);
printf("%d\t%d\t%d\n",q1,q2,q3);
}
int main(void)
{
int a,b,c;
printf("\nInput a b c\n");
scanf("%d%d%d",&a,&b,&c);
exchange(a,b,c);
getch();
return 0;
}

顺便补充一下,我是学c没多久,大家都是共同学习的……没必要在这里争强斗胜,这也违背我们学习的初衷!大家都能在交流中学到东西才是最大的收获……某些人请
端正自己的态度~~~~~~~~~~~~~~~~~~~~~