Introduction au langage C : la programmation structurée

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

1. La programmation non structurée

BSIO1 - SI4 Les bases de la programmation

Historiquement, les lignes de programmation portaient des numéros. Et ces lignes étaient exécutées par la machine dans l’ordre de ces numéros.

Ce type de langages se présente comme une suite de branchements emmêlés les uns dans les autres.

D’une part, on ne peut pas dire que cela favorise la lisibilité du programme.

D’autre part, c’est une source importante d’erreurs.

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

2. La programmation structurée

A l’inverse, la programmation structurée, surtout si l’on prend soin de rationaliser la présentation en mettant des lignes de commentaires et en pratiquant l’indentation, évite des erreurs, et révèle sa structure logique de manière très claire.

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

2.1 - Structures de stockage

  • les variables

  • les tableaux

  • les types personnalisés

  • les fichiers

BSIO1 - SI4 Les bases de la programmation

2. La programmation structurée

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

2.2 - Structures de contrôle

  • structure conditionnelle
  • structure alternative
  • structure de choix multiples
  • structure répétitive
  • structure itérative

BSIO1 - SI4 Les bases de la programmation

2. La programmation structurée

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

2.3 - Structure du code source en C

Le code d'un programme C est toujours contenu dans un ou plusieurs fichier(s) source(s) dont l'extension est .c ou .cpp.

Le code est structuré en fonctions et en sous-fonctions.

 

Le point de départ d'un programme correspond à la fonction main(), qui en anglais veut dire "fonction principale".

 

Il est possible de réutiliser des fonctions déjà codées, dont le code est défini dans des fichiers d'en-tête (extension .h), bibliothèques ou librairies.

BSIO1 - SI4 Les bases de la programmation

2. La programmation structurée

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

2.4 - Du code source à l'exécutable

BSIO1 - SI4 Les bases de la programmation

2. La programmation structurée

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

Exemple de code source en C

  • /* Voici un commentaire. */
  • // Ceci est un commentaire également, mais valable pour la ligne uniquement
  • L’unique fonction main() est toujours le point de départ d’un programme.
  • La valeur de retour est rendue au système d’exploitation. Par convention, 0 signifie succès.
  • Chaque instruction est terminée par un point-virgule.
  • Observez le bon style de codage (ici : pas plus d’une instruction sur une ligne ; indentation cohérente).

BSIO1 - SI4 Les bases de la programmation

#include <stdio.h>

/* This program displays the string "Hello World!" */

int main() 
{
    printf("Hello World!\n");
    return 0;
}

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

3. La syntaxe en C

Un programme en C se compose de divers jetons et un jeton est soit un mot-clé, un identifiant, une constante, une chaîne de caractères, ou un symbole.

Par exemple, la déclaration de C suivant se compose de 5 jetons:

BSIO1 - SI4 Les bases de la programmation

    printf("Hello World!\n");

Un identifiant est un nom utilisé pour identifier une variable, une fonction ou un objet défini par l'utilisateur:

  • Un identifiant commence soit par une lettre (A à Z) ou (a à z) ou soit un trait de soulignement _ suivi de zéro ou plusieurs lettres, zéro ou plusieurs soulignements, et de chiffres (0 à 9).
  • C ne permet pas les signes de ponctuation tels que @, $, et % dans les identifiants.
  • C est un langage de programmation sensible à la casse. Ainsi, Toto et toto sont deux identifiants différents en C.

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

4. Structure de stockage

Une variable est une boîte stockée en mémoire dans le contexte du programme dont les caractéristiques sont :

  • un contenu (valeur)
  • un contenant (nom de la variable)
  • un type

En langage C, une variable doit avoir été déclarée avant de pouvoir être utilisée. La déclaration se fait par convention en début de programme, en donnant au compilateur le nom et le type de la variable.

Il est préférable de toujours initialiser une variable en lui donnant une valeur au moment où elle est déclarée.

BSIO1 - SI4 Les bases de la programmation

4.1 - Les variables en langage C

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

La syntaxe à respecter pour déclarer une variable en C est :

type _identifiant = valeur_initiale;

BSIO1 - SI4 Les bases de la programmation

int i, j, k;       // déclaration de 3 variables de type entier
int a = 3;        // déclaration de 1 variable entier de valeur initiale 3
char c, ch;       // déclaration de 2 variables de type caractère (8 octets)
float f, salary;  // déclaration de 2 variables de type décimal de précision simple (6 décimaux)
double d;         // déclaration de 1 variable de type double précision (10 décimaux)

