回 帖 发 新 帖 刷新版面

主题:数组排序打印的错误

请问各位     这个排列数组元素并且打印的错误出在哪里

#include <stdio.h>
int main(void)
{
    int size;
    int walk;
    int smallest;
    int tempdate;
    int current;
    int i;
    int* ary;
    printf("how many numbers do you want\n ");
    scanf("%d",&size);
    ary=(int*)malloc(sizeof(int)*size);
    for(i=0;i<size;i++)
    {
    printf("enter the %d  number",(i+1));
    scanf("%d",&ary[i]);
    }
    printf("now softing the ary elments");
    for(current=0;current<size;current++)
    {
    smallest=current;
    for(walk=current+1;walk<=size;walk++)
    if(ary[walk]<ary[current])
    smallest=walk;
    tempdate=ary[current];
    ary[current]=ary[smallest];
    ary[smallest]=tempdate;
   }
   for(i=0;i<size;i++)
   printf("%3d",ary[i]); 
   free(ary);
    getchar();
    return(0);
}

回复列表 (共1个回复)

沙发

#include <stdio.h>
//#include <stdlib.h>
#include <malloc.h>
int main(void)
{
    int size;
    int walk;
    int smallest;
    int tempdate;
    int current;
    int i;
    int* ary;
    printf("how many numbers do you want\n ");
    scanf("%d",&size);
    ary=(int*)malloc(sizeof(int)*size);
    for(i=0;i<size;i++)
    {
        printf("enter the %d  number: ",(i+1));
        scanf("%d",&ary[i]);
    }
    printf("now softing the ary elments\n");
    for(current=0;current<size-1;current++)
    {
        smallest=current;
        for(walk=current+1;walk<size;walk++)
            if(ary[walk]<ary[current])
            {
                smallest=walk;
                tempdate=ary[current];
                ary[current]=ary[smallest];
                ary[smallest]=tempdate;
            }
    }
    for(i=0;i<size;i++)
        printf("%3d",ary[i]); 
    printf("\n");
    free(ary);
    getchar();
    return(0);
}

三个错误,加一个建议。
首先,我拿楼主的程序直接复制到VC6.0环境下运行,报错。为什么?malloc和free函数不认得,哦,原来没有写头文件#include <stdlib.h>或者#include <malloc.h>
第二,for(current=0;current<size-1;current++);smallest=current;是size-1,不知道楼主可以解不,我拿笔在纸上一画,就明白了,楼主请仔细想想。你可以这么想,如果外循环current<size,也就是current= size-1;smallest=ary[current],然后进入内循环walk = current+1,ary[walk],数组已经越界了?楼主明白不,外循环已经是数组的最后一个数值了,内循环在加一,那不越界了吗?
第三,if(ary[walk]<ary[current])
            {
                smallest=walk;
                tempdate=ary[current];
                ary[current]=ary[smallest];
                ary[smallest]=tempdate;
            }
楼主漏掉什么,应该自己明白了吧,一条语句可以不用括号,但是这里是语句块啊,不用括号,if语句里面,只执行smallest=walk;我一条语句也会括号,这样感觉层次性强。这也是我下面要说的一条建议。
建议:printf("enter the %d  number: ",(i+1));number后面用个冒号,输入的数值跟number粘在一起?看起来是不是?该用空格的时候用空格。注意一下格式啊。
本人也是菜鸟,刚花了二个月自学C语言,目前正在学习C++,写错或者解释错的地方还请高手谅解。一起交流。

我来回复

您尚未登录,请登录后再回复。点此登录或注册