0% ont trouvé ce document utile (0 vote)
5 vues76 pages

2 - CH II Programmation Impérative Avec C

Ce document présente un cours sur la programmation en C, abordant des objectifs généraux et spécifiques tels que la déclaration de variables, l'utilisation de pointeurs et les structures de contrôle. Il fournit également un historique du langage C, ses avantages, ainsi que les composants élémentaires et les structures algorithmiques. Enfin, il traite des pointeurs et de leur construction, ainsi que des instructions de branchement et des structures itératives.

Transféré par

leconcret
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues76 pages

2 - CH II Programmation Impérative Avec C

Ce document présente un cours sur la programmation en C, abordant des objectifs généraux et spécifiques tels que la déclaration de variables, l'utilisation de pointeurs et les structures de contrôle. Il fournit également un historique du langage C, ses avantages, ainsi que les composants élémentaires et les structures algorithmiques. Enfin, il traite des pointeurs et de leur construction, ainsi que des instructions de branchement et des structures itératives.

Transféré par

leconcret
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 76

Algorithmique

Chapitre 2: Programmation avec C

Dr. N’golo KONATE


[email protected]
Objectifs
Objectif général:
L’étudiant doit être en mesure d’écrire un code source en C et le
compiler
Objectifs
Objectif général:
L’étudiant doit être en mesure d’ecrire un code source en C et le
compiler

Objectifs spécifiques
Savoir déclarer et manipuler des variables
Objectifs
Objectif général:
L’étudiant doit être en mesure d’ecrire un code source en C et le
compiler

Objectifs spécifiques
Savoir déclarer et manipuler des variables
Utiliser des pointeurs
Objectifs
Objectif général:
L’étudiant doit être en mesure d’ecrire un code source en C et le
compiler

Objectifs spécifiques
Savoir déclarer et manipuler des variables
Utiliser des pointeurs
Savoir utiliser les structures de contrôles en C
Objectifs
Objectif général:
L’étudiant doit être en mesure d’ecrire un code source en C et le
compiler

Objectifs spécifiques
Savoir déclarer et manipuler des variables
Utiliser des pointeurs
Savoir utiliser les structures de contrôles en C
Comprendre le paradigme de la programmation structurée en définissant
des fonctions
Contenu du cours
1. Introduction
2. Bases du langage C
3. Les variables
4. Les structures algorithmiques
5. Les pointeurs
Introduction
Introduction
Historique

1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell


Labs,de conçoivent le langage C afin de développer un système
d’exploitation UNIX sur un DEC PDP-11.
Introduction
Historique

1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell


Labs,de conçoivent le langage C afin de développer un système
d’exploitation UNIX sur un DEC PDP-11.
1978, Brian Kernighan et Dennis Richie publient la dentition
classique du C dans le livre The C Programming language
Introduction
Historique

1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell


Labs,de conçoivent le langage C afin de développer un système
d’exploitation UNIX sur un DEC PDP-11.
1978, Brian Kernighan et Dennis Richie publient la dentition
classique du C dans le livre The C Programming language
1983, l’ANSI (American National Standards Institute) décida de
normaliser le langage ;
Introduction
Historique

1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell


Labs,de conçoivent le langage C afin de développer un système
d’exploitation UNIX sur un DEC PDP-11.
1978, Brian Kernighan et Dennis Richie publient la dentition
classique du C dans le livre The C Programming language
1983, l’ANSI (American National Standards Institute) décida de
normaliser le langage ;
ce travail s’acheva en 1989 par la definition de la norme ANSI
C.
Introduction
Avantage du C

C est un langage compilé (par opposition aux langages


interprété)
Il est classé dans les langages de bas niveau : c’est-à-dire
proche de la machine, donc plus facile à interpréter pour elle.
Langage de base de plusieurs autres langage dont le java, php…
Il offrent une marge de contrôle importante sur la machine
Il utilise peu de concepts de programmation ce qui le rend
simple à utiliser
Introduction
Les composants élémentaires du C

Les identificateurs: donner un nom a une entité du


programme.
un identificateur peut designer
- Un nom de variable ou de fonction,
- Un type défini par typedef, struct, union ou enum,
- Une étiquette.
Un identificateur est formé par des caractères alpha
numériques ou ‘_’
mais ne peut débuté par un chiffre
Introduction
Les composants élémentaires du C

Les identificateurs: donner un nom a une entité du


