programmation en cfouque/enseignement/ensta/cours/cours1.pdf · cours de programmation en c 3...

72
Cours de programmation en C Programmation en C Pierre-Alain FOUQUE Département d’Informatique École normale supérieure

Upload: others

Post on 27-Jul-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Programmation en C

Pierre-Alain FOUQUEDépartement d’Informatique

École normale supérieure

Page 2: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 2

Plan

1 - Le Langage C2 - Présentation d’un programme3 - Le typage des données4 - Les opérateurs conditionnels5 - Les boucles conditionnelles while

Page 3: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 3

Langage de programmation

Le processeur contrôle tout, mais il ne comprend que le langage machinesoit des séries de nombres qui désignent l’opération à effectuer

puis où l’effectuer spécifiques à chaque microprocesseur

⇒ Pas très facile à utiliser/pas portableLangage de programmation : interface homme-machine

Page 4: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 4

Langage C

• Structures de contrôle• Usage des pointeurs

pour adresser la mémoire• Récursivité• Typage des donnéesen se limitant à ce qui peut

être traduit efficacementen langage machine

Page 5: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 5

Un programme

• Programme = ensemble de modules inclusions (objets, données prédéfinis) types (nouveaux types d’objets) variables (« cases » mémoires à réserver) liste de fonctions

• Fonctions en-tête (vue de l’extérieur) mode opératoire : liste d’instructions

simples : terminées par « ; » composées : instructions simples entre « { … } »

Page 6: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

Page 7: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

inclusions

Page 8: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

inclusions

Page 9: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

fonction

inclusions

Page 10: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

fonction

inclusions

Page 11: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

fonction

inclusions

instruction

Page 12: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

#include <stdio.h>

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

fonction

inclusions

instruction

Page 13: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 6

Premier programme : « hello »

« main » : fonction principale seule fonction appelée lors du lancement du

programme⇒ distribue les tâches

#include <stdio.h>

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

fonction

inclusions

instruction

Page 14: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

#include <stdio.h>

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

Page 15: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

• Saisir le programmexemacs hello.c &

#include <stdio.h>

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

Page 16: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

• Saisir le programmexemacs hello.c &

• Compiler le programmegcc -Wall hello.c -o hello

#include <stdio.h>

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

Page 17: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

• Saisir le programmexemacs hello.c &

• Compiler le programmegcc -Wall hello.c -o hello

• Exécuterhello #include <stdio.h>

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

Page 18: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

• Saisir le programmexemacs hello.c &

• Compiler le programmegcc -Wall hello.c -o hello

• Exécuterhello #include <stdio.h>

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

Page 19: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 7

Mode d’emploi

• Saisir le programmexemacs hello.c &

• Compiler le programmegcc -Wall hello.c -o hello

• Exécuterhello #include <stdio.h>

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

Page 20: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 8

Erreurs classiques

Les erreurs les plus classiques sont :• faute dans le nom d’une fonction

⇒ le compilateur ne la reconnaît pas

• oubli de « ; » en fin d’instruction simple

• utilisation d’une variable non déclarée⇒ le compilateur ne sait pas si c’est un entier, un

réel ou une chaîne de caractères !

• pas de fonction « main »

Page 21: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 9

Fonction « main »

« main » : fonction principale fonction appelée lors du lancement

du programme aucune autre n’est exécutée

automatiquement⇒ indispensable

Page 22: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 10

Programme générique

/* Commentaires */

/* Directives pour le préprocesseur */#include <stdio.h>#define TAILLE 3#define SQ(x) x*x

/* Nouveaux types */typedef int[TAILLE] tableau;

/* Variables globales */int globale;

Page 23: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 10

Programme générique

Commentaires :à tout moment,entre /*…*/ /* Commentaires */

/* Directives pour le préprocesseur */#include <stdio.h>#define TAILLE 3#define SQ(x) x*x

/* Nouveaux types */typedef int[TAILLE] tableau;

/* Variables globales */int globale;

Page 24: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 10

Programme générique

Commentaires :à tout moment,entre /*…*/ /* Commentaires */

/* Directives pour le préprocesseur */#include <stdio.h>#define TAILLE 3#define SQ(x) x*x

/* Nouveaux types */typedef int[TAILLE] tableau;

/* Variables globales */int globale;

Préprocesseur :• inclusions• constantes• macros

Page 25: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 10

Programme générique

Commentaires :à tout moment,entre /*…*/

Types

/* Commentaires */

/* Directives pour le préprocesseur */#include <stdio.h>#define TAILLE 3#define SQ(x) x*x

/* Nouveaux types */typedef int[TAILLE] tableau;

/* Variables globales */int globale;

