做c中的数组

时间:2017-03-15 04:53:55

标签: c arrays loops

我正在处理一个生成随机数并在数组中排序的问题,然后显示从最大到最小的数字。 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 40
int main()
{
    int array[SIZE];
    int inner, outter, temp, i;

    srand((unsigned)time(NULL));
    //do... while to assign array value
    i=0;
    do{
        array[i] = (int)((rand()%101)+1);
        i++;
    }while(i<SIZE);

    puts("Original array:");


    for(outter=0; outter<SIZE-1;outter++){
            printf("%d\t", array[outter]);
    }

    //bubble sort
    for(outter=0; outter<SIZE-1;outter++){

        for(inner=outter+1; inner<SIZE; inner++ ){

            if(array[outter] > array[inner]){

                 temp = array[outter];
                 array[outter] = array[inner];
                 array[inner] = temp;
            }
        }
    }
    puts("\n");
    puts("Sorted array:");

    printf("i= %d\n",i);
     printf("%d\n", array[39]);
    for(outter=0; outter<SIZE;outter++){
            printf("%d\t", array[outter]);
    }

    puts("\n");
    for(outter=SIZE-1; outter>0;outter--){
            printf("%d\t", array[outter]);
    }
    puts("\n");
    // try using do while loop to display reverse number from biggest to smallest numbers
    do{
        printf("i= %d\n", i-1);
        i--;
    }while(i>-1);
}

当我用来显示反向数组编号时,我的代码就是粉碎了。 但是,我显示用于循环数组的“i”值,它显示从39到-1。我不知道为什么我的“i”值为-1,因为我设置了“i&gt; -1”。

2 个答案:

答案 0 :(得分:2)

TL; DR :将您的printf更改为:printf("i= %d\n", i);或将您的while循环更改为while(i > 0);。无论哪种方式,它都应该解决你的问题。

do while循环在花括号中执行操作,然后检查条件。我不太了解你的问题,但在我看来它打印-1是因为它先做,然后检查条件。此外,您在i - 1功能中使用了printf(这可能是您最让您感到困惑的地方)。

编辑:要明确更多关于while循环,问题是你的条件是(i > -1)。这意味着当您到达0时,您的代码将会检查:is 0 greater than -1?。它将返回true,然后移动到i = -1打印-1的位置。然后它再次达到while条件,它会看到代码终止时的-1 is not greater than -1

答案 1 :(得分:0)

您的主要问题可能是i的起始值。 在第一个do ... while循环之后,当条件失败时,它等于40。

因此,如果调整第二个循环的起始值,则可以使事情变得更容易:

i--; // or i = SIZE-1;
do{
    printf("i= %d\n", i);
    i--;
} while (i >= 0);

然后,您可以通过将值移动一个来解决问题,并且可以使用您想要的值。

如果你坚持按照你的方式做,那么检查限制......

do{
    printf("i= %d\n", i-1);   // last value to be printed is 0 ==> i == 1
    i--;                      // The last wanted value of i now is 0.
} while (i>0);                // Stop if we reach last wanted value