programme.
un identificateur peut designer
- Un nom de variable ou de fonction,
- Un type défini par typedef, struct, union ou enum,
- Une étiquette.
Un identificateur est formé par des caractères alpha
numériques ou ‘_’
mais ne peut débuté par un chiffre
Les mots-clefs: mots réservés pour le langage lui-même et ne
Introduction
Les composants élémentaires du C

Les commentaires: Un commentaire débute par /* et se


termine par */. Par exemple, /* Ceci est un commentaire */
Structure d’un programme C:
Un programme C se présente de la façon suivante :
[ directives au préprocesseur]
[ déclarations de variables externes]
[ fonctions secondaires]
main(){déclarations de variables internes;
instructions
}
Bases du langage C
Bases du language C
Bases du language C
Les
commentaire
s
Bases du language C
Les
commentaire
s

Librairie
Bases du language C
Les
commentaires

Librairie

Le point d’entrée
du programme
Bases du language C
Les
commentaires

Librairie

Le point d’entrée
du programme

Instructions
d’affichage
Bases du language C
Instructions de sortie: les formats
Bases du language C
Les fonctions d’entrees-sorties classiques printf

La fonction printf
est une fonction
d’impression
formatée, ce qui
signifie que les
données sont
converties selon le
format particulier
choisi. Sa syntaxe
est printf("chaine de
contrôle ",expression-
1, ..., expression-n);
Bases du language C
Les fonctions d’entrees-sorties classiques printf

La chaîne de contrôle
indique le format
dans lequel les
données lues sont
converties.
Bases du language C
Instructions d’entrée

La fonction scanf permet d’interagir avec l’utilisateur tout comme


la fonction printf
#include <stdio.h>
int main(void) {
int age;
printf("Quel âge avez-vous ? ");
scanf("%d", &age);
printf("Vous avez %d an(s)\n", age);
return 0; }
Bases du language C
Types de données: entiers
Bases du language C
Types de données: flottants
Bases du language C
Déclaration d’un type

La déclaration d’une variable se fait concomitamment au choix du


type:
Syntaxe: type_variable nom_var
Exemple: int nom_var (pour les entiers)
char x (pour les caractères)
Bases du language C
Les operateurs: affectation

Operateur a part entière symbolisée par le signe =.


variable = expression
Terme de gauche de l’affectation peut être une variable simple,
un ´élément de tableau mais pas une constante.
L’affectation effectue une conversion de type implicite : la valeur
de l’expression (terme de droite) est convertie dans le type du
terme de gauche.
Bases du language C
Les operateurs: arithmétique
Bases du language C
Les operateurs: arithmétique
Bases du language C
Les operateurs: rélationnels
Bases du language C
Les operateurs: Logiques
Bases du language C
Les operateurs: Incrémentations/decrementations

Prefix:
• ++x est un raccourcit x=x+1
• −−x est un raccourcit x=x−1
• y=++x est un raccourcit x=x+1 et y=x;. X est évalué avant
d’etre incrémenté.
• y=−−x est un raccourcit x=x−1;y=x;. x est evalue avant d’etre
incremente.
Bases du language C
Les operateurs: Incrémentations/decrementations

Suffixe
• x++ est un raccourcit x=x+1
• x-- est un raccourcit x=x−1
• y=x++ est un raccourcit x=x+1 et y=x;.
• y=x-- est un raccourcit x=x−1;y=x;.

Dans la notation suffixe la valeur retournée sera l’ancienne valeur


Bases du language C
Conditionnel Ternaire

L’operateur conditionnel ? est un operateur ternaire. Sa syntaxe


est la suivante :
condition ? expression-1 : expression-2
Cette expression est égale a expression-1 si condition est
satisfaite, et a expression-2 sinon.
m = ((a > b) ? a : b);
Bases du language C
conversion de type

L’operateur de conversion de type, appelé cast, permet de


modifier explicitement le type d’un objet. On écrit (type) objet
Par exemple,
main()
{
int i = 3, j = 2;
printf("%f \n",(float)i/j);
}
retourne la valeur 1.5.
Les structures algorithmiques
Les structures conditionnelles
Les conditionnelles simples

La forme basique est Exemple


if ( expression ) if ( x % 2)
Instruction y += x / 2 ;
Le dernier else étant
facultatif
Les structures conditionnelles
Les conditionnelles simples

if ( expression-1 ) if ( x % 2 == 0)
instruction-1 y += x / 2 ;
else else
y += ( x +1 )/ 2 ;
Les structures conditionnelles
Les conditionnelles simples : comparer deux nombres
Les structures conditionnelles
Les conditionnelles simples: comparer deux nombres

