2016-11-29 46 views
-1

我有一個問題,當我運行它時,最小值和最大值不會正確顯示。 有什麼建議嗎? 我必須讓範圍出現。 我試過用指針。 練習可以做其他的肯定,但我想用這種方式瞭解我的錯誤。C中數組中的最大最小值(帶指針)

#include <stdio.h> 
#include "simpio.h" 
#include "genlib.h" 

int readArray(int array[100]); 

main() 
{ 
    int array[100], i, size, *min, *max; 

    printf("Enter the elements of the array, one per line.\n"); 
    printf("Use -1 to signal the end of the list.\n"); 

    readArray(array); 

    min = array; 
    *min = *array; 

    for (i=1; i<size; i++) 
    { 
    if (*(array+i) < *min) 
    { 
     *min = *(array+i); 
    } 
    } 
    max = array; 
    *max = *array; 

    for (i=1; i<size; i++) 
    { 
    if (*(array+i) > *max) 
    { 
     *max = *(array+i); 
    } 
    } 

    printf("The range of values is %d-%d \n", *min, *max); 

    system("pause"); 
} 

int readArray(int array[100]) 
{ 
    int i, size; 
    size = 0; 

    for (i=0; i<100; i++) 
    { 
    printf("? "); 
    array[i] = GetInteger(); 
    size += 1; 
    if (array[i] == -1) {break;} 
    } 
    for(i=0; i<size-1; i++) 
    { 
    printf("%d ", array[i]); 
    } 
    printf("\n"); 

    printf("\n"); 
} 
+0

注意一個例子'*(數組+ I)'是一樣的,並且應當被寫成,'陣列[I]'。當你設置'min = array'時,你使用'array [0]'來存儲最小值。然後當你設置'max = array'時,你使用'array [0]'作爲最大值。這就是爲什麼代碼不起作用。 – user3386109

+0

您也可以對最小值和最大值都使用相同的循環。 –

+0

請不要寫'if(array [i] == -1){break;}'這樣的代碼...... –

回答

1

您將要覆蓋在*min的值,它是在陣列中的第一個值。你想要的是讓指針的值,因此,你真正需要的是

min = array; 

min = array + i; 

min = &array[i]

*操作符將指針取消引用,直到您打印它時纔會這樣做。您可以使用minmax指針指向數組中的任何位置,例如,可以使const爲例,以防止在給定時間意外地寫入它們指向的位置。

下面是從自己的代碼建

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int readArray(int *array, int size); 

int 
main(void) 
{ 
    int array[100], i, *min, *max; 

    srand(time(NULL)); 

    printf("Enter the elements of the array, one per line.\n"); 
    printf("Use -1 to signal the end of the list.\n"); 

    readArray(array, 100); 

    min = array; 
    max = array; 
    for (i = 1; i < 100 ; i++) { 
     if (*(array + i) < *min) 
      min = array + i; 
     if (*(array + i) > *max) 
      max = array + i; 
    } 
    printf("The range of values is %d-%d \n", *min, *max); 
} 

int 
readArray(int *array, int size) 
{ 
    for (int i = 0 ; i < size ; i++) 
     array[i] = 1 + rand() % 100; 
    for (int i = 0 ; i < size ; i++) 
     printf("%d ", array[i]); 
    printf("\n"); 
    printf("\n"); 
    return 0; 
}