Préprocesseur :• inclusions• constantes• macros

Page 26: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 10

Programme générique

Commentaires :à tout moment,entre /*…*/

Types

Variables globales

/* Commentaires */

/* Directives pour le préprocesseur */#include <stdio.h>#define TAILLE 3#define SQ(x) x*x

/* Nouveaux types */typedef int[TAILLE] tableau;

/* Variables globales */int globale;

Préprocesseur :• inclusions• constantes• macros

Page 27: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 11

Macros

ATTENTION:• #define SQ(a) a*a

• Si on écrit SQ(a+b): on va obtenir a+b*a+b ≠(a+b)*(a+b)

⇒#define SQ(a) ((a)*(a))

#define MIN(a,b) ((a)<(b)?(a):(b))

Page 28: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

Page 29: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-tête

Page 30: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-tête

Page 31: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variables

Page 32: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variables

Page 33: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

Page 34: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

Page 35: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

En-tête

Page 36: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

En-tête

Page 37: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

En-têteDéclaration variables

Page 38: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

En-têteDéclaration variables

Page 39: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 12

Programme générique (suite) fonctions

int addition(int x, int y){ int z; z = x + y; return z;}

int main(){ int a,b,c; a = 3; b = 5; c = addition(a,b); printf(“%d+%d=%d\n”,a,b,c); return 0;}

En-têteDéclaration variablesInstruction simple

En-têteDéclaration variables

Instructions simples

Page 40: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 13

Mémoire

La mémoire stocke indifféremment• le programme à exécuter

(série de codes en langage machine adressés au processeur)

• les variables manipulées par le programme

⇒ stockage par octets ou mots (blocs de 8 bits ou 32 bits)

Page 41: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 14

Typage

Mais que code 01010111 ?• L’entier 87 (= 64+16+4+2+1)• Le flottant 0,00390625 (= 2.2-9)• Le caractère ‘X’• Une instruction en langage machine• …⇒ il faut associer un type à chaque

valeurLe typage définit le codage

Page 42: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 15

Entiers : short, int,long et long long

En pratique, selon les types et machines, les entiers sont codés sur 8, 16, 32 ou 64 bits : (GCC sous Linux)

• short (16 bits) → +/- 32767• int/long (32 bits) → ~ +/- 2.109

• long long (64 bits) → ~ +/- 9.1018

Le qualitatif unsigned préciseque les entiers seront positifs⇒ plus besoin du bit de signe

Page 43: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 16

Flottants : float,double et long double

• float (24 + 8 bits) Précision 2-23 Min 10-38 Max 3.1038

• double (53 + 11 bits) Précision 2-53 Min 2.10-308 Max 10308

• long double (64 + 16 bits) Précision 2-64 Min 10-4931 Max 104932

de -8388608 à 8388607 de -128 à 127mantisse exposant

Page 44: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 17

Déclaration et initialisation

Dans un programme ou une fonction,on peut déclarer des variables,puis (ou simultanément) les initialiser

Page 45: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 17

Déclaration et initialisation

Dans un programme ou une fonction,on peut déclarer des variables,puis (ou simultanément) les initialiser

#include <stdio.h>long a = 1034827498;float x = 1023.234;