Les types de base en C sont les suivants:

4. Structure de stockage

4.2 - La déclaration et l'initialisation

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

Caractéristiques des types entiers de C :

BSIO1 - SI4 Les bases de la programmation

mot clé description  valeur min  valeur max  nombre d'octets
char  caractère  -128 127 1
short  entier court  - 32768  32767  2
int entier standard -32768 32767 2
long  entier long -2147483648 2147483647 4

Et les types de rationnels, encore appelés nombres flottants :

mot clé précision mantisse valeur min valeur max  nombre d'octets
float simple 6 3.4 * 10^-38 3.4 * 10^38 4
double double 15 1.7 * 10^-308 1.7 * 10^308 8
long double supplémentaire 19 3.4 * 10^-4932 3.4 * 10^4932 10

En langage C, tout nombre rationnel est représenté sous la forme  

<+|-> <mantisse> * 10<exposant> 

 où la mantisse est un décimal positif avec un seul chiffre devant la virgule.

4. Structure de stockage

4.3 - Les types de variables numériques en langage C

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

Traduisez les déclarations suivantes en langage C, sachant que vous travaillerez dans les ensembles de nombres indiqués entre accolades { }.

 

Choisissez les types les

plus économiques,

sans perdre en

précision.

BSIO1 - SI4 Les bases de la programmation

4. Structure de stockage

Exercices d'application

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

5. La sortie standard

printf() est la fonction permettant d'écrire sur le flux de sortie standard (la console).

Elle est incluse dans la bibliothèque stdio.h

BSIO1 - SI4 Les bases de la programmation

#include <stdio.h>

int main() 
{
    int a = 5;
    int b = 7;
    
    printf("Addition de a et de b, resultat dans c\n");
    
    int c = a + b;
    
    printf("%d + %d = %d\n", a, b, c);
    
    return 0;
}

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

6. L'entrée standard

scanf() est plus ou moins l’inverse de printf(). Elle permet de récupérer le contenu du flux d'entrée standard (le clavier).

 

On l’utilise parce que c’est simple, mais la gestion d’erreurs est difficile.


Il faut lui donner l’adresse

de chaque élément lu.

BSIO1 - SI4 Les bases de la programmation

#include <stdio.h>

int main() 
{
    int a, b, c;

    printf("Enter the first value: ");
    scanf("%d", &a);

    printf("Enter the second value: ");
    scanf("%d", &b);

    c = a + b;

    printf("%d + %d = %d\n", a, b, c);
    return 0;
}

BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot

7.1 La structure conditionnelle

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

7.1 La structure conditionnelle

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

7.1 La structure conditionnelle

BSIO1 - SI4 Les bases de la programmation

if(expression_booléenne) 
{ 
    /* 
        instruction(s) à exécuter 
        si l'expression booléenne est vraie 
    */ 
}
#include <stdio.h> 

int main () 
{ 
    int a = 10;

    if( a < 20 ) 
    { 
        /* si la condition est vraie */ 
        printf("a est plus petit que 20\n" ); 
    } 
    
    printf("la valeur de a est : %d\n", a); 
    return 0; 
}

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

7.2 La structure alternative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

7.2 La structure alternative

BSIO1 - SI4 Les bases de la programmation

if(boolean_expression) 
{ 
    /* instruction(s) à exécuter si l'expression booléenne est vraie */ 
} 
else 
{ 
    /* instruction(s) à exécuter si l'expression booléenne est fausse */ 
}
#include <stdio.h> 

int main () 
{ 
    int a = 100; 
    
    if( a < 20 ) 
    { 
        /* si la condition est vraie */ 
        printf("a est plus petit que 20\n" ); 
    } 
    else 
    {   
        /* si la condition est fausse */ 
        printf("a n'est pas plus petit que 20\n" ); 
    }
    printf("la valeur de a est : %d\n", a); 
    return 0; 
}

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

7.2 La structure alternative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

Exercice

Ecrivez un programme qui lit trois valeurs entières (A, B et C) saisies au clavier par ordre aléatoire. Le programme devra afficher les 3 valeurs par ordre croissant :

(valeur 1) < (valeur 2) < (valeur 3)

.

  1. Identifiez les étapes du programme
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code d'un tel programme

8. La structure à choix multiples

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

8. La structure à choix multiples

BSIO1 - SI4 Les bases de la programmation

