我正在处理一个生成随机数并在数组中排序的问题,然后显示从最大到最小的数字。 这是我的代码:
#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”。
答案 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