Anda di halaman 1dari 77

Ecole polytechnique dEl Harrach

Programme du deuxime
semestre
Chap. 1 : Introduction au langage C. (Cours : 01h30)
Chap. 2 : Les fonctions. (Cours : 03h00)
Chap. 3 : La rcursivit. (Cours : 03h00)
Concept dalgorithme rcursif.
Passage dalgorithme rcursif en algorithme itratif.
Exemples dalgorithmes rcursifs et itratifs.
Les fonctions rcursives dans le langage C
Chap. 4 : Les pointeurs et lallocation dynamique de la
mmoire. (Cours : 03h00)
Chap. 5 : Les structures de donnes complexes et les
fichiers. (Cours : 12h00)
Les listes chanes : concepts et implmentations.
Les piles et les files : concepts et implmentations.
Les fichiers : concepts et implmentations.
Ecole polytechnique dEl Harrach

Chapitre 1 : Introduction au
langage C

Ralis par Fenineche Khadidja


Plan du chapitre
Introduction et historique.
Structure dun programme C.
Diffrentes parties dun programme et formalisme
utilis.
Les types standards et oprations appropries en C.
Actions simples et structures de contrle en C.
Les types complexes (tableaux et structures) en C.
Objectifs du cours
crire des programmes dans le langage C en utilisant
quelques bibliothques standards pour saisir les donnes,
afficher les rsultats, manipuler les chaines de
caractres, faire des calculs mathmatiques
Manipuler les diffrents types offerts dans le langage C.
Manipuler les oprations de base offerts par le langage.
Utiliser les structures de contrle sous leurs diffrentes
formes.
Dfinir des types complexes avec le langage C (tableaux
et structures).
Compiler et excuter les programmes pour obtenir les
rsultats attendus.
Introduction et historique
Le langage C est un langage de programmation cr par Denis
Ritchie en 1972.
Utilis en premier lieu pour le dveloppement du systme
dexploitation UNIX.
Ft rapidement adopt par les autres programmeurs et est
considr comme la base des langages volus (C++, C#,
php, java, )
La dfinition de ce langage a vu le jour en 1978 dans louvrage
The C programming Language par Kernighan et Ritchie.
Normalisation par plusieurs structures ANSI, ISO, AFNOR
(1994) pour prserver et scuriser le langage et le dvelopper.
Certaines modifications ont t apportes la dfinition
initiale du langage.
Programme source, module objet et
programme excutable
Programme Modules Excutable
source objets
Fichier 1 du
Programme Compilation Module objet 1
source (partie 1)

Fichier 2 du Edition
Programme Compilation Module objet 2
source (partie 2) des liens

Fichier n du
Programme Compilation Module objet n
source (partie n)

Excutables des fonctions


