Domanda

Devo trovare un modo per visualizzare il numero massimo e Minium in una matrice, la dimensione della matrice è 100 e non superiore a quello e non c'è necessità di convalida dell'input. Il programma continuare a chiedere per l'input fino a quando si incontra 0 e troppo otterrà aggiunto alla matrice.

Ho capito tutto tranne che come tenere traccia, che è la più grande e più piccolo valore. Sarei grato se qualcuno può risolvere il mio codice o mostrare problema me.Another sto avendo è sempre il ciclo di interrompere e fare / min max di calcolo all'interno del ciclo while quando l'ingresso è uguale a 0.

/*
 ============================================================================
 Name        : test.c
 Author      :
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#define n  100
int main(void){


 int numbers[n];
 int i = 1;
 int j;
        int input;
 int maxvalue;
 int minvalue;

   printf("Enter the next array element>");

input = scanf("%d", &numbers[100]);



while (input != 0){

  numbers[i] = input;
  i++;
  printf("Enter the next array element, while loop>");
  input = scanf("%d", &numbers[n]);
  if (input == 0){
printf("Enter the next array element, if loop");
   numbers[i] = 0;

   for (j =2;j <= i; j++){
    minvalue = numbers[1];

    j++;
    if (numbers[j] > minvalue){
     maxvalue = numbers[j] ;
    }
    else{
     minvalue = numbers[j] ;
    }

   }


  }
 }


printf("%f\t", maxvalue);

printf("%f\n", minvalue); 
 }

EDIT: Ho preso tutti fuori i vostri suggerimenti e modificato il mio codice. Questo è il mio codice qui sotto. Tuttavia, il suo output è neanche quello che mi aspetto.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue;
    int minvalue;

            printf("Enter the next array element>");

scanf("%d", &input);



while (input != 0){

        numbers[i] = input;
        i++;

        if (input == 0){
                   i++;
            numbers[i] = 0;
                        minvalue = numbers[0];
                        maxvalue = numbers[0];
                        for (j=0;j<=i-1;j++){

                            if (minvalue >= numbers[j]){
                                minvalue = numbers[j];
                            }else if (maxvalue <= numbers[j]){
                                maxvalue = numbers[j];
                            }


                        }

/* min = value of first array element
max = value of first array element

begin loop for each array element, index = 0 to (n-1)

--- if array element value is less than min, set min to this value
--- if array element value is more than max, set max to this value

increment index and repeat loop til last index is completed

average = sum / number of elements (n).
max and min will hold their correct values.*/




        }
                printf("Enter the next array element, while loop>");
    scanf("%d", &input);
    }


printf("%d\t", maxvalue);
printf("%d", minvalue);
    }

Questa è l'uscita, mi sto! qualcuno può risolvere questo per me.

Enter the next array element>1
Enter the next array element, while loop>2
Enter the next array element, while loop>3
Enter the next array element, while loop>0
12190144 l6Press [Enter] to close the terminal

EDIT FINALE: Ho risolto questo per conto mio. Ho messo il min / max verifica al di fuori del ciclo WHILE maestro, questo ha permesso l'ingresso di 0 da inserire nella matrice.

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void){


    int numbers[N];
    int i = 0;
    int j;
        int input;
    int maxvalue =1;
    int minvalue = 1;
            printf("Enter the next array element>");

scanf("%d", &input);
minvalue = input;
maxvalue = input;



while (input != 0){
    numbers[i] = input;

    ++i;
                printf("Enter the next array element>");
    scanf("%d", &input);

if (input == 0){
numbers[i] = 0;
  ++i;

  }

}
for (j =0;j<i;j++){
 if (numbers[j] >= maxvalue){
                                maxvalue = numbers[j];
                            }
                            if(numbers[j] < minvalue){
                                minvalue = numbers[j];
                            }

}

printf("%d\t", maxvalue);
printf("%d\n", minvalue);

    }
È stato utile?

Soluzione

Prima di tutto, si sta assegnando input per il valore di ritorno di scanf(). Questo è il numero di elementi assegnati dalla chiamata, e dal momento che si dice l'ingresso sarà sempre corretta, questo valore sarà sempre 1.

In secondo luogo, si sta scrivendo oltre la fine della matrice numbers[] con la linea:

input = scanf("%d", &numbers[100]);

