0
votes

E Exercice linguistique

Voici mon autre question. Je ne comprends pas ces morceaux de code. La sortie du code fourni est la suivante: xxx pré>

Mes questions sont les suivantes: p>

  1. a [i]> a [i + 1] code> Ce sont des personnages, pas des chiffres. Pourquoi devrions-nous comparer deux personnages? Cela n'a pas de sens. ou devrais-je m'attendre à ce qu'ils produisent une valeur booléenne? LI>
  2. printf ("% c \ n", [i] + 2); code> -> a [i] + 2 code> Il semble que quelque chose se passe avec des ordres d'éléments de tableau un par un. Comment et pourquoi? Je comprends que la sortie devrait être de 7 lignes de caractères uniques. Li> OL>
    #include <stdio.h>
    int main (void)
    {
      char a[] = { 'w', 's', 'x', 'a', 'P', 'L', 'M' };
      int i, tmp, flag;
      do
        {
          flag = 0;
          for (i = 0; i < 7; i++)
        {
          if (a[i] > a[i + 1])
            {
              tmp = a[i];
              a[i] = a[i + 1];
              a[i + 1] = tmp;
              flag = 1;
            }
        }
        }
      while (flag == 1);
      for (i = 0; i < 7; i++)
        printf ("%c\n", a[i] + 2);
      printf ("\n");
      return 0;
    }
    


13 commentaires

Le code lit la fin de la mémoire tampon lorsque i est 6 dans la première boucle.


@Turuudo où avez-vous trouvé ce mauvais code? Ne faites pas glisser les ordures ici


Plutôt que de déterminer ce code, vous feriez mieux de lire une introduction à la programmation C.


"Pourquoi devrions-nous comparer deux personnages? Cela n'a pas de sens" - pourquoi pas? Avez-vous jamais cherché un mot dans un dictionnaire ou un nom dans un répertoire?


Pourriez-vous le décrire en détail, s'il vous plaît?


@Turuudo, les caractères sont codés dans des valeurs 8 bits, par ex. a est 65, b est 66 (pour ASCII), etc., ils peuvent être comparés comme s'ils étaient int , réellement en C Ils sont int .


@Vladfrommoscow C'est mon article d'examen passé que je ne pouvais pas comprendre.


@Turuudo Au début, le code tente de trier la matrice de caractères à l'aide de la méthode de tri de bulles, puis de générer ses éléments avec le décalage 2 par rapport aux caractères donnés.


@ Storyteller-Normlandermonica. Parfois, je me réfère directement aux personnes plutôt que des livres ou des dictionnaires.


@Anastaciu merci


@Turuudo, de votre choix, notez également que a [i] = A [i + 1]; sortira des limites du tableau.


@Turuudo au fait, êtes-vous d'Inde?


@Vladfrommoscow non, vous êtes de la Russie


4 Réponses :


1
votes
  1. Les caractères sont représentés par les codes ASCII, de sorte qu'ils sont des chiffres. Découvrez la table ASCII.
  2. A [i] + 2 n'affecte pas la commande. Cela affecte le personnage. Encore une fois, regardez la table ASCII.

0 commentaires

2
votes

Fondamentalement, lorsque vous stockez des caractères, il stocke leur ASCII pour chaque personnage. Si essentiellement, lorsque vous comparez un [i] et A [i + 1], cela compare simplement les valeurs ASCII pour les caractères (qui est une valeur numérique inférieure à 128). La même chose arrive lorsque vous faites un [i] + 2. Cela ajoute simplement 2 à la valeur ASCII et imprime ce caractère avec cette valeur ASCII. Puisque votre programme semble trier la gamme de caractères, le premier personnage sera «L» (capitale L). Il ajoute le +2 à cela et donc cela devient 'n'.


0 commentaires

1
votes

Chaque caractère a une valeur numérique. Vous pouvez lire à ce sujet ici: https://fr.wikipedia.org/wiki/ascii Ou de voir la table qui relie chaque caractère à sa valeur numérique, vous pouvez utiliser le lien suivant: http: // www. ascitable.com/ .

Passez une bonne journée !!!


0 commentaires

0
votes

Le type Char code> est un type d'entier. Les caractères ont un codage numérique associé, et c'est ce qui est comparé. En ASCII, ce codage est

'A' == 65
'B' == 66
'C' == 67


0 commentaires