standards (printf, scanf, )
Programme source, module objet et
programme excutable
Le programme source est le texte quon crit dans un
langage volu en respectant la dfinition du langage.
Un programme source peut tre rparti sur plusieurs
fichiers compiler chacun part.
Un module objet est le code machine obtenu aprs
compilation dun programme source.
Un excutable est gnr suite ldition des liens entre
les modules objets gnrs aprs compilation et les
instructions excutables de la bibliothque standard.
Les bibliothques standards
Comprend des codes excutables pouvant tre exploits par
lutilisateur afin de lire, afficher ses donnes ou utiliser des
fonctions mathmatiques prdfinies,
Parmi ses composants on retrouve:
#include <stdio.h> pour grer les entres sorties
#include <math.h> pour utiliser les fonctions mathmatiques
(cos, sin, pow, ..) et les constantes exemple M_PI (pi).
#include <string.h> pour utiliser les fonctions de traitement
des chaines de caractres.
# include <time.h> permet de manipuler les fonctions pour la
gestion du temps.
#include <float.h> permet de connatre les constantes de type
float et double et leurs limites.
Etapes de prparation de lexcution
dun programme
Il est ncessaire pour tout code source dtre traduit en
langage machine pouvant tre excut de passer par les
deux tapes suivantes:
Prtraitement qui est effectu par le prprocesseur afin
dinterprter les directives (#include .., # define..) qui
se trouvent dans lentte du code source.
Include permet dinclure un autre fichier (dautres fichiers). Exemple:
#include <stdio.h >.
Define permet de dfinir des constantes par exemples ou des macros.
Exemple: #defineTVA 0.07.
Compilation: cest la vrification du code source par rapport
au lexique, syntaxe et smantique utiliss et la gnration du
code objet.
Etapes de prparation de lexcution dun
programme
Outils pour diter, compiler et excuter un
programme en C (IDE: Integrated
Development Environment )
Plusieurs outils sont disponibles tels que visual C++,
EDI XCODE, compilateur intgr de LINUX
On a opt pour CODE::BLOCK (logiciel open
source) sexcutant sous Windows et Linux.
Lien de tlchargement:
http://www.codeblocks.org/downloads/binaries
Structure dun programme en C
#include <stdio.h>Entte: ici bibliothque dentres/sortie
int main( ) /* ou int main(void) */
{ /* Rsolution d'une quation du premier degr */
commentaire
int A, B;
printf("Calcul de la solution d'une quation du premier degr \n");
printf("Introduisez les valeurs de a, b");
scanf("%i %i", &A, &B);
Corps

if (A==0 && B==0) printf("Solution indfinie.\n");


else if (A==0 && B!=0) printf("Solution impossible.\n");
else {
printf("La solution est :\n"); Point virgule aprs
printf(" x = %.2f\n", (double)-B/A); chaque instruction
}
return (0);
}
Structure dun programme en C
Diffrentes parties: La partie entte

La partie entte contient les lments suivants:


Les directives include (inclusion de fichier) et define
(dfinir des constantes par exemple ou dfinir des
types utilisateur).
La dfinition des types non standards tels que les.
Enregistrements (structures)..
La dfinition des fonctions ou des prototypes de
fonctions.
Structure dun programme en C
Diffrentes parties:La partie corps contient les
lments suivants Le dbut est marqu par la
prsence du main() ou
#include <stdio.h> main(void) (void: sans
int main( ) paramtres)
La dclaration des variables
{ porte globale pour les autres
int A, B; blocs du programme
B=A; Les actions de lecture,
criture, affectation et les
return (0); /* return 0;*/ structures
} conditionnelles,
ltat dexcution du alternatives et itratives.
Le corps du programme programme (0: tout
est dlimit par { et } va bien!)
Structure dun programme en C
Diffrentes parties
Dclaration des constantes
# define TVA 0.07 /* define est une directive de
prcompilation */
#define Pi 3.141592
#define bonjour " Bonjour tous et bonne journe "

Ou
Const float Pi=3.14; /* Cette criture se fait aprs le
main() */
Structure dun programme en C
Diffrentes parties
Inclusion de fichiers de la bibliothque
standard:
#include <stdio.h >
#include <math.h>
stdio.h permet de grer les entre sorties (scanf,
printf, )
math.h permet de donner accs aux fonctions
mathmatiques (pow, cos, sin, ) et aux constantes
tel que M_PI (valeur de Pi)
Structure dun programme en C
Exemple: Utilisation des constantes
#include <stdio.h> #include <stdio.h>
#define tva 0.07 int main()
int main() /* ou int main(void) */ {
{ const float tva=0.07;
float prix,ttc; float prix,ttc;
printf("Donnez un prix\n"); printf("Donnez un prix\n");
scanf("%f",&prix); scanf("%f",&prix);
ttc=prix*(1+tva); ttc=prix*(1+tva);
printf("%f",ttc); printf("%f",ttc);
return(0); return(0);
} }
Structure dun programme en C
Dclaration des variables: Le nom dune variable
ne doit pas commencer par un chiffre.
peut commencer par un blanc soulign (_som) mais
dconseiller car le _ est utilis par certaines
variables denvironnement.
ne doit pas contenir un symbole sauf la caractre
soulign (_).
doit tre diffrent des mots rservs du langage.
La casse doit tre respecte pour un nom de variable
(Somme <>somme)
Structure dun programme en C
Liste des mots rservs ( utiliser en miniscules)

auto default float register struct volatile


