读书人

数组有关问题求解答

发布时间: 2012-03-17 19:06:28 作者: rapoo

数组问题,求解答。

C/C++ code
#include <stdio.h>#define N 5int main(void){    int i,j,tmp,m;    int a[N];    for(i=0;i<N;i++)        scanf("%d",&a[i]);    for(i=0;i<N;i++)        for(j=0;j<N-i;j++)        {            if(a[j]>a[j+1])            {                tmp = a[j];                a[j]=a[j+1];                a[j+1]=tmp;            }        }    for(i=0;i<N;i++)        printf("%d ",a[i]);    printf("\n");    printf("input a number:\n");    scanf("%d",&m);    for(i=0;i<N;i++)    {        if(m>a[i])            ;        else{            for(j=N;j>i;j--)                a[j]=a[j-1];                a[i]=m;        //这里不能把m的值赋给a【i】             break;        }    }    for(i=0;i<N+1;i++)        printf("%d ",a[i]);    printf("\n");    return 0;}

1 3 5 7 9
1 3 5 7 9
input a number:
2
1 9 3 5 7 9

输出结果是这样的,不知道是什么问题。

[解决办法]
内存空间实际上在分配的时候,m的地址是在数组之后,也就是在内存里实际上你所想要表示的a[5]代表的就是m。所以你判断完2比3小后,开始把数组往后挪,这时把a[4]赋值给下一个地址,也就是m,所以这时m的值已经被修改为9了,再用m来给a[1]赋值,a[1]输出当然是9
[解决办法]
探讨

引用:
我也看出来了,a[5]你没定义,你可以在插入的时候再声明一个b[N+1],把a中的内容拷给b就应该可以了

嗯,可以这样做,谢谢帮忙,

读书人网 >C语言

热点推荐