switch(expression)
{ 
    case expression-constante1 : 
    instruction(s); 
    break; /* facultatif */ 
    
    case expression-constante2 : 
    instruction(s); 
    break; /* facultatif */ 

    /* vous pouvez ajouter autant de cas que nécessaire */ 

    default : /* facultatif */ instruction(s); 
}
#include <stdio.h> 

int main () 
{ 
    char note = 'B'; 
    switch(note) 
    { 
        case 'A' :
            printf("Excellent!\n" ); 
            break; 
        case 'B' : 
            printf("Très bien!\n" ); 
            break; 
        case 'C' : 
            printf("Moyen\n" ); 
            break; 
        case 'D' : 
            printf("Vous avez réussi\n" ); 
            break; 
        case 'F' : 
            printf("Examen échoué\n" ); 
            break; 
        default : 
            printf("Note non valide\n" ); 
    } 
    printf("Votre note est %c\n", note ); 
    return 0; 
}

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

8. La structure à choix multiples

BSIO1 - SI4 Les bases de la programmation

Exercice

Nous souhaitons mettre au point un programme qui détermine si un caractère saisi par l'utilisateur est une voyelle ou une consonne.

 

  1. Donnez les étapes du programme
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code C d'un tel programme

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

8. La structure à choix multiples

BSIO1 - SI4 Les bases de la programmation

Exercice

Nous souhaitons mettre au point un programme qui propose à l'utilisateur divers actions en fonction de l'entier qu'il aura saisi. 

Exemple : Pour une nouvelle partie, l'utilisateur doit rentrer "1"; pour reprendre une partie existante il faut taper "2"; pour consulter le tableau des scores il faut taper "3"; pour terminer le programme il faut taper "0".

 

  1. Quelles sont les tapes du programme?
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code en langage C

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

9. La structure répétitive

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

9. La structure répétitive

BSIO1 - SI4 Les bases de la programmation

while(condition) 
{ 
    instruction(s); 
}
#include <stdio.h> 
int main () 
{ 
    int a = 10; 
    /* boucle TANT QUE ... FAIRE */ 
    while( a < 20 ) 
    { 
        printf("valeur de a: %d\n", a); 
        a = a + 1; 
    } 
    return 0; 
}
do
{ 
    instruction(s); 
} 
while(condition);

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

9. La structure répétitive

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

Nous souhaitons mettre au point un programme qui calcule le cube du nombre qu'on lui fournit par saisie au clavier.

Après avoir calculé puis affiché le résultat, le programme attend le prochain nombre à calculer.

Le programme s'arrête lorsque l'utilisateur saisit le chiffre 0.
 

  1. Identifiez les étapes du programme
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code en langage C d'un tel programme

Exercice

9. La structure répétitive

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

Nous souhaitons améliorer le programme précédent qui calcule le cube des nombres qu'on lui fournit.

Nous souhaitons désormais que lorsque le programme s'arrête, il affiche le nombre total de cubes qui ont été calculés.
 

  1. Identifiez les étapes du programme
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code en langage C d'un tel programme

Exercice

9. La structure répétitive

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot

Nous souhaitons améliorer d'avantage le programme précédent afin qu'il affiche le pourcentage de cubes négatifs qui ont été calculés.

Par exemple, en fin de programme on obtient le message :

Vous avez tapé 0, le programme se termine.

Sur 12 calculs de cube, 2 étaient négatifs (16%)
 

  1. Identifiez les étapes du programme
  2. Dessinez l'organigramme d'un tel programme
  3. Donnez le code en langage C d'un tel programme

Exercice

La  structure itérative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

La  structure itérative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

for ( initialisation; condition; incrémentation ) 
{
    /* instruction(s) à réaliser : FACULTATIF */
}
#include <stdio.h> 

int main ()
{ 
    int a = 0;

    /* boucle POUR */ 
    for( a = 10; a < 20; a = a + 1 ) 
    { 
        printf("la valeur de a est: %d\n", a); 
    } 

    return 0; 
}

La  structure itérative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Exercice

Nous souhaitons mettre au point un programme qui trouve le plus petit parmi une liste de 100 nombres saisis par l’utilisateur.

 

  1. Dessinez l'algorithme d'un tel programme
  2. Donnez le code C d'un tel programme

La  structure itérative

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Exercice

Nous souhaitons mettre au point un programme qui affiche la table de multiplication d'un entier quelconque. L'utilisateur doit indiquer la borne supérieure de la table à afficher (comprise entre 10 et 50).