break do for return switch while
case double goto short typedef
char esle if signed union
const enum Int sizeof Unsigned
continue extern long static void

Source: livre de Claude Delannoy, Le langage C


Structure dun programme en C
Dclaration des variables:
Les variables externes (telles que les variables
globales, noms de fonctions externes) ne
devraient pas dpasser 6 caractres.
Les noms des variables peuvent tre diffrents
si leur dbut est diffrents de 31 caractres.
Remarque: dans le langage C, on peut
dclarer une autre forme dobjet
appel pointeur (chapitre 3).
Structure dun programme en C
Dclaration des variables: Les variables sont dclares
comme suit:
Type_variable nom_variable] [=valeur intiale];
[= valeur initiale]: pas obligatoire
Exemples:
int a;
float b=1.15;
Remarque: On peut dclarer une variable lintrieur dun
bloc dinstruction entre les accolades (bloc dune boucle ou
dun if) mais cette variable ainsi dclare a une porte
restreinte (nest pas reconnue dans les autres blocs du
programme)
Structure dun programme en C
#include <stdio.h>
int main()
{
int i;
j++; /* ERREUR j doit tre dclar avant dtre incrment */
for (i=0;i<=60;i++)
{
printf("%c\t",i);
int j=1;
j++; /* Ce j nest connu que dans ce bloc */
printf("%d\n",j);
}
int j=1;
j++; /* Ce j est diffrent du j prcdent */
printf("%d\n",j);
return 0;
}
Structure dun programme en C
Les types standards et oprations appropries.
Les types standards sont:
int,
float et double (rels) et
char.
Le type boolen nexiste pas en C, il peut
tre remplac par un entier qui prend les
deux valeurs 0 et 1 par exemple.
Structure dun programme en C
Les types standards et oprations appropries.
Le type entier: on distingue entre:
le sign et le non sign,
lentier ordinaire,
lentier court et
Et lentier long.
Chaque type est reprsent sur un nombre
donn doctets.
Le type Plage de valeurs Exemples de
Dclaration
Entier court sign -32 768 +32 767 short a;
(short, short int, signed short, (2octets=216 nombres)
signed short int)
Entier court non sign 0 65 535 (216 nombres) unsigned
(unsigned short, unsigned short int)
(2 octets) short b;
Entier sign (int, signed int) -2 147 483 648 2 147 int c;
483 647 (4 octets =232
nombres)
Entier non sign (int, unsigned 0 4 294 967 295(232 unsigned d;
int, unsigned) nombres)
Entier long sign (long, long int, -2 147 483 648 long a,b;
signed long, signed long int) +2 147 483 647 (4 octets)
Entier long non sign (unsigned 0 unsigned
long, unsigned long int) 4 294 967 295 (232) long c;
Structure dun programme en C
Les types standards et oprations appropries.
Le type char: Est utilis pour reprsenter les
caractres.
On distingue le type char et unsigned char.
Un octet suffit pour reprsenter le type char
De 0 255 pour les unsigned char
De -128 127 pour les signed char (pour
reprsenter les nombres signs en complment 2).
Exemple: char A,B; /*dclare deux variables de type
char*/
Structure dun programme en C
Les types standards et oprations appropries.

Chaque caractre est reprsent comme un


