按升序排列给定的数字

时间:2015-04-15 18:11:11

标签: c arrays

我刚刚开始学习C,今天我遇到了一个问题,其中一个部分是接受用户的数字数组并按升序排列。数组大小也由用户指定。 我为此目的使用了以下代码 - >

   for (i = 0; i <= y - 1; ++i) {
        for (ii = i + 1; ii <= y - 1; ++ii) {
            if (x[i] > x[ii]) {
                temp = x[i];
                x[i] = x[ii];
                x[ii] = temp;
            }
        }
    }
    int k;
    printf("\nNumbers arranged in ascending order:\n");
    for (k = 0; k < y; ++k) {
        printf("%d\n", x[i]);
    }

这里,变量y是数组的大小,x是数组变量的名称(所以变量定义就像这样 - &gt; int x[y]; 但问题是,它只打印出数组的最终值。详细说明问题: 假设我输入3作为我的数组大小。程序问我3个数字,我选择34,45,22。 现在执行完整个代码之后,它会显示x [3](现在x [3]甚至不存在!因为x [2]是数组中的最终值。所以它给出了变量的内存位置。) 我哪里错了?

2 个答案:

答案 0 :(得分:5)

您需要更改

 printf("%d\n", x[i]);

printf("%d\n", x[k]);

在打印循环中,因为您使用k作为循环计数器变量。

答案 1 :(得分:0)

在你最后的for循环中,你正在做

 printf("\nNumbers arranged in ascending order:\n");
for (k = 0; k < y; ++k) {
    printf("%d\n", x[i]);
}

但您打印x[i],但不增加i。请记住,ik只是数组变量,而不是数组中的实际VALUES。只需将printf更改为printf("%d\n", x[k]);即可正常使用。