2017-03-15 24 views
0

我工作的問題,產生隨機數和排序數組,然後顯示數字從最大到最小。 這裏是我的代碼:做,而爲陣列在c

#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); 
} 

當我用做同時顯示反向序列號,我的代碼去迷戀。 但是,我顯示的值是「我」用於循環數組,它顯示從39到-1。因爲我設置了「i> -1」,所以我不爲什麼對「我」值有-1。

回答

2

TL; DR:要麼改變你的printf這樣:printf("i= %d\n", i);或更改while循環while(i > 0);。無論哪種方式,它應該解決您的問題。

do while while循環在花括號中執行操作,然後檢查條件。我不是很理解你的問題,但在我看來,它打印-1,因爲它是先做,然後檢查條件。此外,您在printf函數中使用i - 1(這可能是您最困惑自己的地方)。

編輯:要明確有關while循環,問題是,你的條件是(i > -1)。這意味着當您達到0時,您的代碼將檢查:is 0 greater than -1?。它將返回true,然後移動到i = -1,在那裏打印-1。然後它再次達到條件終止時的-1 is not greater than -1

+0

您好,我只希望i.number從39到0,這樣我可以使用do..while循環顯示排序的數組值 – max

+0

你試過改變while條件爲'while(i> 0);'? – Gab

+0

我需要i = 0以及顯示排序陣列中的第一個元素用於反向顯示數組,從最大到最小 – max

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