Vous êtes sur la page 1sur 68

LANGAGE C

1: Introduction
2: Concepts de stockage et affichage de données
3: Les conditions (structure Alternative)
4: Les boucles (structure répétitive)
5: Les Tableaux vecteurs
6: Les Fonctions et procédures
7: Les chaines de caractères
8 : Les Tableaux matrices
9: La Recursivité
10 : Les Pointeurs
11: Les Structures 1

12: Les Ficchiers


GÉNÉRALITÉS

Le langage C créé au début des années 70


 Langage successeur du langage B (les années 60),
 Le langage C fait partie des langages de programmation
procédurale
 Langage compilé

 Une meilleure portabilité (fonctionnement sur de


nombreuses plates-formes)

2
!

IDE GRATUIT POUR C


 Code::Blocks.pour Windows, Mac et Linux.
 Visual studio Express, visual c++, dev c++
pour Windows
 Xcode, Sur Mac

…
CHAPITRE 2:
CONCEPTS DE STOCKAGE ET
AFFICHAGE DE DONNÉES
TYPES DE VARIABLES

 Ily a globalement trois types de variables :


 Les entiers : int, short int, long int
 Les réels : float, double
 Les caractères : char

5
TYPES DE VARIABLES

 Unevariable de type char occupe un octet


en mémoire.

 Un float : 4 Octets (réel simple précision)


 Un Double : 8 Octets(réel double précision )
TYPES DE VARIABLES
 Déclaration des variables
int x;
float y,w;
 Déclaration et affectation de variable
 int x= 1, z=5
 int y=x+2;
 float pi = 3.14;
 Char z = ‘a’;

 Déclaration et affectation de constante


On utilise la ligne de commande : #define.
7
#define PI 3.14159
Les opérateurs standards en C

 L’Opérateur d'affectation (=)


 Opérateurs arithmétiques (+, -, *, /, %)
 Opérateurs de comparaison (==, !=, <, <=,>, >=)
 Opérateurs logiques (&&, ||, !)
LES OPÉRATEURS ARITHMÉTIQUES

+ addition
- soustraction
* multiplication
/ division
% modulo (reste de la division entière )

7/2 3

7.0/2 3.5

9
 On ajoute les opérateurs parenthèses ( )
pour fixer l'ordre des calculs.

float x =(y+z)/2
INCRÉMENT ET DÉCREMENT

++ increment : i++
i+=1
i=i+1

- - decrement : i- -
i - =1
i=i-1
11
int main()

main est la fonction principale


de votre programme,
Sans fonction main, il est
impossible de générer un
programme exécutable
NOUVEAU PROJET CONSOLE

Code::Blocks a donc généré le minimum de code en


langage C dont on a besoin.

