Annonce

Réduire
Aucune annonce.

Cours langage C n°1 - Les variables

Réduire
Ceci est une discussion importante.
X
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Cours langage C n°1 - Les variables

    LES VARIABLES

    Qu'est-ce qu'une variable ?

    Une variable est un nom permettant de repérer un emplacement mémoire. On pourra là modifier et là faire évoluer au cours du programme.

    Bonnes pratiques sur le nom de variable

    Imaginons que vous deviez calculer la moyenne d'un groupe de notes, il est évident qu'on préférera appelée cette variable moyenne, plutôt que x, dans le sens où l'on comprend facilement que représente cette variable en mémoire.

    Donc faîtes toujours très attention à bien choisir le nom de vos variables (sans fautes d'orthographe c'est mieux ) et cela sous forme de nom (pas de verbes, articles définis, pronoms, etc.)

    Déclarer une variable

    En C, avec une grande rigueur et beaucoup de réflexions pour résoudre son problème, on doit spécifier quel type de variable choisir.

    Par exemple, reprenons le cas de notre moyenne à calculer, il est évident qu'on choisira un nombre réel (flottant en informatique) plutôt qu'un entier naturel (entier en informatique), car on attend le résultat d'une division euclidienne.

    Pour déclarer notre variable moyenne on choisira donc d'utiliser le type flottant (float)

    Code:
    float moyenne;
    ou

    Code:
    double moyenne;
    La différence entre les deux se retrouvent dans la quantité de stockage. 32 bits pour les types float, 64 bits pour les types double.

    Ne cherchez pas à comprendre, dites vous simplement que la précision de la valeur trouvée (moyenne) sera plus précise avec le type double qu'avec le type float. On choisira donc l'un ou l'autre type selon la précision souhaitée.

    Voici un tableau des différents types en C

    int Entiers naturels
    float Nombres réels (précision 32 bits)
    double Nombres réels (précision 64 bits)
    char Caractère

    Affecter une variable

    Il y a deux possibilités:

    possibilité n°1

    Code:
    float moyenne; /* déclaration de la variable moyenne type float (nombre réel) */
    
    moyenne = 12.5; /* affectation de la valeur 12.5 à la variable moyenne */
    possibilité n°2

    Code:
    float moyenne = 12.5; /* déclaration et affectation de la variable moyenne type float */
    Remarques,

    On voit que les commentaires de mon code sont entre /* et */
    On voit que la fin des instructions sont représentées par un point virgule

    Ensuite si je dois faire un choix entre les deux possibilités, je choisis la n°1 sans hésiter, pourquoi ?

    En C, et surtout dans une norme très restrictive (C89, ma préférée pour sa rigueur), on déclare toujours les variables avant de les affecter, ça rend très lisible l'intention du codeur par le lecteur.

    Voici un exemple de code lisible

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        float notes[6]; /* déclaration tableau de 6 flottants */
        float somme; /* déclaration d'un flottant représentant la somme des notes */
        float moyenne; /* déclaration d'un flottant représentant la moyenne des notes */
    
        /* Affectation des notes dans notre tableau de flottants */
        notes[0] = 12.5;
        notes[1] = 6;
        notes[2] = 7.5;
        notes[3] = 16;
        notes[4] = 2.5;
        notes[5] = 8;
    
        somme = notes[0] + notes[1] + notes[2] + notes[3] + notes[4] + notes[5]; /* Affectation de la somme des notes dans la variable somme */
    
        moyenne = somme/6; /* Affectation dans moyenne du résultat somme/6 */
    
        printf("La moyenne vaut %f", moyenne); /* La moyenne vaut 8.75 */
    
        return 0;
    }
    Bien sûr il y a moyen de faire plus rapide, mais on verra cela plus tard

    Le fait de choisir la possibilité n°1, vous impose d'avoir une réflexion avant de coder, c'est très important de généraliser cette façon de faire, il faut toujours prévoir avant de coder. Souvent on voit codage et réflexion en même temps, par expérience, ça donne très rarement du bon.

    La possibilité n°2 mélange déclaration et affectation de variable, souvent les expérimentés l'utilisent, mais si vous lisez ce cours, c'est que vous ne l'êtes pas.

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        float notes[6] = {12.5, 6, 7.5, 16, 2.5, 8}; /* déclaration et affectation du tableau de 6 flottants */
        float somme; /* déclaration d'un flottant représentant la somme des notes */
        float moyenne; /* déclaration d'un flottant représentant la moyenne des notes */
    
        somme = notes[0] + notes[1] + notes[2] + notes[3] + notes[4] + notes[5]; /* Affectation de la somme des notes dans la variable somme */
    
        moyenne = somme/6; /* Affectation dans moyenne du résultat somme/6 */
    
        printf("La moyenne vaut %f", moyenne); /* La moyenne vaut 8.75 */
    
        return 0;
    }
    1. C'est plus court
    2. C'est plus pratique (la façon d'affecter des valeurs à un tableau est sympa, on l'utilisera plus tard)
    3. C'est moins lisible (non séparation déclaration + affectation)



    À vous de choisir, je conseille, vous, vous faites ce que vous voulez

    Échanger deux variables

    Pour échanger deux variables, rien de tel qu'une démonstration

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int a = 2;
        int b = 3;
    
        a, b = b, a; /* tentative d'échange entre variable a et variable b
    
        printf("valeur a=%d, valeur b=%d", a, b); /* Affichage du résultat */
    
        return 0;
    }
    On remarquera lors de la compilation, ces petites lignes

    left-hand operand of comma expression has no effect [-Wunused-value]

    En gros le compilateur nous explique que ce qu'on fait en C ne fonctionnera pas, et que nos valeurs ne peuvent être modifiées de cette façon.
    Lorsqu'on exécute le code, effectivement les valeurs restent inchangées

    valeur a=2, valeur b=3

    Ah ouais ! Je fais comment alors ? Eh bien j’essaie de trouver une astuce comme ajouter une variable par exemple.

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int a = 2;
        int b = 3;
        int c;
    
        c = a; /* affectation de la valeur a=2 dans c -> c = 2 */
        a = b; /* affectation de la valeur b=3 dans a -> a = 3 */
        b = c; /* affectation de la valeur c=2 dans b -> b = 2*/
    
        printf("valeur a=%d, valeur b=%d", a, b); /* affichage du résultat */
    
        return 0;
    }
    On remarque,

    Pas de messages d'erreur
    Que l'inversion c'est bien passée valeur a=3, valeur b=2

    EXERCICES

    Exercice n°1

    Donner les valeurs de a, b et c

    Code:
    a = 8;
    b = 2;
    c = a-b;
    c = b-a;
    Exercice n°2

    Donner les valeurs de a et b

    Code:
    a = 5;
    b = a - 8;
    a = a + 1;
    b = a - 4;
    Merci de m'avoir lu et à bientôt pour le prochain cours

  • #2
    Salut Alors déjà super merci ton cours est vraiment bien expliqué et simplifié.Je souhaiterais te poser une question :
    Pourquoi le fait d'affecter a=b et b=a ne fonctionne pas et l'on doit pour cela affecter une 3eme variable c afin de faire fonctionner ce transfert de variable.
    Personnellement cela fait partie des points que je n'ai pas compris en c.
    Ensuite voila pour l'exercice 1:

    #include <stdio.h>

    int main(void)
    {
    int a = 8; /* valeur de a */
    int b = 2; /* valeur de b */
    int c; /* declaration de l'entier c */


    c = a-b; /* 1ere operation a-b */

    printf("valeur a=%d, valeur b=%d, valeur c=%d", a, b, c); /* affichage du résultat */

    c = b-a; /* 2eme operation demandé */

    printf(" valeur c=%d", c); /* affichage du résultat supplèmentaire */
    return 0;
    }

    Alors cela fonctionne mais je pense qu'il y a mieux peut être.

    Ma 2eme façon

    #include <stdio.h>

    int main(void)
    {
    int a = 8; /* valeur de a */
    int b = 2; /* valeur de b */
    int c; /* declaration de l'entier c */


    c = a-b; /* 1ere operation a-b */
    c = b-a; /* 2eme operation */

    printf("valeur a=%d, valeur b=%d, valeur c=%d, valeur c=%d", a, b, a-b, b-a); /* affichage du résultat */

    return 0;
    }

    Qui est plus simple
    Dernière modification par DreAmuS, 27 juin 2014, 10h58.

    Commentaire


    • #3
      Pourquoi le fait d'affecter a=b et b=a ne fonctionne pas et l'on doit pour cela affecter une 3eme variable c afin de faire fonctionner ce transfert de variable.
      La réponse risque de te paraître évidente, réfléchissons par étape,

      a = b veut dire qu'on affecte la valeur de b à la variable a donc la nouvelle valeur de la variable a vaut 3 car b vaut 3 -> a = 3
      b = a veut dire qu'on affecte la valeur a à la variable b donc la nouvelle valeur de la variable b vaut 3 car a vaut 3 et plus 2 -> b = 3

      Donc l'échange souhaité n'a pas été effectué comme on l'aurait souhaité.

      Pour les exercices, j'ai demandé de créer un code ?

      Commentaire


      • #4
        Non je comprends pas tu veux juste que l'on t'énonce le résultat tel quel ? Excuse moi mais je comprends pas ce que tu demande je pensais que tu souhaiter que l'on fasse un code avec ses valeurs.
        J'avais même editer mon 1er postepour une 2eme proposition .
        Tu veux quoi exactement dans ces exercice ?

        Commentaire


        • #5
          Non je comprends pas tu veux juste que l'on t'énonce le résultat tel quel ?
          C'est exactement ça...

          Commentaire


          • #6
            Exercice 1 :

            a=8
            b=2
            c=a-b=6
            c=b-a=-6

            Exercice 2 :

            a=5
            b=a-8=-3
            a=a+1=6
            b=a-4=2

            Si il y avais eu des spoilers on aurais pu mieux cacher mes réponses.

            Oui autant pour moi en plus le code que j'ai fait me donner la réponse je n'ai pas fait attention en le refaisant que l'instruction d'avant avais changer la variable de a.
            Dernière modification par DreAmuS, 27 juin 2014, 11h51.

            Commentaire


            • #7
              Exercice 2, il y a une erreur... À toi de là trouver

              EDIT: Il y avait. Erreur corrigée
              Dernière modification par fred, 27 juin 2014, 11h53.

              Commentaire


              • #8
                Bonjour à tous et merci à Fred' pour ce cours, les exercices ^^' :


                Code:
                #include <stdio.h>
                #include <stdlib.h>
                
                int main(int argc, char *argv[])
                {
                
                // Exercice n°1
                
                    int a = 8;
                    int b = 2;
                    int c = 0;
                
                    printf("Les valeurs de A et B sont : %d et %d\n",a,b); // 8 et 2
                
                
                    c = a - b;
                
                    printf("la valeur de c est : %d\n",c); // 6
                
                    c = b - a;
                
                    printf("la valeur de c est : %d\n\n",c); // -6
                
                // Exercice n°2
                
                a = 5;
                
                b = a - 8;
                
                printf("La valeur de b est : %d\n",b); // -3
                
                a = a + 1;
                
                printf("La valeur de a est : %d\n",a); //6
                
                b = a -4;
                
                printf("La valeur de b est : %d\n",b); // 1
                
                return 0;
                
                }
                Dernière modification par shirocen, 22 août 2014, 18h36.
                deux et deux font cinq

                Commentaire


                • #9
                  Hello, et merci pour tes codes

                  Peux-tu comme dans l'édition de ton post ci-dessus, rééditer les codes suivants ? Merci par avance

                  Ensuite je ne demande pas réellement de codes, mais juste une réflexion théorique, donc selon vous quelles seront les valeurs à déduire du problème ?

                  Commentaire


                  • #10
                    Salut fred' et merci pour ta réponse .

                    Je ne trouvé pas les balises pour éditer mon code telle que tu l'as fait.

                    a,b et c pour l'exo n°1 et a,b pour le deuxième ? :S
                    deux et deux font cinq

                    Commentaire


                    • #11
                      a,b et c pour l'exo n°1 et a,b pour le deuxième ?
                      a, b et c sont des variables, non des valeurs

                      Je ne trouvé pas les balises pour éditer mon code telle que tu l'as fait.
                      En bas à droite, tu cliques sur Editeur avancé, puis une fois dans le mode avancé tu cliques sur le bouton #

                      Commentaire


                      • #12
                        ça va ça commence doucement

                        Exercice 1 :

                        a = 8 ; b = 2; c = -6;

                        Exercice 2 :

                        a = 6; b = 2;

                        Right or wrong ?
                        Dernière modification par Sadik, 24 janvier 2015, 14h20. Motif: Je croyais qu'on pouvait mettre des spoilers (a)
                        Mon blog : http://rootsheep.info

                        Commentaire


                        • #13
                          Superbe tutoriel fred j'avoue que coder de façon stricte c'est plus propre :')
                          Code:
                          #include <stdio.h>
                          
                          int main(void)
                          {
                              /* DECLARATION DE VARIABLE */
                              float note[6];
                              float somme;
                              float moyenne;
                              int a;
                              int b;
                              int c;
                              /* AFFECTATION DE VARIABLE */
                              note[0] = 10.5;
                              note[1] = 12.5;
                              note[2] = 13.5;
                              note[3] = 14.5;
                              note[4] = 15.5;
                              note[5] = 16.5;
                          
                              somme = note[0] + note[1] + note[2] + note[3] + note[4] + note[5];
                              moyenne = somme / 6.0;
                          
                              a = 10;
                              b = a*a;
                              c = a;
                          
                              puts("===LES VARIABLES===");
                          
                              /* Affiche le contenu de mes variable a et b */
                              printf("Le contenu de la variable \'a\' : %d\n", a);
                              printf("Le contenu de la variable \'b\' : %d\n", b);
                          
                              /* Effectue un échange entre le contenu de ma variable a et le contenu de ma variable b */
                              puts("Echange effectuer !");
                              a = b;
                              b = c;
                          
                              /* Affiche le contenu de mes variable a et b */
                              printf("Le contenu de la variable \'a\' : %d\n", a);
                              printf("Le contenu de la variable \'b\' : %d\n", b);
                          
                              puts("Moyenne effectuer !");
                              printf("La moyenne de vos note est %.2f\n", moyenne);
                              return 0;
                          }
                          /************************************************************************
                          *                      EXERCICE - VARIABLES
                          *************************************************************************/
                          
                          /*
                          Exercice n°1
                          
                          Donner les valeurs de a, b et c
                          
                          Code:
                          a = 8;
                          b = 2;
                          c = a-b;
                          c = b-a;
                          
                          Reponsse :
                          Après l'execution du code on à => la variable a qui vaut 8, la variable b qui vaut 2, la variable c qui vaut -6
                          */
                          
                          /*
                          Exercice n°2
                          
                          Donner les valeurs de a et b
                          
                          Code:
                          a = 5;
                          b = a - 8;
                          a = a + 1;
                          b = a - 4;
                          
                          Reponsse :
                          Après l'execution du code on à => la variable a qui vaut 6, la variable b qui vaut 2
                          */
                          Dernière modification par Anonyme77, 11 août 2016, 19h09. Motif: Orthographe

                          Commentaire

                          Chargement...
                          X