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)
.
- Identifiez les étapes du programme
- Dessinez l'organigramme d'un tel programme
- 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.
- Donnez les étapes du programme
- Dessinez l'organigramme d'un tel programme
- 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".
- Quelles sont les tapes du programme?
- Dessinez l'organigramme d'un tel programme
- 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.
- Identifiez les étapes du programme
- Dessinez l'organigramme d'un tel programme
- 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.
- Identifiez les étapes du programme
- Dessinez l'organigramme d'un tel programme
- 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%)
- Identifiez les étapes du programme
- Dessinez l'organigramme d'un tel programme
- 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.
- Dessinez l'algorithme d'un tel programme
- 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?
- Dessinez l'algorithme d'un tel programme
- 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