Anda di halaman 1dari 27

M1.

2 SDI

Leon n 2 Complments C

STRUCTURES DE DONNES
Universit Med V Souissi

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

COMPLEMENT C Fonctions

Prof. A. EL FAKER ENSIAS 2008

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)

int f(int [],int ,int) Avertir le compilateur Faciliter la documentation

Prof. A. EL FAKER ENSIAS 2008

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 }

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Passage de paramtres entre fonctions

Prof. A. EL FAKER ENSIAS 2008

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

Prof. A. EL FAKER ENSIAS 2008

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); }

Prof. A. EL FAKER ENSIAS 2008

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; }

On passe des pointeurs


Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

CHANES DE CARACTRES

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Chaines de caractres
Dfinition Tableau de caractres termin par \0

char chaine[ ] = "MONT";

chaine

\0

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Chaines de caractres
Pourquoi les chanes sont-elle particulires

Parce que le langage fournit des chanes de caractres littrales


Un tableau anonyme de caractres de classe statique

"MONT"

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Chaines de caractres

char *p= "MONT"; //correcte


"MONT" est convertit en pointeur vers M qui affecte la valeur de p
p

T \0

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Chaines de caractres
Mais une rgle respecter
La modification dune chane littrale est interdite

char *p = "MONT"; p[0] = P ; //Interdit printf("MONT");


p

T \0

Prof. A. EL FAKER ENSIAS 2008

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

Prof. A. EL FAKER ENSIAS 2008

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); }

Prof. A. EL FAKER ENSIAS 2008

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

scanf("%s", ch) gets(ch)


Sarrte au premier ESPACE

puts(ch) printf("%s\n", ch)

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Traitement des chanes


Copie de chanes
Char *strcpy(char * s1, const char *s2 );

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

Traitement des chanes


Comparaison de chanes
int strcmp(const char * s1, const char *s2 );

Utilisation
#define identique(s1,s2) \ (! strcmp( (s1), (s2))

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

Traitement des chanes


Pour toutes les fonctions
Prototypes dclars dans: string.h Supposent que les chanes

Sont convenablement alloues Se terminent par \0

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

STRUCTURES en C

Prof. A. EL FAKER ENSIAS 2008

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;

struct article tv;

Prof. A. EL FAKER ENSIAS 2008

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;

article tv, *p;

Prof. A. EL FAKER ENSIAS 2008

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

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

STRUCTURES en C

Affectation

OK

article a; article copie; copie = a;

23798

989.50

23798

989.50

copie NON pourquoi ?

Comparaison

Prof. A. EL FAKER ENSIAS 2008

M1.2 SDI

Leon n 2 Complments C

STRUCTURES en C
Contraintes dalignement
Pour optimiser le temps daccs mmoire

Espaces ajouts par des compilateurs

2i code

design

prixUnit

quantite

tv

Prof. A. EL FAKER ENSIAS 2008

Anda mungkin juga menyukai