#include <stdio.h>
#include <stdlib.h>
int main()
{ printf("Hello world!\n");
return 0;
}
void main( ) void main( )
{ char c; { char c = 'A';
int i,j, k;
c = 'A'; int i=50,j, k;
i = 50; j=k=10;
j =10;
K=10;
Identificateurs

Le C distingue les minuscules des majuscules.


abc, Abc, ABC sont des identificateurs valides et
tous différents.

Identificateurs invalides :
3eme commence par un chiffre
x#y caractère non autorisé (#)
nb-pos caractère non autorisé (-)
Nb pos caractère non autorisé (espace)

15
 #include <stdio.h>

 Cette ligne demande d'inclure des fichiers au


projet, c'est-à-dire d'ajouter des fichiers pour la
compilation.

 bibliothèques (librairies)
LES ENTRÉES SORTIES : PRINTF, SCANF
 La bibliothèque standard est une collection utilisées
pour implémenter des opérations courantes, telles que
les entrées/sorties et la gestion des chaînes de
caractères, les fonctions mathématiques.

 Le prototype des fonctions d’entrée-sortie


(scanf et printf) est dans <stdio.h>
LES ENTRÉES SORTIES : PRINTF, SCANF

printf permet d ’afficher du texte à


l ’écran
scanf permet récupérer le texte saisi au
clavier

18
LES BIBLIOTHEQUES
 #include <stdio.h> : bibliothèque (entrée / sortie).
 #include <math.h> : pou les fonctions mathématiques

 #include <string.h> : Traitement de chaînes de caractères

 #include <time.h> Traitement date et heure ()


AFFICHER UN MESSAGE : PRINTF();

 printf("Bonjour");
 \n : retour à la ligne ; printf("Bonjour\n");
 \t : tabulation.

 \a : sonnerie
 \b : espace
#include<conio.h>

getch lit un seul caractère au clavier et le retourne


comme résultat sans l'écrire sur l'écran et sans
attendre un retour à la ligne.
Création du 1er programme printf
# Include <stdio.h>
#include<conio.h>

void main ()
{ printf (" premiere ligne ");
printf ("\ n");
printf (" deuxième ligne ");
printf ("\ n");
printf (" troisième ligne ");
getch()
} 22
Afficher les données : printf
 printf (" message ");
 printf(" %d ", a ); a est un entier

 printf(" %c",x); x est un caractère


 printf("%f ",z); z est un réel
 printf("%s", ch); ch est une chaîne de caractère

 printf(" Le résultat est %d ", a );

 printf(" Le résultat est %d \n", a );

 printf(" La somme du 1er chiffre %d et le 2ème chiffre %d


est égale à %d ", a,b,c );
 printf(" %d +2 = %d ", a,a+2 );
PRINTF, SCANF

Ces fonctions utilisent des formats qui


permettent de lire/écrire des variables de
différents types :
%f : réels float
%lf : réels de type double
%d : entiers int
%ld : entiers long int
%s : chaîne de caractères
%c : un caractère
%x :affichera un hexadecimal
%o :affichera une valeur en base 8 (base octale) 24
Lire des données du clavier : scanf

L’utilisation de & est indispensable avec scanf

(valeur lue et donc modifiée),

 scanf("%c",&x); x est un caractère

 scanf("%d",&y); y est un entier

 scanf("%f",&z); z est un réel

 scanf("%s", &ch); ch est une chaîne de caractères


Lire des données du clavier : scanf

On peut fixer le nombre de caractères de


la donnée à lire.
 %10s pour une chaîne de 15 caractères,

 %5d pour un entier qui s’étend sur 5 chiffres.

 %.2f le réel est affiché avec 2 chiffres après la


virgule. (par défaut 6 chiffres après la virgule).
E X1

 Ecrireun programme qui saisit deux entiers et


affiche leur produit.
Demander à l’utilisateur de saisir le 1er chiffre
Demander à l’utilisateur de saisir le 2ème chiffre

 Calculersomme, produit, différence, le


quotient et le reste de la division.
E X1

#include <stdio.h>
int i,j;
int main()
{printf("donner le 1er entier ");
scanf("%d",&i);
printf("donner le 2ème entier ");
scanf("%d",&j);
printf("le produit de %d et %d est égale à %d ",i, j, i*j);
printf(" %d * %d = %d ", i, j, i*j);
}
E X2

 Ecrireun programme qui échange


deux entiers saisis. Afficher les
entiers avant et après
l’échange.(permutation)
E X2

#include <stdio.h>
Void main()
{ int i,j,z;
Printf(" donner le 1er chiffre ") ; scanf("%d",&i) ;
Printf(" donner le 2ème chiffre ") ; scanf("%d",&j) ;
Printf(" le 1er chiffre est %d le 2ème chiffre est %d",
i,j) ;
z=i;
i=j;
j=z;
Printf(" le 1er chiffre est %d le 2ème chiffre est %d",
i,j) ;}
LECTURE DE DEUX VARIABLES DANS UN SCANF

printf("donner les deux chiffres \n");


scanf("%d%d",&i,&j);
EQUIVALENT DU PRINTF

 Putchar(..),Cette fonction a pour effet


d'émettre le caractère passé en
paramètre vers le flux de sortie
standard. char c=‘A’; putchar(c);
putchar('s'); // équivaut printf("s");

 Puts(..) :Cette fonction a pour effet


d'émettre la chaine de caractères
passée en paramètre vers le flux de
sortie standard. puts (" le résultat ");
// équivaut printf(" le résultat \n");
EQUIVALENT DU SCANF

 getchar, pour la lecture d’un caractère.

char x = getchar();

 gets, pour la lecture de chaînes de caractères.

char ch[10];

gets(ch);
CHAPITRE 3: LES CONDITIONS
(STRUCTURE ALTERNATIVE)
SI…SINON IF..ELSE
if (condition)
Instruction1;

if (condition)
{
Instruction1;

Instruction2; }
SI…SINON IF..ELSE
if (condition)
Instruction1;
else
Instruction2;
if (condition)
{ Instruction1;
Instruction2; }
else
{Instruction3;
Instructions4; }
SI…SINON IF..ELSE
if (condition)
{if (condition)
{ Instruction1;
Instruction2; }
else
{Instruction3;
Instructions4; }}
else
{Instruction5;
Instructions6; }
SI…SINON IF..ELSE
if (condition)
{Instruction1;
Instructions2; }
else
if (condition)
{ Instruction3;
Instruction4; }
else
{Instruction5;
Instructions6; }
EXPRESSIONS ÉVALUÉES DANS LES TESTS

 if (a = b) : erreur fréquente,
 if (a == b) : a égal à b
 if (a != b) : a différent de b
 if (a > b) : a supérieur à b
 if ((a >=0)&&(a<10)) : a comprise entre 0 et 9
 if ((a<=b)||(a>0)) : a inférieur ou égal à b
ou a positif
if (c >= 'a' && c <= 'z') || (c >= 'A' && c <=
39
'Z')
EXPRESSIONS ÉVALUÉES DANS LES TESTS
if ((h<0)||(h>23))
printf(" heure saisie est incorrecte");
Else
if ((m<0)||(m>59))
printf(" minute saisie est incorrecte");
else
m=m+1
…..
TEST AVEC IF (SI)
int main()
{int n,m;
printf("donner le 1er chiffre ");
scanf("%d", &n);
printf("donner le 2ème chiffre ");
scanf("%d", &m);
if (n>m)
printf("le 1er chiffre %d est le plus grand \n",n);
else
printf("le 2ème chiffre %d est le plus grand \n",m);
return 0;}
#include <stdio.h>

int main(void)
{ int i;
printf(" saisir un chiffre ");
scanf(" %d", &i);

if (i>0)
printf("le chiffre %d est positif\n",i);
else if (i<0)
printf("le chiffre %d est negatif\n",i);
else
printf("le chiffre %d est zéro\n",i);
return 0;}

42
Test avec switch (selon)
Syntaxe :

switch(expression)
{
case valeur1 : { instructions1;break; }
case valeur2 : { instructions2;break; }
...
case valeurn : { instructionsn;break; }
default : { instructionsautre;break; }
}
Test avec switch (selon)
Default : propose une instruction a
effectuer dans le cas où l’expression n'a
pris aucune des valeurs proposées dans les
cases successifs.
Break : renvoie à la fin du switch. Si le
break n'est pas mis, le programme
exécutera le case suivant.
UTILISATION DE SWITCH CASE
Int main()
{ int i;
printf(" saisir un chiffre soit 1 ou 2 ou 3 ");
scanf(" %d", &i);
switch(i)
{ case 1 : printf(" le chiffre est 1 "); break;
case 2 : printf(" le chiffre est 2 "); break;
case 3 : printf(" le chiffre est 3 "); break;
default : printf(" le chiffre est différent de 1,2,3");
}
}
printf(" saisir la date J M A ");
scanf(" %d %d %d ", &j, &m, &a);
switch(m)
{ case 1: case 3: case 5: case 7: case 8: case 10:case 12:
if((j>=1)&&(j<=31))
printf(" la date est valide ");
else
printf(" la valeur du jour est incorrecte");
break;
case 4: case 6: case 9: case 11:
if((j>=1)&&(j<=30))
printf(" la date est valide ");
else
printf(" la valeur du jour est incorrecte");
break;
case 2 : if((j>=1)&&(j<=29))
printf(" la date est valide ");
else
printf(" la valeur du jour est incorrecte");
break;
default : printf(" la valeur du mois est incorrecte "); }
SWITCH (INTERVALE DE VALEURS)

int t;
printf(" saisir la température de l'eau ");
scanf("%d",&t);
switch (t)
{ case -100 ... 0 : printf(" glace"); break;
case 1 ... 99 : printf(" liquide "); break;
case 100 ... 130 : printf(" gaz "); break;
default : printf(" saisie incorrecte "); break;
}
CHAPITRE 4: LES BOUCLES
(STRUCTURE RÉPÉTITIVE)
BOUCLE POUR « FOR »

#include <stdio.h>
#define NUMBER 10

int main()
{
int c, total = 0;

for( c =1; c <= NUMBER; c++)


{ total += c;}

printf("Le total est %d\n", total);


}
BOUCLE TANT QUE « WHILE »

#include <stdio.h>
#define NUMBER 10
main()
{
int c = 1, total = 0;

while(c <= NUMBER)


{
total += c;
c++;
}
printf(“Le total est : %d ”, total);
}

51
BOUCLE « DO WHILE »
PERMET D ’EXÉCUTER AU MOINS UNE FOIS LES INSTRUCTIONS
AVANT D ’ÉVALUER LE TEST

#include <stdio.h>
#define NUMBER 10
main()
{
int c = 1, total = 0;

do
{ total += c;
c++;
} while(c <= NUMBER);

printf(“Le total est : %d ”, total);


}
EX: IMPOSER À L’UTILISATEUR LA SAISIE AU
CLAVIER D’UN ENTIER ENTRE 1 ET 10,

int a;
Do
{ printf("\n Entrez un entier entre 1 et 10 : ");
scanf("%d",&a);}
while ((a <= 0) || (a > 10));
EX3: AFFICHER TOUS LES ENTIERS DE 0 À 9:

int i;
for (i = 0; i < 10; i++)
printf("\n i = %d",i);
break
L’instruction break peut, être
employée à l’intérieur de n’importe
quelle boucle. Elle permet
d’interrompre le déroulement de la
boucle, et passe à la première
instruction qui suit la boucle.
main()
{int i;
for (i = 0; i < 5; i++)
{printf("i = %d\n",i);
if (i == 3)
break;
}}
imprime à l’écran
i=0
i=1
i=2
i=3
continue
L’instruction continue permet de
passer directement à la valeur
suivante, sans exécuter les autres
instructions de la boucle.
main()
{ int i;
for (i = 0; i < 5; i++)
{ if (i == 3)
continue;
printf("i = %d\n",i);} }
imprime à l’écran
i=0
i=1
i=2
i=4
#include <stdio.h>
Int c,i,nbCh,nbBlancs,nbalpha,nbAutres;
int main(){nbCh=nbBlancs=nbAutres=nbalpha=0;
while((c=getchar())!= '.')
if((c>='0') && (c<='9'))
nbChiffres++;
else if(((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z')))
nbalphabet++;
else if((c==' ')||(c=='\n')||(c=='\t'))
nbBlancs++;
else nbAutres++;
printf("chiffres:%d",nbChiffres);
printf("alphabet:%d",nbalphabet);
printf("blancs:%d ", nbBlancs );
printf("Autres:%d\n",nbAutres); }
LES FONCTIONS MATHEMATIQUES
#INCLUDE <MATH.H>

les fonctions sinus, cosinus, et tangente.


• x = sin(..); y = cos(..); z = tan(..);

Fonctions logarithmes
• x = log(..);
Fonction exponentielle,
• double x = exp(..);

Fonction puissance
• x = pow(5, 2);

Fonction racine carrée


• x = sqrt(25);
Fonction valeur absolue
x = fabs(-7);
LES FONCTIONS CHAINE CARACTERES
#INCLUDE <STRING.H>

• strlen : longueur de chaîne


char chaine[] = "Bonjour";
int x= strlen(chaine);

• strcpy : Copier une chaîne


char chaine2[ ], chaine[ ]= "TDI";
strcpy(chaine2, chaine);

• strcat : concaténer deux chaînes


char c1[10] = "bon"; char c2[10] = "jour";
strcat(c1, c2); /* on concatène */
strcmp : comparer 2 chaînes

char ch [3 ]; scanf("%s ",&ch)


if (strcmp(chaine1, "TDI") == 0)
{ }
else { }

sprintf : Ecrire dans une chaîne


char chaine[100]; int N = 1;
sprintf(chaine, "NTIC TDI %d Année !", N);
CTYPE.H
int isupper(C) : retourne une valeur différente de zéro,
si C est une majuscule
int islower(C) : retourne une valeur différente de zéro,
si C est une minuscule
int isdigit(C) : retourne une valeur différente de zéro,
si C est un chiffre décimal
int isalpha(C) : retourne une valeur différente de zéro,
si (C) est alphabet
int isalnum(C) : retourne une valeur différente de zéro,
si isalpha(C) ou isdigit(C)
int isspace(C) : retourne une valeur différente de zéro,
si C est un signe d'espacement
touuper(C) : convertit c en majuscule
tolower(C) : convertit c en minuscule
INT I=0;
CHAR STR[]= "TEST CHAINE.\N" ;
CHAR C;
WHILE (STR[I]) // WHILE (I<STRLEN(STR))

{ C=STR[I];
IF (ISLOWER(C))
C=TOUPPER(C);
PUTCHAR (C);
I++; }
CHAPITRE 5: LES FONCTIONS ET
PROCÉDURES
LES FONCTIONS ET PROCÉDURES

 Le programme contient des procedures et des


variables. Les procédures précisent les tâches à
exécuter par le programme.
 Le programme «principal» établit la logique de
l'ensemble du code. Il appelle les différentes
fonctions ou procédures nécessaires pour effectuer la
sous-tâches.

66
Programme typique en C

include
Main() toujours la
1ere fonction appelée
main(){
a();
b();}
Appel de la fonction a
fonction a()
Appel de la fonction b
fonction b()
UTILISATION DE SWITCH POUR CHOISIR
int main()
{ char choix;
printf("a : l ’addition\n");
printf("b : la multiplication\n");
printf("c : la soustraction\n");
printf("d : la division\n");
printf(" Donner votre choix : ");
scanf("%c", &choix);
switch(choix)
{ case 'a' : procA(); break;
case 'b' : procB(); break;
case 'c' : procC(); break;
case d : procD(); break;
default :printf(‘’choix incorrecte’’);
}}
procA()
{ printf("vous exécutez la procédure A : l’addition");
……