Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
2 SDI
Leon n 2 Complments C
STRUCTURES DE DONNES
Universit Med V Souissi
M1.2 SDI
Leon n 2 Complments C
COMPLEMENT C Fonctions
M1.2 SDI
Leon n 2 Complments C
Fonctions en C
Dfinition int f(int tab[],int n,int x) { for(int i=0; i<n; i++) if(x == tab[i]) return 1; return 0; } f est une adresse int (* f) (int [],int,int) )
Prof. A. EL FAKER ENSIAS 2008
M1.2 SDI
Leon n 2 Complments C
Fonctions en C
Dclaration int f(int tab[],int n,int x)
M1.2 SDI
Leon n 2 Complments C
Fonctions en C
Type de retour int f() ; // Par dfaut void f() ; // Ne renvoie aucune valeur int [] Pas de tableau/ fonction/structure
article * saisie(void) { article a; Mais peut scanf(%s,a.design); tre un return (&a); pointeur }
M1.2 SDI
Leon n 2 Complments C
M1.2 SDI
Leon n 2 Complments C
Passage de paramtres
Transmission par valeur void echange(int a, int b){ int c =a; a=b; b=c; } main(){ int n=10, m=20; echange(n,m); } Pour permettre la modification d'un objet on doit passer son adresse et non une copie de sa valeur 10 20 10 20
M1.2 SDI
Leon n 2 Complments C
Passage de paramtres
Transmission par adresse void echange(int *pa, int *pb){ int c =*pa; *pa=*pb; *pb=*c;} main(){ int n=10, m=20; echange(&n,&m); } 10 20 20 10
Prof. A. EL FAKER ENSIAS 2008
M1.2 SDI
Leon n 2 Complments C
Passage de paramtres
Transmission par adresse Pour les structures et les fonctions float prixTotalHT(article *p,int q) { return (p->prixUnit * q); } double sqr(double x) {return x*x;} void show( double (*f) () ) { for (int i=0 ; i< 10 ; i++) printf("%d %e \n",i,f((double) i)); } main(){ show(sqr); }
M1.2 SDI
Leon n 2 Complments C
Pointeurs et tableaux
Exercice
a
6
3 Produit scalaire 4
b
2
7 5
12
21 20 53
int prodsc(int *a, int *b, int n){ for( int i=0,s=0; i<n ; i++) s += a[i] * b[i] ; return s; }
M1.2 SDI
Leon n 2 Complments C
CHANES DE CARACTRES
M1.2 SDI
Leon n 2 Complments C
Chaines de caractres
Dfinition Tableau de caractres termin par \0
chaine
\0
M1.2 SDI
Leon n 2 Complments C
Chaines de caractres
Pourquoi les chanes sont-elle particulires
"MONT"
M1.2 SDI
Leon n 2 Complments C
Chaines de caractres
T \0
M1.2 SDI
Leon n 2 Complments C
Chaines de caractres
Mais une rgle respecter
La modification dune chane littrale est interdite
T \0
M1.2 SDI
Leon n 2 Complments C
Entres/sorties de chanes
Perroquet: excution
Une premire ligne Une premire ligne Une seconde Une seconde Et la dernire ligne ^z Et la dernire ligne
M1.2 SDI
Leon n 2 Complments C
Entres/sorties de chanes
Perroquet: main
#include<stdio.h> #include<stdef.h> main( ) { char chaine[81]; if( gets (chaine) != NULL) puts (chaine); }
M1.2 SDI
Leon n 2 Complments C
Entres/sorties de chanes
char chaine[81]; if( gets (chaine) != NULL)
Remplace \n par \0 Retourne NULL si erreur Suppose que lallocation est dj faite
M1.2 SDI
Leon n 2 Complments C
Utilisation
#include<string.h> main( ){ char s1[120], s2[81]; // s2 // recopie s2 dans s1 strcpy(s1,s2); }
Prof. A. EL FAKER ENSIAS 2008
M1.2 SDI
Leon n 2 Complments C
Utilisation
#define identique(s1,s2) \ (! strcmp( (s1), (s2))
M1.2 SDI
Leon n 2 Complments C
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
Enregistrements
Une pure abstration
struct article int char float int } ; { code; design[25]; prixUnit; quantite;
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
Enregistrements
Un nouveau type
typedef struct int char float int } article; article { code; design[25]; prixUnit; quantite;
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
Accs aux champs
Un nouveau type
article tv, *p; tv . code =23798; Accs par valeur
p = & tv ; p -> prixUnit = 989.50; Accs par adresse code prixUnit p
23798
tv
989.50
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
Affectation
OK
23798
989.50
23798
989.50
Comparaison
M1.2 SDI
Leon n 2 Complments C
STRUCTURES en C
Contraintes dalignement
Pour optimiser le temps daccs mmoire
2i code
design
prixUnit
quantite
tv