int main(){ int b; double y; float z; b = 1234; y = 1.365; z=1.0/y; …

Page 46: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 17

Déclaration et initialisation

Dans un programme ou une fonction,on peut déclarer des variables,puis (ou simultanément) les initialiser

#include <stdio.h>long a = 1034827498;float x = 1023.234;

int main(){ int b; double y; float z; b = 1234; y = 1.365; z=1.0/y; …

Lors de la déclaration,le contenu

de la variableest aléatoire !

Page 47: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 18

Opérateurs sur les nombres

Les entiers/flottants peuvent être manipulésgrâce aux opérateurs classiques suivants :

• a + b : addition• a - b : soustraction• a * b : multiplication• a / b : division (division euclidienne sur les entiers) (division flottante sur les réels)

• a % b : modulo sur les entiers (reste de la division euclidienne)

Page 48: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 19

Affichage des variables

printf affiche sur la sortie standard (écran)le contenu de variables :

%d pour un int ou long %f pour un float ou double

Page 49: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 19

Affichage des variables

printf affiche sur la sortie standard (écran)le contenu de variables :

%d pour un int ou long %f pour un float ou double

… printf(“a = %d et b = %d”,a,b); printf(“x = %f et y = %f”,x,y); return 0;}

Page 50: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 20

Chaînes de bits

• x & y = x AND y• x | y = x OR y• x ^ y = x XOR y

opère bit à bit.• x << 8 = décalage de 8 bits vers la gauche

(correspond à la multiplication par 2**8 modulo 2**32)

• x >> 5 = décalage de 5 bits vers la droite• ~x = complément à 1 de x

Page 51: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 21

Représentation dans d’autre

• Décimale: Exemple: 1234• Octale: Premier chiffre est un zéro.

Exemple: 0177• Hexadécimale: commence par 0x ou 0X. Ex: 0x1BF et 0XF2A

• Pour imprimer un entier sous forme hexadécimal

• int a; printf(“%x”,a);

Page 52: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

scanf

• fonctionne à l’inverse de la fonction printf

• entrer une valeur dans une variable• appeler scanf avec un format et une

variable avec modification de la variable

• int a;• printf(“Entrer une valeur: ”);• scanf(“%d”,&a);

22

Page 53: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Exécution conditionnelleEn fonction du résultat d’un test, on peut

souhaiter exécuter une instruction, ou pas :

Page 54: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Exécution conditionnelleEn fonction du résultat d’un test, on peut

souhaiter exécuter une instruction, ou pas :

if (a > 0) printf(“Positif \n”);

Page 55: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Exécution conditionnelleEn fonction du résultat d’un test, on peut

souhaiter exécuter une instruction, ou pas :

if (a > 0) printf(“Positif \n”);

Une alternative:

Page 56: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Exécution conditionnelleEn fonction du résultat d’un test, on peut

souhaiter exécuter une instruction, ou pas :

if (a > 0) printf(“Positif \n”);

Une alternative:if (a > 0) printf(“Positif \n”);else printf(“Négatif ou nul\n”);

Page 57: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Un test ?

Le résultat d’un test est un entier :nul = fauxnon nul = vrai

Opérateurs de test• a==b : test d’égalité• a!=b : test de différence• a<b ou a>b : comparaison stricte• a<=b ou a>=b : comparaison large

Page 58: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Combinaison de tests

Il est possible de combiner (négation, conjonction, disjonction, etc) des tests

• (!(<test>)) : négation de <test>• ((<test1>) && (<test2>)) :

conjonction (<test1> ET <test2>)• ((<test1>) || (<test2>)) :

disjonction (<test1> OU <test2>)

Page 59: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Remarques sur les tests

• Ne pas hésiter à mettre des parenthèses• Aucun ordre n’est respecté à l’exécution

il faut donc veiller à ce que tous les testset sous-tests puissent être effectuéssans faire « planter » le programme !

• Une seule instruction est permise après le if ou le elsesi plusieurs instructions sont conditionnées

par le résultat du test⇒ instructions composées « {…} »

Page 60: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Boucles conditionnelles

En C, il est possible de faire répéterune instruction un grand nombrede fois :boucles

• nombre d’itérations fixé : for (cf. cours suivant)

• nombre d’itérations dépendant d’un test : while et do … while

Page 61: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,tant qu’un test est satisfait :

<test>

<instruction>

oui

non

Boucle while

Page 62: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,tant qu’un test est satisfait :

while <test> <test>

<instruction>

oui

non

Boucle while

Page 63: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,tant qu’un test est satisfait :

while <test> <instruction>

<test>

<instruction>

oui

non

Boucle while

Page 64: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,tant qu’un test est satisfait :

while <test> <instruction>

<test>

<instruction>

oui

non

⇒ l’instruction peut ne jamais être exécutée

Boucle while

Page 65: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

Boucle do … while

Page 66: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

do

Boucle do … while

Page 67: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

do <instruction>

Boucle do … while

Page 68: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

do <instruction>while <test>

Boucle do … while

Page 69: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

do <instruction>while <test>

<test>

<instruction>

oui

non

Boucle do … while

Page 70: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Une instruction est exécutée,puis répétée tant qu’un test est satisfait :

do <instruction>while <test>

⇒ l’instruction est toujours exécutée au

moins une fois<test>

<instruction>

oui

non

Boucle do … while

Page 71: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C

Remarques sur les boucles

• Une seule instruction est permisedans la boucle while <test> <instruction>

do <instruction> while <test>;

si plusieurs instructions doivent être répétées⇒ instructions composées « {…} »

• L’indentation aide à repérer ce qui est répété (avec l’aide d’emacs également)

Page 72: Programmation en Cfouque/enseignement/ensta/Cours/cours1.pdf · Cours de programmation en C 3 Langage de programmation Le processeur contrôle tout, mais il ne comprend que le langage

Cours de programmation en C 31

Ouvrages de référence

• Kernigham & Ritchie : Le langage C• Bracquelaire: Méthodologie de la

programmation en C

• Sedgewick : Algorithmes en C• Cormen, Leicerson, Rivest, Stein :

Introduction à l’algorithmique• Knuth : The Art of Computer Programming