高手请教,c语言,输入a,b,c,d,四个数,按从大到小的顺序输出这四个数,应用指针变量做函数参数,有追加~~
展开全部
#include <stdio.h>
// 降序排列
void des_tow(int *px, int *py)
{
int t;
if (*px < *py)// *px<*py,交换,否则直接返回
{
t = *px;
*px = *py;
*py = t;
}
}
void des_four(int *pa, int *pb, int *pc, int *pd)
{
// 最小的值最终存在pd中
des_tow(pa,pb);
des_tow(pb,pc);
des_tow(pc,pd);
// 次小的值存在pc中
des_tow(pa,pb);
des_tow(pb,pc);
// 次大的值存在pb中
des_tow(pa,pb);
// 最大的值最后当然是在pa中了,we are here
}
int main()
{
int a = 100, b = 10, c = 66, d = 500;
printf("Before Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
des_four(&a,&b,&c,&d);
printf("After Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
// 其实上边的代码运用的是冒泡排序的思想,只是待排序的数据不在数组中,故成了这副尊容
// 自己要多看书、思考,这样才可能有进步哦!!!
// 降序排列
void des_tow(int *px, int *py)
{
int t;
if (*px < *py)// *px<*py,交换,否则直接返回
{
t = *px;
*px = *py;
*py = t;
}
}
void des_four(int *pa, int *pb, int *pc, int *pd)
{
// 最小的值最终存在pd中
des_tow(pa,pb);
des_tow(pb,pc);
des_tow(pc,pd);
// 次小的值存在pc中
des_tow(pa,pb);
des_tow(pb,pc);
// 次大的值存在pb中
des_tow(pa,pb);
// 最大的值最后当然是在pa中了,we are here
}
int main()
{
int a = 100, b = 10, c = 66, d = 500;
printf("Before Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
des_four(&a,&b,&c,&d);
printf("After Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
// 其实上边的代码运用的是冒泡排序的思想,只是待排序的数据不在数组中,故成了这副尊容
// 自己要多看书、思考,这样才可能有进步哦!!!
追问
请教这个程序对不对,哪里错了
#include "stdio.h"
int*sort(int*p,int n);
int main()
{
int i,a[4],j;
for (i=0;i<=4;i++)
scanf ("%d",a[i]);
sort(a,4);
for(int j=0;j<4;j++)
printf("%d",p[j]);
return 0;
}
int*sort(int*p, int n)
{
int pt;
for(int i<0;i<4;i++)
for(int j j=i;j<3;j++)
{
if(p[i]<p[j])
{pt=p[i];
p[i]=p[j];
p[j]=pt;
}
}
return p;
}
追答
首先,我不知道你的编译器默认使用的是不是老的C标准,如果是老的标准,那么变量要遵循先定义后使用的原则,你的程序中就没有达标;另外还有一些函数的使用存在问题,比如说scanf()
你对比一下吧,认真思考、体会
#include "stdio.h"
int*sort(int*p,int n);
int main()
{
int i,a[4],j;
for (i=0;i<4;i++)
scanf ("%d",&a[i]);
sort(a,4);
for(j=0;j<4;j++)
printf("%d ",a[j]);
return 0;
}
int*sort(int*p, int n)
{
int pt,i,j;
for( i=0;i<4;i++)
{
for(j=i;j<3;j++)
{
if(p[i]<p[j])
{
pt=p[i];
p[i]=p[j];
p[j]=pt;
}
}
}
return p;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
int input(int *numfirst,int length){
int i=0;
printf("Input:\n");
for(i=0;i<length;i++){
fflush(stdin);while(scanf("%d",numfirst)==0)fflush(stdin);numfirst++;}
printf("Input Ok!\n");
return 0;}
int sort(int *numfirst,int length){
int i,j;int *temp,*temp2;
for(i=0;i<length-1;i++)for(j=i+1;j<length;j++){
temp=numfirst+i;temp2=numfirst+j;
if(*temp>*temp2){
*temp=(*temp^*temp2);*temp2=(*temp^*temp2);*temp=(*temp^*temp2);}}
return 0;}
int display(int *numfirst,int length){
int i=0;
printf("\n");
for(i=0;i<length;i++)printf("%d ",*(numfirst++));
printf("\n");
return 0;}
void main()
{
int num[4];
input(num,4);
sort(num,4);
display(num,4);
}
int input(int *numfirst,int length){
int i=0;
printf("Input:\n");
for(i=0;i<length;i++){
fflush(stdin);while(scanf("%d",numfirst)==0)fflush(stdin);numfirst++;}
printf("Input Ok!\n");
return 0;}
int sort(int *numfirst,int length){
int i,j;int *temp,*temp2;
for(i=0;i<length-1;i++)for(j=i+1;j<length;j++){
temp=numfirst+i;temp2=numfirst+j;
if(*temp>*temp2){
*temp=(*temp^*temp2);*temp2=(*temp^*temp2);*temp=(*temp^*temp2);}}
return 0;}
int display(int *numfirst,int length){
int i=0;
printf("\n");
for(i=0;i<length;i++)printf("%d ",*(numfirst++));
printf("\n");
return 0;}
void main()
{
int num[4];
input(num,4);
sort(num,4);
display(num,4);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Alionkun 的排序好啊,呵呵。 主函数可改下:
void main(void)
{
int a,b,c,d;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("Before Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
des_four(&a,&b,&c,&d);
printf("After Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
void main(void)
{
int a,b,c,d;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("Before Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
des_four(&a,&b,&c,&d);
printf("After Ordering : a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
追问
同意
追答
呵呵,我准备写时,他已经写好了,不错,C语言怪好玩的!
祝你顺利!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询