entier avec le code ASCII: ( American Standard
Code for Information Interchange)
Exemple: les codes des lettre A Z sont de 65
90. Pour les lettres de a z ce sont les valeurs
de 97 122 qui les reprsentent.
Structure dun programme en C
Les types standards et oprations appropries.
Une valeur de type caractre est mise entre quotes lors de son
utilisation par exemple. If (c==B) {..}
Si une valeur nest pas mise entre quotes, cela veut dire que le
nombre utilis est un code ASCII.
Exemple:
char c;
c=100;
printf("la valeur de c est %c\n",c); /* affiche d (code 100) */
c='9';
printf("la valeur de c est %c\n",c); /* affiche 9 (caractre)*/
printf("la valeur de c est %d\n",c); /* affiche 57 (code du
caratre 9)*/
Structure dun programme en C
Les types standards et oprations appropries.
Affichage des lettres correspondant aux codes ASCII
de 65 90.
int main()
{
char i;
for(i=65;i<=90;i++)
/* afficher les majuscules pour les codes de 65 90*/
printf("%d=%c\n",i,i);
return 0;
}
Lexcution donne les lettres A Z avec leurs codes respectifs
Structure dun programme en C
Les types standards et oprations appropries.
Le type Float et double: Les nombres rels sont
reprsents par les types float (4 octets) et double (8octets).
Les nombres rels sont reprsents gnralement en virgule
flottante qui offre une certaine prcision. Cette
reprsentation se base sur une mantisse et un exposant.
Exemple: 2.12E 5 vaut 2.12 X 10-5 = 0.0000212
Dclaration:
Float a;
Double b;
Structure dun programme en C
Les types standards et oprations appropries.
Remarques sur les types standards:
A- Les chaines de caractres
Il nexiste pas de type pour les chaine de
caractres. Ces dernires sont reprsentes par
des tableaux.
Un bibliothque standard offre plusieurs
fonctions manipulant les chaines de caractres
(#include <string.h>)
Une chaine de caractre est lue ou crite avec
le symbole %s dans un scanf ou printf.
Structure dun programme en C
Les types standards et oprations appropries.
Remarques sur les types standards:
B- Changement du nom dun type standard
On peut changer le nom dun type avec typedef
Exemple:
#include <stdio.h>
typedef float reel;
int main()
{ reel r;
r=r*2;
}
Structure dun programme en C
Les types standards et oprations appropries.
Programme qui donne la taille de chaque type standard
#include <stdio.h>
int main()
{
printf("\n %d octets pour une variable de type short int ",sizeof(short int));
printf("\n %d octets pour une variable de type int ",sizeof(int));
printf("\n %d octets pour une variable de type long int ",sizeof(long int));
printf("\n %d octets pour une variable de type float ",sizeof(float));
printf("\n %d octets pour une variable de type double ",sizeof(double));
printf("\n %d octets pour une variable de type char ",sizeof(char));
return 0;
}
Structure dun programme en C
Les types standards et oprations appropries.
Structure dun Programme C
Les types standards et oprations appropries.
Les oprations utilises sont des oprations arithmtiques et
logiques et des oprations de comparaison.
Oprations arithmtiques: +, -, /, *, %(modulo). On
peut utiliser aussi ++, -- pour lincrmentation et la
dcrmentation (exemple i++; est identique i=i+1;)
Opration logiques: ! (non), && (et), || (ou)
Oprations de comparaison: == (gal), <, <=,>, >=,
!= (non gal)
Lordre de priorit des oprateurs est le mme quil a
t signal au niveau du cours dalgorithmique.
Structure dun Programme C
Les types standards et
oprations #include <stdio.h>
appropries. #include <math.h>
Remarque: La int main()
bibliothque math.h {
offre des fonctions int a,b,c;
mathmatiques tels que: scanf("%d %d",&a,&b);
pow (calcul de la c=pow(a,b);
puissance, sin, cos, printf("%d",c);
tan,.. }
Laffectation et la conversion des types
Laffectation se fait avec le signe = (Exemple: A=5;)
On peut crire en C des expressions telles que:
A(opration)=b quivalente a=a (opration) b
Exemples:
a*=b ; quivalente a=a*b;
a+=b; quivalente a=a+b;
Laffectation peut tre fausse si les types ne sont pas
compatibles ou si la conversion de type nest pas
possible.
Laffectation et la conversion des types
Si un entier, par exemple, reoit un float ou un
double, il peut y avoir perte de prcision.

float a; int b=2;


a=b;
printf("la valeur de a est %f",a); /* a gal 2.0 */
a=1.75;
b=a;
printf("la valeur de b est %d",b); /*b gal 1: perte de
prcision*/
Laffectation et la conversion des types
Exemples de conversions explicites (cast)
La conversion peut tre force en spcifiant le type
que lon veut obtenir dune variable.
Conversion dun float en un entier:
int k; float f=4.15; k=(int) f;
k va tre gal 4

Conversion dun entier en un caractre:


int a=115; char c; c=(char)a; c va tre gal s.
Structure dun programme en C
Exemples de
conversions #include "stdio.h"
explicites (cast) int main()
Les oprations sur le {
type INT gnrent un int a,b;
rsultat de type int scanf("%d %d",&a,&b);
mme si lon divise un printf("Rsultat:%f",(float)a
nombre entier par un /(float)b);
autre. Pour avoir une }
division rel on doit
convertir les entiers en
rels.
Les entres sorties
La lecture et lcriture ncessitent de faire
appel la bibliothque dentres/sorties
appele stdio.h
Stdio: standard input output
h pour fichier header: entte
On utilise bien souvent:
scanf pour lire des donnes partir du
clavier et
printf pour afficher les rsultats sur cran
Les entres sorties
Mais on peut galement utiliser pour le type
caractre:
Putchar(B); /* affiche le caractre B */
putchar(66); /* affiche B car son code est
66 */
Puts(" bonjour"); pour crire un message et
passer la ligne suivante.
A=Getchar(); pour stocker le valeur
introduite dans A (de type char) partir du
clavier.
Les entres sorties
Affichage des messages et valeurs des
variables. On utilise printf de cette manire:
Exemples:
printf(" bonjour");
printf(" bonjour\n"); /* saut de ligne aprs
bonjour */
printf(" %d est plus petit que %d\n", a,b );
/* pour deux entiers a et b, on affiche que a est plus
petit que b puis passe la ligne suivante avec \n */
Les entres sorties
Liste des symboles utiliss pour crire des variables
de diffrents types.
Symbole Type Dautres symboles
%d ou %i Entier %o (octal), %x et %X(hexadecimal
miniscule ou majuscule)
%f Float %e (mantisse, exposant), %g(criture
courte), %
.nf (n nombre de chiffres aprs la virgule)
%lf Double
%c Caractre
%s Chaine de
caractre
Les entres sorties
Saisie des donnes partir du clavier: On
utilise scanf de cette manire:
Exemples:
scanf("%d" ,&a); /* ici & spcifie ladresse de a et il
est obligatoire sauf pour une chaine de caractre*/
scanf("%d %f" ,&a,&p); /* on lit deux variables
la fois: un entier et un float */
%d : lecture des entiers, %u: unsigned int
%f: lecture des float , %lf: lecture des double
%c: lecture des caractres, %s: lecture des chaines
Les entres sorties
Exemple: Programme qui affiche la partie entire et
fractionnaire dun rel sur deux positions:
#include "stdio.h"
int main()
{
float p=12.345;
printf("La partie entire est:%d et la partie fractionnaire
est:%.2f",(int)p,p-(int)p);
}

Le rsultat sera:
La partie entire est:12 et la partie fractionnaire est: 0.35
Les entres sorties
Remarque 1: Si on veut crire une variable sur n
position alors on met entre % et son symbole de
type la valeur de n.
Exemple: printf(" %5d",a);
printf va afficher lentier a sur 5 positions.
Remarque 2: Si on ne veut pas quune chaine de
caractres dpasse la limite du tableau allou , on
donne le nombre de caractres tolrs (n-1) dans le
scanf.
Exemple: char nom[9]; scanf("%8s",nom); le 9eme
est prvu pour \0 .
Les structures de contrle
La structure Les structures
conditionnelle alternatives
if (condition) if (condition)
{ action A; (bloc { action A; (bloc
dactions) dactions)
} }
else
Remarque: On peut supprimer
les accolades si on a une seule { action B; (bloc
instruction sous la condition de if dactions)
ou celle de else . }
Les structures de contrle
Exercice sur lalternative: Soit afficher la plus
petite valeur entre deux nombres entiers
#include <stdio.h>
/* plus_petit entre deux nombre */
int main()
{int A,B,M;
printf("Donnez deux valeurs entires comparer\n");
scanf("%d %d",&A,&B);
if (A<B)
{ M=A;} /* les accolades ne sont pas utiles pour une seule action */
else {M=B;}
printf("la plus petite valeur entre:%d et %d est:%d\n",A,B,M);
return 0;
}
Actions simples et structures de contrle
Le choix multiple:
switch (expression)
{
case valeur1: Action 1 (groupe dactions1); break
case valeur2: Action 2; (groupe dactions2); break
case valeur3: Action 3 ; (groupe dactions3); break

case valeurn: Action n ; (groupe dactionsn); break


default: action n; /* default nest pas obligatoire */
}
Exemple de programme utilisant un switch
#include <stdio.h>
int main()
{ int a,b; char choix;
printf("Donnez deux nombres entiers\n");
scanf("%d %d",&a,&b);
printf("Entrez l'operation vouloir effectuer entre les deux nombres)\n");
puts("1--> Addition 2--> soustraction 3--> multiplication");
getchar(); choix=getchar();
switch (choix)
{ case '1':printf("la somme est: %d\n",a+b); break;
case '2':printf("la difference est: %d\n",a-b);break;
case '3':printf("le produit est: %d\n",a*b); break;
default: printf("Il faut introduire un choix \n"); }
return 0; }
Les structures de contrle
La boucle FOR
for (valeur initiale; valeur finale;
incrmentation)
{
Bloc dinstructions
}
Exemple 1:Multiplier une variable 5 fois par elle
mme
#include <stdio.h>
/* puissance 5 */
int main()
{int A,P,i;
printf("Donnez une valeur\n");
scanf("%d",&A);
P=1;
for (i=1;i<=5;i++)
{ P*=A;} /* les accolades ne sont pas utiles pour une seule action
*/
printf("%d puissance 5 vaut %d \n",A,P);
return 0;
}
Exemple 2: Somme de 1 10 (boucle for avec
un compteur qui se dcrmente)
#include <stdio.h>
/* sommes des 10 nombres de 10 1 */
int main()
{int S,i;
printf("la somme est:\n");
S=0;
for (i=10;i>=1;i--)
S+=i;
printf("%d\n",S);
return 0;
}
Les structures de contrle
La boucle while
do
while (expression) {
{ Action1;
Action1; Action2;
Action2;
}
} while (expression)
Exemple: Programme qui sarrte quand lutilisateur devine la
valeur cache
#include <stdio.h>
#define quoi 12
int main()
{
int a,trouv=0;
while(trouv==0)
{ printf("Introduire une valeur entre 1 et 20\n");
scanf("%d",&a);
if (a==quoi)
{ puts("BRAVO, vous avez gagn!!!");
trouv=1;
} else puts("Faux, donnez une autre valeur"); }
return 0;
}
Les Types complexes
Les tableaux
Dclaration dun tableau une dimension
Type_tableau nom_tableau[taille_tableau];
Exemple:
IntT[15]; (dclaration dun tableau de 15 lments)

Dclaration dun tableau plusieurs dimensions


Type_tableau nom_tableau[taille_dimension1]
[taille_dimension2][taille_dimensionn];
Le premier lment dune tableau est dindice 0. et le
dernier est dindice taille_tableau - 1
Les Types complexes
Les tableaux
Initialisation dun tableau une dimension
On peut dclarer et initialiser un tableau une dimension
selon lexemple suivant:
intT[4]={12,-2,25,6};
Initialisation dun tableau plusieurs dimensions
On peut dclarer et initialiser un tableau deux
dimensions selon lexemple suivant:
intT[2] [3]={{12,-2,6}, {1,0,-3}};
Exemple: somme des lments dun tableau

#include <stdio.h>
int main()
{
int T[9]; /*tableau de 9 lments T[0] T[8]*/
int i,S=0;
for(i=0;i<9;i++) scanf("%d",&T[i]);
for(i=0;i<9;i++) S+=T[i];
printf("La somme est: %d\n",S);
return 0;
}
Exemple: Calcul de la somme des lments de
chaque ligne du tableau dune matrice
#include <stdio.h>
int main()
{ int T[3][2]; /* 3lignes et 2 colonnes */
int i,j,S;
puts("Vous allez calculer la somme de chaque ligne d'un tableau 3X 2");
for(i=0;i<3;i++)
{ S=0;
printf("introduire les lments de la ligne d'indice %d \n",i);
for (j=0;j<2;j++)
{ scanf("%d",&T[i][j]); S+=T[i][j]; }
printf("La somme des lments de la ligne d'indice %d est %d\n",i,S); }
return 0; }
Les Types complexes
Le type structure (enregistrement)
Dclaration:
Struct nom_structure
{
type1 nom_variable1;

typen nom_variablen :
};
Exemple
Struct etudiant Puis on dclare une
{ variable de ce type
char nom[20]; comme suit:
Int age; struct etudiant e;
};
Les Types complexes
Les structures
Accs un champ donn dune variable:
Un champ est accessible en spcifiant tout dabord le nom de
la variable suivi dun point suivi du nom du champ
correspondant.
Variable_i=nom_variable.nom_champ

Exemple (si e est de type etudiant dclar prcdemment)


N=e.nom;
M=e.moyenne;
#include <stdio.h>
struct etudiant Exemple : Soit comparer lge de
{ char nom[20]; int age;}; deux tudiants
int main()
{ struct etudiant e1,e2;
puts("Introduire le nom puis l'age du premier etudiant");
scanf("%s %d",&e1.nom,&e1.age);
puts("Introduire le nom puis l'age du deuxime etudiant");
scanf("%s %d",&e2.nom,&e2.age);
if (e1.age==e2.age) printf ("%s est de mme age que:
%s",e1.nom,e2.nom);
else if (e1.age<e2.age) printf ("%s est plus jeune que:
%s",e1.nom,e2.nom);
else printf ("%s est plus jeune que: %s",e2.nom,e1.nom);
return 0; }
Un complment sur
le langage C
Le Type numr
Le type numr sert numrer des entiers mais crits
sous forme explicite sous forme textuelle.
Exemples:
enum cycle_enseignement {primaire, moyen, secondaire,
universitaire};
enum equipement {ordinateur, imprimante, tablette,
tlphone, scanner, camera};

Les valeurs correspondantes ces constantes commencent


par 0,1, donc primaire=0, moyen= 1,
Il peuvent tre avec des valeurs au pralable:
enum booleen {vrai=1,faux=0};
Exemple1 de programmes utilisant le type numr
#include <stdio.h>
enum jours{Dimanche, Lundi, Mardi, Mercredi, Jeudi,Vendredi, Samedi};
int main()
{
enum jours j;
printf("Quelle est la journe d'aujourdhui (entrez un numro)?\n");
printf("0-->Dimanche\n"); printf("1-->Lundi\n");
printf("2-->Mardi\n"); printf("3-->Mercredi\n");
printf("4-->Jeudi\n"); printf("5-->Vendredi\n");
printf("6-->Samedi\n");
scanf("%d",&j);
if (j==Samedi || j==Vendredi) printf("Bon Weekend\n");
else printf("Bon courage\n");
return 0;
}
Exemple 2: type numr boolen
#include <stdio.h>
enum booleen {vrai=1,faux=0}; /* si on n'affecte pas les valeurs vrai
et faux vrai aura 0 comme valeur et faux 1*/
int main()
{
enum booleen inf;
int a,b;
printf("entrez deux entiers)\n");
scanf("%d %d",&a,&b);
inf=a<b;
if (inf==vrai) printf("%d est inferieur %d",a,b);
else printf("%d est superieur ou egal %d",a,b);
return 0;
}
Tout sur les chaines de caractres
A: On peut initialiser une chaine de caractres comme
suit:
char chaine[]= "Bonjour" ; /*la 8eme case contiendra \0*/
char chaine[]={B,o,n,j,o,u,r,\0};
char chaine[20]= "Bonjour" ; /*Les cases vides peuvent tre
utilises par la suite */
B:Avec stdio.h on peut utiliser les fonctions:
scanf et printf en spcifiant la lettre s aprs %.
Puts pour crire une chaine et passer la ligne suivante
gets pour lire un texte jusqu la rencontre dun retour chariot
\n qui est remplac par \0
Quelques fonctions de traitement des chaines de caractres
Dans lentte mettre #include <string.h>
Fonctionnalit Exemple
Longueur dune chaine A=strlen(chaine);
Comparaison de deux If (strcmp(chaine1,chaine2)==0) printf (les
chaines deux chaines sont identiques);
Concatnation de deux strcat(chaine1, chaine2); / * La taille de chaine1
chaines doit accepter la chaine supplmentaire chaine2*/
Copie dune chaine strcpy(chaine1, chaine2);
chaine 2 vers chaine1
Copie au plus n strncpy(chaine1,chaine2, n) ;
caractres de chaine 2
vers chaine1
Concatner n caractres strncat(chaine1,chaine2,n;
de chaine2 avec chaine1
Quelques fonctions de traitement des chaines de
caractres
/* Exemple dutilisation de strcat */
#include <stdio.h>
#include <string.h>
int main()
{
char ch1[20]="bonjour",ch2[]="ami";
strcat(ch1,ch2);
printf("%s\n",ch1);
return 0;
}
Dautres oprateurs utiliss dans C
Loprateur conditionnel ternaire
(condition) ? expression1 : expression2
Si la condition est vrifie, cest lexpression 1 qui est
excute sinon cest lexpression2.

Exemple
(a<0)?-a:a; ceci est quivalent
if (a<0) a=-a;
Dautres oprateurs utiliss dans C
La virgule dans une expression
Nom_variable= expression1, expression2, ... ,
expressionN
Cela signifie quil faut valuer toutes les expressions
par ordre et affecter le rsultat de lexpression N
Nom_variable.
Exemple
f=((x=3),(x+=y),(x*x)); /* f contiendra x*x aprs
valuation des expressions prcdentes.
Dautres instructions

break: arrte le traitement en cours (boucle,


chix multiple et passe au bloc suivant).
Continue: nexcute pas les instructions qui
suivent et revient la condition de la boucle
par exemple.
Goto: Branchement une instruction
donne du programme spcifie par son
nom suivi de :.
Gnration de nombres alatoires avec srand et rand
On utiliser la fonction rand qui est une fonction de la
bibliothque stdlib.h #include <stdlib.h>
Rand retourne une valeur entre 0 et RAND_MAX
(=2147483647). Cela peut entrainer la rptition de la mme
faon des valeurs alatoires ce qui nest pas intressant
utiliser la bibliothque time.h pour nous donner une autre
valeur maximale qui change (nombre de secondes depuis
janvier 1970 0h).
La fonction srand permet dinitialiser le gnrateur de
nombres alatoires avec un autre point de dpart.
On utilise la fonction modulo pour nous retourner une valeur
dans un intervalle choisi par lutilisateur.
Gnration de nombres alatoires avec srand et rand
Exemple: affichage de 10 nombres rels entre 0 et 1 (source: Rmy
Malgouyres, Rita Zrour, Fabien Feschet, Initiation lalgorithmique et la
programmation en C , Edition Dunod, 2014)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
double x;
srand(time(NULL));
for (i=0;i<10;i++)
{
x=rand()/((double)RAND_MAX);
printf("%.4f\n",x);
}
return 0;
}
Gnration de nombres alatoires avec srand et rand
Pour obtenir un nombre alatoire entre 0 et 10 par exemple, il
faut utiliser le modulo avec rand(): rand() % 11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int A,MIN,MAX;
srand(time(NULL));
printf("Donner les limites pour le nombre alatoire\n");
printf("MIN: "); scanf("%d",&MIN);
printf("MAX: "); scanf("%d",&MAX);
printf("\n");
printf("Voici une valeur entre %d et %d: %d\n",MIN,MAX,rand() % (MAX-MIN+1));
return 0; }
Remarque: Si on veut une valeur entre min et max avec min
diffrent de 0 alors on rajoute min rand() % (MAX-MIN+1)
+MIN
Ressources bibliographiques

Claude DELANNOY, Langage C, Edition


Eyrolles, 2002
Rmy Malgouyres, Rita Zrour, Fabien Feschet,
Initiation lalgorithmique et la programmation en
C , Edition Dunod, 2014
El Sakaan Nadim, Programmation en langage C ,
ditions pages bleues.

Anda mungkin juga menyukai