Par exemple, l'utilisateur souhaite-t-il que la table s'affiche jusqu'à 10? 20?
 

  1. Dessinez l'algorithme d'un tel programme
  2. Donnez le code C d'un tel programme

Les tableaux

Un tableau est une variable de 1 à N dimensions

Tableau = structure de données du même type

Il est toujours nécessaire de préciser la dimension du tableau

Comme les variables, on initialisera les tableaux

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Les tableaux

Un tableau se déclare et se manipule ainsi

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

int tab[7];
tab[0] = 45;
tab[1] = 154;
tab[2] = 58;
tab[3] = 78;
tab[4] = 31;
tab[5] = 5;
tab[6] = 74;

tab[7] = 58;     // légal, mais bug!
tab[−1] = 1;    // légal, mais bug!

int DERNIERS_JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int size = 9;
float b[size];

long A[25]; 
float B[100]; 
double B[100]; 
char D[30]; 

Les tableaux

Une autre façon d'initialiser un tableau

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

char tab_mois[12];

tab_mois[0] = "Janvier";
tab_mois[1] = "Février";
tab_mois[2] = "Mars";
tab_mois[3] = "Avril";
tab_mois[4] = "Mai";
tab_mois[5] = "Juin";
tab_mois[6] = "Juillet";
tab_mois[7] = "Août";
tab_mois[8] = "Septembre";
tab_mois[9] = "Octobre";
tab_mois[10] = "Novembre";
tab_mois[11] = "Décembre";

tab_mois = {"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août",
    "Septembre","Octobre","Novembre","Décembre"};
0 "Janvier"
1 "Février"
2 "Mars"
3 "Avril"
4 "Mai"
5 "Juin"
6 "Juillet"
7 "Août"
8 "Septembre"
9 "Octobre"
10 "Novembre"
11 "Décembre"

Les tableaux

En C, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse.

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

 short A[5] = {1200, 2300, 3400, 4500, 5600};

Les tableaux

Voici en exemple le code du programme en langage C dont le but est de remplir un tableau de valeurs lues au clavier : 

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

#include <stdio.h>

int main()
{
 int A[5];
 int I;  /* Compteur */
 for (I=0; I<5; I++)
     scanf("%d", &A[I]);
 return 0;
}

Les tableaux - Exercices

1. Ecrire un programme qui lit la dimension N d'un tableau TAB du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.

Calculer et afficher ensuite la somme et la moyenne des éléments du tableau.

 

2. Ecrire un programme qui lit la dimension N d'un tableau TAB du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.

Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.

 

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Les fichiers

Fichier = plage de données structurées

Un fichier peut être stocké sur disque dur ou chargé en mémoire RAM. Il faut toujours charger un fichier en RAM pour le manipuler.

Il existe plusieurs modes d'accès au fichier (direct, séquentiel, indexé, ...)

  • OUVRIR (canal)
  • LIRE (enregistrement, canal)
  • ECRIRE (enregistrement, canal)
  • FERMER (canal)

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Les types structurés

Il est possible de créer ses propres types de données : 

  • Type = structure hétérogène
  • Doit être instancié pour être utilisé
  • Sont la base des fichiers
  • Une approche objet...

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Les types structurés

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

struct [identifiant] 
{ 
    /* Déclaration des membres */
    type id_membre1; 
    type id_membre2;
    type id_membreN; 
} [déclaration de une ou plusieurs variable(s)];
#include <stdio.h> 
#include <string.h>

int main( ) 
{
    struct Livres 
    {
        char titre[50]; 
        char auteur[50]; 
        char sujet[100]; 
        int book_id; 
    } livre1;

    strcpy( livre1.titre, "C Programming"); 
    strcpy( livre1.auteur, "Nuha Ali"); 
    strcpy( livre1.sujet, "Tutoriel de programmation en C"); 
    livre1.book_id = 6495407; 
    
    /* print Book1 info */ 
    printf( "Le titre est : %s\n", livre1.titre); 
    printf( "L'auteur est : %s\n", livre1.auteur); 
    printf( "Le sujet est : %s\n", livre1.sujet); 
    printf( "L'ident. est : %d\n", livre1.book_id); 
    
    return 0; 
    }

BSIO1 : SI4 - c2. Le langage C

By Axel FELIOT

BSIO1 : SI4 - c2. Le langage C

Présentation du langage C

  • 3,670