Question

Je dois trouver un moyen d'afficher le nombre maximum et minium dans un tableau, la taille du tableau est 100 et ne dépassera pas cela et il n'y a pas besoin de validation d'entrée. Le programme continuera à demander l'entrée jusqu'à ce que 0 est rencontrée et aussi vous ajoute au tableau.

J'ai tout compris, sauf comment garder une trace qui est la plus grande et la plus petite valeur. Je vous en serais reconnaissant si quelqu'un peut résoudre mon code ou montrer problème me.Another je vais avoir est d'obtenir la boucle et mettre fin à faire le calcul max / min dans le while lorsque l'entrée est égale à 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: Je pris tous vos suggestions et édité mon code. Ceci est mon code ci-dessous. Cependant, il est sortie isnt ce que je me attends.

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

Ceci est la sortie, je suis en train! Quelqu'un peut-il résoudre ce pour moi.

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

FINAL EDIT: Je résolurent ce seul. Je pose la vérification de min / max en dehors de la boucle principale WHILE, ce qui a permis l'entrée de 0 à inscrire dans le tableau.

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

    }
Était-ce utile?

La solution

Tout d'abord, vous affectez input à la valeur de retour de scanf(). Ceci est le nombre d'éléments affectés par l'appel, et puisque vous dites que l'entrée sera toujours correcte, cette valeur sera toujours 1.

En second lieu, vous écrivez après la fin du tableau de numbers[] avec la ligne:

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

(vous devriez faire à la place scanf("%d, &input) et assign numbers[i] à l'entrée dans la boucle.

Enfin, vous n'avez pas besoin de recalcul maxvalue et minvalue par itérer numbers[] chaque itération de la boucle. Au lieu de cela, il suffit de les comparer à input et les affecter en conséquence.

Espérons que cela vous met sur la bonne voie.

Autres conseils

Il semble que votre problème central est que vous comparez chaque numéro que contre minvalue. C'est très bien pour décider de remplacer le minvalue actuel, mais de toute évidence, il ne vous dit rien au sujet de la relation de chaque élément maxvalue.

Un autre problème: il est logique de minvalue initialiser à partir du premier élément, mais pas si vous le faites dans la boucle. Cela seulement Invalide votre travail avant.

Vous devez faire la même chose avec l'initialisation maxvalue ainsi. Vous devez initialiser ce nombre à la première valeur.

Vous devriez également prendre une décision sur le calcul du minimum et maximum que vous accumulez les données ou dans un passage à travers les données lorsque vous avez terminé. Ce que vous ne voulez pas faire, cependant, est en boucle à travers des éléments passés avec chaque nouveau. Cela donne la complexité de votre temps quadratique programme sans bénéfice.

Enfin, ne tolère pas le formatage minables. Débogage implique toujours étudier le code et vous voulez qu'il soit parfaitement formaté toujours à la fois d'être professionnel sur les choses et aussi pour faciliter la lecture de votre propre travail.

Vous posez deux questions, au sujet de la stratégie pour le calcul min / max et pour la boucle. Ne pas le faire (pour vous), mais résoudre un problème à la fois. Alors d'abord quelque chose comme mis

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

au début et à oublier vos problèmes de scanf.

Ensuite, enveloppez min / max détection dans l'instruction de boucle appropriée.

Ensuite, compiler votre code avec des avertissements sur:. -Wall pour gcc par exemple, mais cela peut varier pour votre compilateur

Mine me dit quelque chose:

  

test numbers.c: 21: avertissement: 'maxvalue'   peut être utilisé dans ce non initialisé   test de la fonction numbers.c: 22: Attention:   « Minvalue » peut être utilisé non initialisée   dans cette fonction

Cela vous dit que vous faites quelque chose de très mal en ne considérant pas le point de départ de votre algorithme bien.

J'ai reindented votre code et remplacé beaucoup de celui-ci avec `/ * ... 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);
}

Nous espérons que vous pouvez voir ce qui se passe lorsque vous entrez 1 ou 2, ou 3 et lorsque vous enetr 0.

Astuce:. Les valeurs de maxvalue et minvalue ne sont jamais modifiés

Une autre astuce: combien de fois la ligne de while() exécuter


Modifier par exemple run

Pour cette course exemple, le code est sur le côté gauche, ce qui se passe est sur le côté gauche

        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]);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top