从键盘上输入三个数,使用数组的形式,并让他们从大到小输出,怎么做

[复制链接]
查看11 | 回复3 | 2011-10-15 08:36:49 | 显示全部楼层 |阅读模式
#include\"stdio.h\"#include\"conio.h\"#includemath.hvoidmax(inta,intb){intc;if(ab){c=a;a=b;b=c;}printf(\"%d,%d\",a,b);}main(){inti,a[3],s,p;for(i=0;i3;i)scanf(\"%d\",p=a[0];s=max(p,a);getch();}不知是哪里错的,感觉是对的啊
回复

使用道具 举报

千问 | 2011-10-15 08:36:49 | 显示全部楼层
当然不对了。你的循环,for(i=0;i3;i)scanf(\"%d\",成功读入了三个数字没错。可是得仔细理解一个这个for循环是怎么结束的。第一次的时候i=0是初始化,i3是维持循环继续的条件,i是改判断循环与否的值的。那么仔细说这三次循环,第一次,i=0;判断一下,3于是i;i变为1,然后你读入第一个数。第二次循环,i是1,满足小于三,i,i成2,你读取了第二个数,第三次循环,i=2;满足了小于三,i变成3,你读入了第三个数。然后第四次循环,i=3;不满足条件,所以你的循环终止了。所以很明显现在你的i是3;而数组呢,a[3]如果是定义,那么表示三个元素的一个数组,它包含a[0]a[1]a[2],很明显,s=max(p,a);,这个时候你用的a就是a[3],它已经超出数组的范围了。所以错了。还要说的是,你如果吧a改成a[i-1],也只是让a[0]跟a[2]比较了,没有涉及到a[1]。更直观来说,你就调用了一次max函数,这个函数里一共就输出了两个数,不管你穿进去的是哪两个,都不可能把三个数从小打到输出啊~
回复

使用道具 举报

千问 | 2011-10-15 08:36:49 | 显示全部楼层
voidmain(){floata[3],b;inti;scanf(追问这样的回答也太简单了吧、能把修改好的代码发过来吗?谢了
回复

使用道具 举报

千问 | 2011-10-15 08:36:49 | 显示全部楼层
声明一个中间值Temp给你看个例子吧#includestdio.hvoidmain(){inta=3;intb=2;intc=5;inttemp=0;if(ac){temp=c;c=a;a=temp;}if(ba){temp=a;a=b;b=temp;}if(bc){temp=c;c=b;b=temp;}printf(\"%d\\n%d\\n%d\",a,b,c);getchar();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行