DrMefteh AP Ch1 ch7
DrMefteh AP Ch1 ch7
DrMefteh AP Ch1 ch7
Introduction à la programmation C
Details
Villes
Comtés
Pays
5
Abstraction
Hardware
compilateur
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp; Programme en langage
2
Assembleur
assembleur
lw $t0, 0($2)
lw $t1, 4($2)
sw $t1, 0($2)
Programme en langage machine 3 sw $t0, 4($2)
Program me en langage
Implementation Interpretation
machine 3
de l’architecture Machine
0000 1001 1100 0110 1010 1111 0101 1000
1010 1111 0101 1000 0000 1001 1100 0110
1100 0110 1010 1111 0101 1000 0000 1001
0101 1000 0000 1001 1100 0110 1010 1111
4 Description de l’architecture hardware
Historique
Domaines de programmation
Applications scientifiques 1
Domaines de programmation
10
11
Historique
Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70.
langage C.
12
Avantages du langage C
- C'est un langage universel: C n'est pas orienté vers un domaine d'applications spécifique (au contraire du FORTRAN:
applications scientifiques, COBOL: applications commerciales).
- C'est un langage compact: C est basé sur un noyau de fonctions et d'opérateurs limités, permettant la formulation
d'expressions simples et efficaces.
- Il est portable: en respectant le standard ANSI-C il est possible d'utiliser le même programme sur tout autre système
d'exploitation en possession d'un compilateur C
- C est un langage comportant des instructions et des structures de haut niveau (contrairement à l'assembleur par
exemple) tout en générant un code très rapide grâce à un compilateur très performant.
Chapitre 2
Notions de base
Bibliothèques de fonctions
• Afin de pouvoir les utiliser, il faut inclure des fichiers en-tête (.h) dans nos programmes.
• Ces fichiers contiennent les prototypes des fonctions prédéfinies dans les bibliothèques et
créent un lien entre les fonctions précompilées et nos programmes.
#include <fichier.h>
16
Bibliothèques de fonctions
• Pour le compilateur, différents types de fichiers seront identifiés par leurs extensions:
.c : fichier source
.h : bibliothèque en-tête
17
Composantes d'un
programme en C
18
La fonction main
• Chaque programme C possède une fonction principale qui doit être nommée main.
• Syntaxe:
main() {
La fonction main
• Les fonctions du programme source effectuent une ou plusieurs tâches spécifiques.
• La fonction main peut appeler ces fonctions afin qu’elles effectuent leurs tâches respectives.
• Lorsque la fonction main appelle une autre fonction, elle passe le contrôle d’exécution à celle-ci
• Une fonction retourne le contrôle à main quand une instruction return est exécutée ou que la fin
Les identificateurs
• Les « identificateurs » ou « symboles » sont des noms que vous fournissez pour des variables,
• Les noms des fonctions et des variables en C sont composés d'une suite de lettres et de chiffres:
X, Y, Z, _}
- La longueur des identificateurs n'est pas limitée, mais le C distingue des 31 premiers caractères
21
Les identificateurs
• Les noms d'identificateur doivent différer des mots clés en termes d'orthographe et de casse.
Vous ne pouvez pas utiliser des mots clés (C ou Microsoft) en tant qu’identificateurs ; ils sont
• Le compilateur C considère les majuscules et les minuscules comme des caractères distincts.
Cette fonctionnalité, appelée « respect de la casse », vous permet de créer des identificateurs
distincts qui ont la même orthographe mais différentes casses pour une ou plusieurs des lettres.
Mots clés C
• Les mots clés sont des mots qui ont une signification spéciale pour le compilateur C.
• Un identificateur ne peut pas avoir la même orthographe et la même casse qu'un mot clé C
Les commentaires
• Un commentaire commence toujours par les deux symboles /* et se termine par les
deux symboles */
Exemple:
Les variables
• Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être
modifiées lors de l'exécution du programme
• Pour pouvoir utiliser une variable, il faut la définir, c'est-à-dire lui donner un nom, mais surtout un
type de donnée à stocker afin qu'un espace mémoire conforme au type de donnée qu'elle contient
lui soit réservé.
Les variables
Exemple:
int nb;
float pi = 3.14;
char c = 'a';
long i,j,k;
double r = 6.2879821365;
Les variables
• En langage C, les noms de variables peuvent être aussi long que l'on désire, toutefois le
compilateur ne tiendra compte que des 32 premiers caractères.
• les noms de variables ne peuvent pas être les noms suivants (qui sont des noms réservés) :
break, case, char, do, double, else, float, for, goto, if, int,
Les variables
• Les noms de variables sont sensibles à la casse (le langage C fait la différence entre un
nom en majuscules et un nom en minuscules)
28
Les constantes
• Une constante est un nombre, un caractère ou une chaîne de caractères utilisable comme valeur
dans un programme.
• Utilisez des constantes pour représenter des valeurs à virgule flottante, entières, d'énumération
ou de caractères qui ne peuvent pas être modifiées.
En langage c
Const type nomconstante=valeurconstante;
ou bien
#define nom_constante = valeur_de_la_constante ;
Exemple
#define x 40 ou bien const int x=40;
#define c 'a‘ ou bien const char c=‘a’;
Remarque: toute constante doit être déclarée avant on utilisation
29
Les fonctions
• Une fonction est généralement conçue pour effectuer une tâche spécifique et son nom reflète
/* instructions */
}
30
Les fonctions
Structure d'un
programme C
32
Expression
Par exemple:
x = 0
ou bien
Instruction
• Plusieurs instructions peuvent être rassemblées par des accolades { et } pour former
une instruction composée ou bloc qui est syntaxiquement équivalent à une instruction.
• Par exemple,
if (x != 0) { z = y / x; t = y % x; }
34
Déclaration
• Une instruction composée d'un spécificateur de type et d'une liste d'identificateurs séparés par
une virgule est une déclaration.
• Par exemple,
int a;
int b = 1, c;
double x = 2.38e4;
char message[80];
• En C, toute variable doit faire l'objet d'une déclaration avant d'être utilisée.
35
Types de base
Dr. Mariem MEFTEH
37
Types primitifs
• Chaque octet de la mémoire est caractérisé par son adresse, qui est un entier.
• Deux octets contigus en mémoire ont des adresses qui diffèrent d'une unité.
• Quand une variable est définie, il lui est attribué une adresse.
• Cette variable correspondra à une zone mémoire dont la longueur (le nombre d'octets) est
fixée par le type.
39
Le type caractère
• Le mot-clef char désigne un objet de type caractère.
• Un objet de type char est codé sur un octet
• C'est l'objet le plus élémentaire en C
• Stocké sous forme de codages numériques
• Codage le plus couramment utilisé : ASCII
40
Le type caractère
Le type caractère
• Une des particularités du type char en C est qu'il peut être assimilé à un entier
Tout objet de type char peut être utilisé dans une expression qui utilise des objets
de type entier.
Les types float, double et long double servent à représenter des nombres en virgule flottante.
44
Tous les types de variables numériques peuvent être utilisés pour exprimer des opérations
logiques:
printf(``format``, liste_de_variables);
Exemple:
#include <stdio.h>
void main(){
float p=1.556;
int j=5;
printf(``le jour est %d ``, j);
printf(``prix : %f euros à payer avant le %d aôut \n``, p, j);
}
46
47
#include <stdio.h>
void main(){
float p=1.556;
int j=5;
printf(``le jour est %d ``, j);
printf(``prix : %f euros à payer avant
le %d aôut``, p, j);
}
Format des nombres avec printf
Exemple d’affichage
En algorithmique En langage c
#include <stdio.h>
algorithme affich
void main()
Variables
{
X:entier; r:réel; a:caractère;
int x=2;
ch:chaîne de caractères; b:booléen;
float r=3.57;
Début
char c=‘m’;
//ajouter les instructions
int b=0;
d’initialisation
printf(“x est= %d r est = %f c est = %c“,
Ecrire(“x est= “,x, “r est = “,r, “c est =
x,r,c);
“,c);
}
FIN
Format des nombres avec printf
Un indicateur de format se construit ainsi:
%[flag][largeur][.précision]type
flag: - cadre à gauche, + cadre à droite (par défaut cadre à droite),…
La précision: indique le nombre maximum de caractère d’une chaîne à imprimer. Soit le nombre de chiffres à
imprimer à droite du point décimal d’une valeur à virgule flottante, soit le nombre de chiffres à imprimer pour un
entier.
Format Résultat Description
%6d └┘ └┘ └┘ 123 Largeur minimum de champ de 6 caractères
%06d 000123 Largeur minimum de champ de 6 caractères et remplissage avec des zéros
%6.3f └┘ 3.141 Largeur minimum de champ de 6 caractères avec trois chiffres après la virgule
50
Format Résultat Description
51
52
\n nouvelle ligne
\t tabulation
\v tabulateur vertical
\r retour à la ligne
\a sonnerie
\\ trait oblique
\’ apostrophe
\“ double quote
54
Comme printf, la fonction scanf possède en premier argument un format (ici "%f" )
• Exemple:
scanf ("%c", &op) permet de lire un caractère au clavier et de le ranger dans op.
• Notez le code %c correspondant au type char (n’oubliez pas le & devant op).
55
56
Exercice 1
Ecrire un programme qui calcule la somme et le produit de deux nombres
#include <stdio.h>
main()
{
int n1, n2 ;
printf ("donnez 2 nombres entiers : ") ;
scanf ("%d %d", &n1, &n2) ;
printf ("la somme est : %d ", n1+n2) ;
printf ("le produit est : %d ", n1*n2) ;
}
Exercice
Ecrire un programme C qui permet de lire deux nombres réels, et d’afficher ensuite leur produit, avec
une précision de trois chiffres après la virgule.
57
Exercice 3
Ecrire un programme C qui permet de permuter le contenu de deux variables entières en
passant par une troisième variable auxiliaire. Ceci et en affichant les deux variables avant et
après permutation.
58
59
Exemple de programme
Exercice:
Ecrire un programme qui calcule la racine carré d’un nombre
#include <stdio.h>
#include <math.h>
main()
{
float x ;
float racx ;
printf ("Donnez un nombre : ") ;
scanf ("%f", &x) ;
racx = sqrt(x) ;
printf ("Le nombre %f a pour racine carrée : %f\n",x,racx) ;
}
Chapitre 5
Les operateurs
Exemples
int i=1; i=1;
printf("i= %d\n",i); -> i=1 printf("i= %d\n",i); -> i=1
printf("i= %d\n",++i); -> i=2 printf("i= %d\n",i++); -> i=1
printf("i= %d\n",i); -> i=2 printf("i= %d\n",i); -> i=2
Opérateurs d'affectation: Affectation simple
Exemples :
a = 2; b=1; c=0;
a = b+c;
la valeur de l'expression vaut la valeur affectée
Opérateurs d'affectation: Affectation et opération
+= -= *= /= %=
Exemple :
int i;
i= 3;
i+=2; // même chose que i=i+2;
printf("%d\n",i); // 5
Opérateurs relationnels
Operateurs Relationnels :
Opérateurs logiques
Operateurs Logiques :
Dans l'évaluation de l'expression, 0 est considéré comme la valeur logique "faux", toute valeur 0
!0 vaut 1
!4 vaut 0
Opérateur conditionnel
Syntaxe :
expression1 ? expression2 : expression3 ;
Exemple :
maximum = (x>y) ? x : y;
if (x>y)
maximum =x ;
else maximum = y;
Chapitre 6
Structures conditionnelles
La notion de bloc
a++;
• Lorsque l'on veut regrouper plusieurs instructions, on peut créer ce que l'on appelle un bloc,
L'instruction if
• L'instruction if est la structure de test la plus basique, on la retrouve dans tous les langages
• Elle permet d'exécuter une série d'instructions si jamais une condition est réalisée.
L'instruction if
• il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU (&& et ||)
Par exemple l'instruction suivante teste si les deux conditions sont vraies :
if ((condition1)&&(condition2))
• L'instruction suivante exécutera les instructions si l'une ou l'autre des deux conditions est vraie :
if ((condition1)||(condition2))
temps on aimerait pouvoir choisir les instructions à exécuter en cas de non réalisation de la
condition...
• L'expression if ... else permet d'exécuter une autre série d'instructions en cas de non-réalisation
de la condition.
if (condition réalisée) {
liste d'instructions }
Il est possible de faire un test avec une structure beaucoup moins lourde grâce à la structure
suivante :
L'instruction switch
• L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable.
• Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable, car
cette opération aurait été compliquée (mais possible) avec des if imbriqués.
L'instruction switch
79
L'instruction switch
• Les parenthèses qui suivent le mot clé switch indiquent une expression dont la valeur est testée
• Lorsque l'expression testée est égale à une des valeurs suivant un case, la liste d'instructions qui
• Le mot clé default précède la liste d'instructions qui sera exécutée si l'expression n'est jamais égale
L'instruction switch
81
Exercice
Chapitre 7
Structures itératives
Remarques
• Il ne faut pas écrire une structure Tantque dans laquelle l’expression booléenne ne peut pas
être vraie: le programme ne rentrera jamais dans la boucle
Exemple: tant que (i>10 et i<2) ……
• De même, il ne faut jamais écrire une boucle dans laquelle le booléen ne devient jamais faux.
L’’ordinateur tourne dans la boucle et n’en sort jamais: boucle infinie
Exemple: tant que (i<10 ou i>2)…………………..
• On peut avoir des boucles tantque imbriqués. Le finTantque ou l’accolade de fin } se rapporte
toujours au dernier tantque rencontré
86
Syntaxe
do {
instructions;
} while (expression);
Exemples
Exemple1: Ecrire un programme C permettant de lire un nombre entre 1 et 10
88
Exemples
Exemple 2: Ecrire un programme en C permettant de lire deux nombre et de faire la division
(diviseur positif)
89
Boucle pour
Ce type de boucle est utilisé lorsqu’on connaît d’avance le nombre de répétions de la boucle
for(expr_init;expr_cond;compteur)
{
instructions
}
Expr_init: évaluée 1 seule fois en début de boucle, c’est l’initialisation des données
de la boucle
Expr_cond: évaluée avant chaque itération. Si vrai alors les instructions de la boucle
sont exécutées sinon la boucle est terminée, c’est la condition de la boucle
compteur: évaluée à la fin de chaque itération, elle est utilisée pour l’avancement de
la boucle
90
Exemples
Exemple: somme des 100 premiers entiers
#include<stdio.h>
void main()
{
int i,s;
s= 0;
for(i=0;i<=100;i = i+1)
{
s = s+i; / / ou s+=i;
}
printf(" s=%d \n " ,s);
}
91
Exercices:
Écrire un programme qui affiche les premiers nombres pairs (2,4,6,...)
inferieurs a 50, de trois façons différentes :
avec une boucle while (...) { ... } ;
avec une boucle do { ... } while (...) ;
avec une boucle for (...;...;...) { ... } ;
Compléments sur les instructions de contrôle : continue
Dans une structure itérative : l'instruction continue permet d'arrêter l'itération courante sans sortie
de la boucle
Exemple: Calculer la moyenne des valeurs positives d'un tableau d'entiers.
……………
nb_valeurs=0;
somme = 0;
for (i=0;i<dim;i++) {
if (T[i]<0)
continue;
somme += T[i];
nb_valeurs ++;
if (i == 5) break ;
printf("%d,",i) ;
Résultat: 0,1,2,3,4,
if (i == 5) continue ;
printf("%d,",i) ;
Résultat: 0,1,2,3,4,6,7,8,9
95
96
Chapitre 8
Les tableaux
int i, t[100];
for (i=0; i < 100; i=i+1)
t[i]= 2*i;
Tableaux
Remarques:
tab[3] = 2;
int t[50];
syntaxe 1
// accès à la (i+1)ème case avec i compris entre 0 et 49
t[i];
syntaxe 2
puisque t est l'adresse de la première case :
t[0] *t
t[1] *(t+1)
…
t[i] *(t+i)
105
Remarques
106
107
Compte rendu
108
Correction
109