(si dovrebbe fare scanf("%d, &input) invece, e numbers[i] assegnare per inserire nel vostro ciclo.

Infine, non è necessario ricalcolare maxvalue e minvalue scorrendo numbers[] ogni iterazione del loop. Invece, basta confrontarle con input e assegnarli conseguenza.

Speriamo che questo ti mette sulla strada giusta.

Altri suggerimenti

Sembra che il problema centrale è che si confrontano ogni numero solo contro minvalue. Questo va bene per decidere se sostituire il minvalue corrente, ma ovviamente non ti dice nulla circa la relazione di ogni elemento a maxvalue.

Un altro problema: ha senso per inizializzare minvalue dal primo elemento, ma non se lo si fa nel ciclo. Quella appena invalida tutto il vostro lavoro prima.

È necessario fare lo stesso con l'inizializzazione maxvalue pure. Si dovrebbe inizializzare quel numero per il primo valore.

Si dovrebbe anche prendere una decisione circa il calcolo del minimo e massimo, come si accumulano i dati o in un passaggio attraverso i dati quando fatto. Quello che non si vuole fare, tuttavia, è un ciclo tra gli elementi del passato con ogni nuovo uno. Che dà il vostro programma quadratica tempo la complessità per nessun beneficio.

Infine, non tollerano scadente formattazione. Debug sempre coinvolge studiare il codice e si vuole che essere sempre perfettamente formattati sia per essere professionale circa le cose e anche per facilitare la lettura il proprio lavoro.

ti stai chiedendo due domande, circa la strategia per il min / max di calcolo e per il loop. Non farlo (a se stessi), ma risolvere un problema alla volta. Quindi, prima mettere qualcosa come

signed int input[] = { 8, -5 , /* some more values */ };
size_t const n = sizeof input/ sizeof input[0];

all'inizio e dimenticare i problemi scanf.

Quindi avvolgere la min rilevamento / max nell'istruzione ciclo appropriata.

Poi compilare il codice con avvisi su:. Es -Wall per gcc, ma questo potrebbe variare per il compilatore

La mia l'mi dice qualcosa:

  

Test-numbers.c: 21: avvertimento: 'maxvalue'   può essere utilizzato non inizializzati in questo   funzione di test-numbers.c: 22: avviso:   'Minvalue' può essere utilizzato non inizializzato   in questa funzione

Questo ti dice che si sta facendo qualcosa di molto sbagliato nel non considerando il punto di partenza del vostro algoritmo bene.

ho reindented il codice e un sacco di esso sostituito con `/ * ... PLACEHOLDER ... * /

#include <stdio.h>
#include <stdlib.h>
#define N  100
int main(void) {
    int numbers[N];
    int i = 0;
    int input;
    int maxvalue;
    int minvalue;

    printf("Enter the next array element>");
    scanf("%d", &input);

    while (input != 0) {
        numbers[i] = input;
        i++;

        if (input == 0) {
            /* ...PLACEHOLDER... */
        }
        printf("Enter the next array element, while loop>");
        scanf("%d", &input);
    }
    printf("%d\t", maxvalue);
    printf("%d", minvalue);
}

Speriamo che si può vedere cosa succede quando si immette 1, o 2, o 3 e quando si enetr 0.

Suggerimento:. I valori maxvalue e minvalue sono mai cambiato

Un altro suggerimento:? Quante volte la linea while() eseguire


Modifica con l'esempio run

Per questo esempio di esecuzione, il codice è sul lato sinistro, ciò che accade è sul lato sinistro

        printf("Enter the next array element>"); |
        scanf("%d", &input);                     | Enter 42
                                                 |
        while (input != 0) {                     | input is 42, so you do the loop
            numbers[i] = input;                  | numbers[0] = 42
            i++;                                 | i = 1
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 3
        }                                        | 
        while (input != 0) {                     | input is 3
            numbers[i] = input;                  | numbers[1] = 3
            i++;                                 | i = 2
                                                 |
            if (input == 0) {                    | input != 0; skip placeholder
                /* ...PLACEHOLDER... */          |
            }                                    |
            printf("Enter the next ...>");       |
            scanf("%d", &input);                 | enter 0
        }                                        | 
        while (input != 0) {                     | input is 0, skip while body
            /* ...PLACEHOLDER... */              |
        }                                        |
        printf("%d\t", maxvalue);                | maxvalue hasn't been initialized
        printf("%d", minvalue);                  | minvalue hasn't been changed
int cmp(const void *a,const void *b)
{
  return *(const int*)a-*(const int*)b;
}
...
qsort( numbers, 100, sizeof(numbers[0]), cmp );
printf("\nmin: %d\nmax: %d",numbers[0],numbers[99]);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top