鱼C论坛

 找回密码
 立即注册
查看: 2721|回复: 3

1维数组!超级恶心!绝对很多新手的误区!

[复制链接]
发表于 2011-12-2 23:30:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<Stdio.h>
void main()
{
        int i,j,p,q,s,a[10];
        printf(" input 10 numbers:\n");
        for(i=0;i<10;i++)
                scanf("%d",&a[i]);
                for(i=0;i<10;i++)
                {
                        p=i;
                        q=a[i];
                        for(j=i+1;j<10;j++)
                        {
                                if(q<a[j])
                                {
                                        p=j;q=a[j];
                                }
                                if(i!=p)
                                {
                                        s=a[i];
                                        a[i]=a[p];
                                        a[p]=s;
                                }
                                printf("%d",a[i]);
                        }
                        printf("\n");
               
                }
}  我输入  0 1 2 3 4 5 6 7 8 9           这个和我思路不一样why?当i=0,j=1;   
1 2 3 4 5 6 7 8 9                                    1 2 3 4 5 6 7 8 9  这里没问题  x=1,j=2
1 2 3 4 5 6 7 8                                        因该是2 3 4 5 6 7 8 9 啊 if(i!=p)这里实现的不就是交换数字么?
1 2 3 4 5 6 7                                             x=2
1 2 3 4 5 6                                                3 4 5 6 7 8 9啊
1 2 3 4 5                                                  3 4 5 6 7 8 x -3        到底我思路哪里错了。。  能加个QQ 开语音讲下么?474711079
1 2 3 4                                                   
1 2 3
1 2
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-3 01:18:59 | 显示全部楼层
也是新手菜鸟来的,冒昧来逞下强!说得不好莫见怪。
      刚开始我也是你这种想法,不过我调试了下,发现了其中的端倪。
第一次外循环,即i = 0时,在执行这if语句时
if(i!=p)
   {
    s=a;
    a=a[p];
    a[p]=s;

这里确实是把两个数交换了,但你只知道把a[p]的值赋给了a,忘了它还把s的值赋给了a[p]。
也就是说,它执行一次,举个例子,第一次内循j = 1时,我们知道a[p] = 1。即a[1] = 1。但一开始a的值
是0,也就是交换后,a = 1,而a[1] = 0。
当j = 2时,a = 2,a[2] = 1;
当j = 3时,a = 3,a[3] = 2;
……
当j = 9时,a = 9,a[9] = 8;
由此可见,在第一次外循环执行完之后,数组的数就变成a[0] = 0;a[1] = 0;a[2] = 1;……a[9] = 8。所以再
执行下去所输出的值就改变。
以此类推,相信不难理解接下去的输出了吧。可能文字表达不咋的,可能见笑了,呵呵!自己用小甲鱼老师
教的调试试试看




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-3 13:02:39 | 显示全部楼层
呵呵,debug看看~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-12-3 13:48:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表