#include <stdio.h>
main() {
int A,B;
printf("Entrez deux nombres entiers :");
scanf("%i %i", &A, &B);
if (A > B)
printf("%i est plus grand que %i\n", A, B);
else if (A < B) printf("%i est plus petit que %i\n", A, B);
else printf("%i est égal à %i\n", A, B);
return 0; }
Les structures conditionnelles
Les conditionnelles multiples

switch ( expression ){
case constante-1:
liste d’instructions 1
break;
case constante-2:
liste d’instructions 2
Sa forme la plus
générale est celle-ci : break;
...
default:
liste d’instructions 8
break; }
Les structures conditionnelles
Les conditionnelles multiples: comparer deux nombres

#include <stdio.h> switch(k)


{
main() case 0 :
{ printf("%d\n",i/j);
int i,j,k; break;
printf("entrez deux case 1 :
nombres entiers \n"); printf("%f\n",(float)i/j);
scanf("%d break;
%d",&i,&j); default :
printf("entrez 0 pour printf("il faut entrer 0 ou 1\n");
avoir un quotient printf("relancez l'execution\
n");
entier\n"); }
printf("ou 1 pour }
Les structures itératives
La boucle while

i = 1;
while (i < 10)
{
printf("\n i = %d",i);
i++;
}
Les structures itératives
La boucle do…while

int a;
do{
printf("\n Entrez un entier entre 1 et 10 : ");
scanf("%d",&a);
}
while ((a <= 0) || (a > 10));
Les structures iterative
La boucle for

int main(){ int main(){


for (i = 0; i < 10; i++) int n, i, fact;
printf("\n i = %d",i); for (i = 1, fact = 1; i <= n;
} i++)
fact *= i;
printf("%d ! = %d \
n",n,fact);
Les instructions de branchement non conditionnel
« break »
main(){
int i;
for (i = 0; i < 5; i++){
printf("i = %d\n",i);
if (i == 3)
break;}
printf("valeur de i a la
sortie de la boucle = %d\
n",i);
}
Les instructions de branchement non conditionnel
« break »
main(){ i=0
int i; i=1
for (i = 0; i < 5; i++){ i=2
printf("i = %d\n",i); i=3
if (i == 3) valeur de i a la sortie de la
break;} boucle = 3
printf("valeur de i a la
sortie de la boucle = %d\
n",i);
}
Les instructions de branchement non conditionnel
« continue »
main(){ i=0
int i; i=1
for (i = 0; i < 5; i++){ i=2
if (i == 3) i=4
continue; valeur de i a la sortie de la
printf("i = %d\n",i); } boucle = 5
printf("valeur de i a la
sortie de la boucle = %d\
n",i);
}
Les pointeurs
Les pointeurs

Un pointeur est une variable, et plus généralement une


expression, dont la valeur
est une adresse mémoire. À cette adresse se trouve une valeur
d’un certain type:
a = 41
Les pointeurs

Un pointeur est une variable, et plus généralement une


expression, dont la valeur
est une adresse mémoire. À cette adresse se trouve une valeur
d’un certain type:
a = 41

0x7fff770117cc
Les pointeurs

Un pointeur est une variable, et plus généralement une


expression, dont la valeur
est une adresse mémoire. À cette adresse se trouve une valeur
d’un certain type:
a = 41

0x7fff770117cc
p
Les pointeurs

Un pointeur est une variable, et plus généralement une


expression, dont la valeur
est une adresse mémoire. À cette adresse se trouve une valeur
d’un certain type:
*p a = 41

0x7fff770117cc
p
Les pointeurs

Le type d’un pointeur vers un entier se note int*.


Les pointeurs

Le type d’un pointeur vers un entier se note int*. De manière


générale, un pointeur p vers une valeur de type 𝜏 a le type 𝜏*
Les pointeurs

Le type d’un pointeur vers un entier se note int*. De manière


générale, un pointeur p vers une valeur de type 𝜏 a le type 𝜏*
et l’expression *p a le type 𝜏. On peut donc déclarer notre
variable p de la manière suivante :
Les pointeurs

Le type d’un pointeur vers un entier se note int*. De manière


générale, un pointeur p vers une valeur de type 𝜏 a le type 𝜏*
et l’expression *p a le type 𝜏. On peut donc déclarer notre
variable p de la manière suivante :
On peut donc déclarer notre variable p de la manière suivante :
int* p;
Ou
int *p;
Les pointeurs
Exemple

void incr(int *x) {


*x = *x + 1;
}
reçoit en paramètre un pointeur x vers un entier, et qui
incrémente cet entier
Les pointeurs
Construction de pointeurs

Une première façon d’obtenir un pointeur consiste à allouer de


la mémoire dynamiquement avec la fonction malloc:
int *p = malloc(sizeof(int));
Les pointeurs
Construction de pointeurs

Une autre façon d’obtenir un pointeur consiste à utiliser


l’opérateur & du langage C.
Les pointeurs
Construction de pointeurs

Une autre façon d’obtenir un pointeur consiste à utiliser


l’opérateur & du langage C. Pour une expression e de type 𝜏
qui désigne un emplacement mémoire, l’expression &e désigne
un pointeur vers cet emplacement mémoire, de type 𝜏*
Les pointeurs
Construction de pointeurs

Une autre façon d’obtenir un pointeur consiste à utiliser


l’opérateur & du langage C. Pour une expression e de type 𝜏
qui désigne un emplacement mémoire, l’expression &e désigne
un pointeur vers cet emplacement mémoire, de type 𝜏*
Les pointeurs
Construction de pointeurs

Une autre façon d’obtenir un pointeur consiste à utiliser


l’opérateur & du langage C. Pour une expression e de type 𝜏
qui désigne un emplacement mémoire, l’expression &e désigne
un pointeur vers cet emplacement mémoire, de type 𝜏*
Les pointeurs

On appelle Lvalue (left value) tout objet pouvant être place a


gauche d’un operateur d’affectation. Une Lvalue est
caractérisée par :
– son adresse, c’est-a-dire l’adresse-memoire a partir de
laquelle l’objet est stocké ;
– sa valeur, c’est-a-dire ce qui est stocke a cette adresse.
Les pointeurs

Un pointeur est un objet (Lvalue) dont la valeur est égale a


l’adresse d’un autre objet. On déclare un pointeur par
l’instruction :
type *nom-du-pointeur;
Où type est le type de l’objet pointé.
Les pointeurs
Arithmétique des pointeurs

int i = 3;
int *p;
p = &i;
Les pointeurs
Manipulation des pointeurs

main()
{
int i = 3;
int *p;
p = &i;
printf("*p = %d \
n",*p)
}
Les pointeurs
Arithmétique des pointeurs

La valeur d’un pointeur étant un entier, on peut lui appliquer


un certain nombre d’operateurs arithmétiques classiques.
Les seules opérations valides sur les pointeurs
sont :
• L’addition d’un entier a un pointeur. Le résultat est un
pointeur de même type que le pointeur de départ ;
• La soustraction d’un entier a un pointeur. Le résultat est un
pointeur de même type que le pointeur de départ ;
• La différence de deux pointeurs pointant tous deux vers des
objets de même type. Le résultat est un entier.
Les pointeurs
Arithmétique des pointeurs: En pratique

main(){
int i = 3;
int *p1, *p2;
p1 = &i;
p2 = p1 + 1;
printf("p1 = %ld \t p2 =
%ld\n",p1,p2);
}
si p1 = 4831835984
alors p2 = 4831835988.
Les pointeurs
Application

Le langage C ne propose pas nativement de type de 𝑛-uplet


et il n’est pas facile d’écrire une fonction qui renvoie deux
résultats
Les pointeurs
Application

Le langage C ne propose pas nativement de type de 𝑛-uplet


et il n’est pas facile d’écrire une fonction qui renvoie deux
résultats.
on souhaite écrire une fonction qui renvoie le quotient et le
reste de la division euclidienne de a par b:
int division(int a, int b, int *r) { ... }
Les pointeurs
Application

Le langage C ne propose pas nativement de type de 𝑛-uplet


et il n’est pas facile d’écrire une fonction qui renvoie deux
résultats.
on souhaite écrire une fonction qui renvoie le quotient et le
reste de la division euclidienne de a par b:
int division(int a, int b, int *r) { ... }
Pour appeler une telle fonction, il faudra donc allouer un
emplacement pour recevoir le reste,
int r;
int q = division(89, 3, &r);
Evaluation formative

Exercice n° 1
Écrire un programme qui saisit un entier et qui affiche sa valeur
absolue.
Exercice n° 2
Écrire un programme qui permet de saisir deux nombres, effectuer
leurs produits et transformer la valeur trouvée en réel
Exercice n° 3
Ecrire un programme qui échange deux entiers. Afficher les entiers
avant et après les échanges
Exercice n° 4
Ecrire un programme qui calcule et affiche la distance DIST (type
double) entre deux points A et B du plan dont les coordonnées (XA, YA)
et (XB, YB) sont entrées au clavier comme entiers.

Vous aimerez peut-être aussi