Chapitre V: Les types composés Pr Bouzid ENSA de Marrakech Programmation en lan
Chapitre V: Les types composés Pr Bouzid ENSA de Marrakech Programmation en langage C 1 Pr BOUZID Contenu du chapitre 1) Les tableaux à 1 dimension à 2 dimensions de caractères 2) Les structures 3) Définition de nouveaux types avec typedef Programmation en langage C 2 Pr BOUZID Les tableaux • Un tableau est un ensemble fini d’éléments de même type, stockés en mémoire à des adresses contiguës • Un tableau en C peut être à: • 1 dimension (vecteur) • 2 dimensions (matrice) ou plusieurs • Syntaxe de déclaration d’un tableau à 1 dimension: type nomdutableau[nombre-éléments]; • type: il s’agit des types standards: int, char, float, double… il est possible de mettre des types spécifiques (structures, pointeurs) • nombre-éléments: est une constante entière positive indiquant le nombre d’éléments que peut contenir le tableau Programmation en langage C 3 Pr BOUZID Les tableaux à 1 dimension • Exemple de déclaration: int tab[10]; • A la déclaration d’un tableau, un espace en mémoire lui est réservé dont la taille en octet est: dimension * taille du type Exemples: • short t[100]; → 200 octets seront réservés (100* 2octets) • int tab[10]; → 40 octets seront réservés (10* 4octets) • Remarque: il existe plusieurs manières de déclarer la constante entière de la dimension du tableau: • Avec une variable: Programmation en langage C 4 int main(){ int n = 5; int t[n]; … } Pr BOUZID Les tableaux à 1 dimension • Avec une constante : • Avec une saisie au clavier : Programmation en langage C 5 #define N 10 int main(){ int t[N]; … } int main(){ int n; printf("saisir la dimension du tableau: "); scanf("%d",&n); int t[n]; … } Pr BOUZID Les tableaux à 1 dimension • Initialisation du tableau à la déclaration: type nomdutableau[n] = {const-1,const-2,...}; • Exemple: int t[5] = {10, 20, 30, 40, 50}; • Il est possible de ne pas indiquer le nombre d’éléments à l’initialisation. Le nombre d’éléments sera égal au nombre de valeur de la liste d’initialisation • Exemple: int t[] = {10, 20, 30, 40, 50}; • Il est possible de ne pas initialiser tous les élements: dans ce cas, les éléments restants auront la valeur 0 à l’initialisation : • Exemple: int t[10] = {10, 20, 30, 40, 50}; • Remarque: la liste d’initialisation ne doit pas contenir plus de valeurs que le nombre d’élément du tableau • Exemple erroné: int t[4] = {10, 20, 30, 40, 50, 60, 70}; Programmation en langage C 6 Pr BOUZID Les tableaux à 1 dimension • Représentation d’un tableau t à 1 dimension de 10 éléments: • Chaque élément (case) est accessible par son indice. Un indice i d’un tableau commence toujours à 0 et s’arrête à n-1 • On écrit t[i] pour faire référence à l’élément i du tableau t. exemples: t[2] = 56; //56 est la valeur de l’élément d’indice 2 • Remarque: • La lecture et l’écriture dans un tableau se fait toujours élément par élément • L’utilisation des boucles (for, while, …) est nécessaire dans ce cas Programmation en langage C 7 t[0] t[1] t[2] t[3] t[4] t[5] t[6] t[7] t[8] t[9] Indices du tableau 0 1 2 3 4 5 6 7 8 9 Pr BOUZID Les tableaux à 1 dimension • Affectation: t[i] = valeur; • Exemple: t[0] = 23; t[1] = 50; t[2] = 8; • Saisie des éléments d’un tableau avec scanf() : • Résultat: Programmation en langage C 8 for(i=0; i<N; i++) { printf ("Saisissez t[%d]: ", i); scanf("%d", &t[i]); } Saisissez t[0]: 45 Saisissez t[1]: 28 Saisissez t[2]: 5 … //N est le nombre d’éléments du tableau Pr BOUZID Les tableaux à 1 dimension • Affichage des éléments d’un tableau t de N éléments: • Résultat de l’affichage: • Remarque: • Tous les opérateurs arithmétiques, relationnels, logiques, conditionnels, etc. (+, -, *, ==, >, <, …) utilisés avec les variables peuvent être utilisés avec les éléments d’un tableau Programmation en langage C 9 for(i=0; i<N; i++) printf(" %d \n", t[i]); 45 28 5 Pr BOUZID Les tableaux à 1 dimension • Exemple: Soit t un tableau de n entiers comme dans l’exemple. Compter le nombre d’entiers supérieur à 20: Programmation en langage C 10 #define n 6 … int i, c=0; int t[n]; //remplissage du tableau for(i=0; i<n; i++) { printf ("Saisissez t[%d]: ", i); scanf("%d", &t[i]); } //Comptage for (i=0; i<n; i++){ if (t[i]>20) c++; } printf (" le nombre d’entiers > à 20 est : %d", c); 18 49 36 2 78 15 0 1 2 3 4 5 Pr BOUZID Exercice d’application • Ecrire un programme qui, étant donné un tableau de 5 entiers, vérifie si un entier e saisi au clavier appartient au tableau Programmation en langage C 11 #include<stdio.h> #define N 5 int main(){ int i, e, d=0; //d est un flag qui vaut ici soit 0 soit 1 for(i=0; i<N; i++) { printf ("Saisissez t[%d]: ", i); scanf("%d", &t[i]); } printf("saisissez e: "); scanf("%d", &e); for(i=0;i<N;i++){ if(t[i]==e) {d=1; break;} } if(d==1) printf("\n%d appartient au tableau", e); else printf("\n%d n'appartient pas au tableau", e); return 0; } Pr BOUZID Exercice d’application • Ecrire un programme qui, étant donné un tableau de 5 entiers, affiche sa plus grande valeur Programmation en langage C 12 … //début du programme int i, max, n=5; int t[n]; … //remplissage du tableau avec scanf //recherche du max : max=t[0]; for(i=0;i<n-1;i++){ if(max<=t[i+1]){ max=t[i+1]; } } printf("\nla plus grande valeur du tableau est: %d", max); Pr BOUZID Les tableaux à 2 dimensions • Un tableau peut être de n dimensions • Syntaxe: type nomdutableau[N1][N2]…[Nn]; • Syntaxe de déclaration d’un tableau à deux dimensions : type nomdutableau[NbLignes][NbColonnes]; • Un tableau à deux dimensions t[n][m] contient n*m éléments. Lors de la déclaration, l’espace mémoire qui lui est réservé est: n*m* taille du type • Représentation d’un tableau t de taille n*m : Programmation en langage C 13 t[0][0] t[0][1] t[0][2] t[0][3] t[1][0] t[1][1] t[1][2] t[1][3] t[2][0] t[2][1] t[2][2] t[2][3] Ex: float t[3][4]; 3 lignes, 4 colonnes Pr BOUZID Les tableaux à 2 dimensions • Initialisation à la déclaration: • en utilisant une liste, les éléments sont initialisés ligne par ligne: int t[2][3] = {{10, 20, 30}, {40, 50, 60}}; • Dans le cas où on n’indique pas toutes les valeurs à l’initialisation, les valeurs manquantes seront initialisées à 0 • Affectation: • pour chaque élément t[i][j] du tableau t: t[0][0]=47; t[0][1]=12; … • Remplissage du tableau avec deux boucles : Programmation en langage C 14 for(i=0; i<N; i++){ for(j=0; j<M; j++){ printf ("\n Entrez la valeur de t[%d][%d]: \n ", i, j); scanf("%d", &t[i][j]); } } Pr BOUZID Les tableaux à 2 dimensions • Affichage des éléments d’un tableau t d’entiers de taille N*M: • Exemple de résultats pour un tableau t[2][4]: Programmation en langage C 15 for(i=0;i<N;i++){ for(j=0;j<M;j++){ printf("%d \t",t[i][j]); } printf("\n"); } 38 26 2 20 18 98 72 4 Pr BOUZID Exercice • Soit un tableau d’entiers à deux dimensions t[5][5]. Vérifier si les lignes d’indice pair ont les mêmes valeurs Programmation en langage C 16 2 2 2 2 2 4 6 2 6 1 5 5 5 5 5 1 4 3 5 8 8 8 8 8 8 … int i,j, init, d; int t[n][n]={{2,2,2,2,2},{1,2,3,4,5},{5,5,5,5,5},{1,2,3,4,5},{8,8,8,8,8}}; for(i=0;i<n;i+=2){ d=0; init=t[i][i]; // ou t[i][0] for(j=1;j<n;j++){ if(t[i][j]!=init) {d=1; break;} } if(d==0) printf("\nla ligne d'indice %d a des entiers de memes valeurs", i); } Pr BOUZID Les tableaux de caractères • Une chaîne de caractères est un tableau de caractères (de type char) • Syntaxe: char nomvariable[longueur]; • Exemple: char chaine[30]; • Une chaîne de N caractères a besoin de N+1 octets en mémoire: le dernier octet est réservé au caractère nul \0 marquant la fin de la chaîne • Remarque: Le nom d’une chaîne de caractères est le représentant de l’adresse en mémoire du 1er caractère de la chaîne. On peut donc aussi déclarer une chaîne à l’aide d’un pointeur (voir chapitre sur les pointeurs) Programmation en langage C 17 b o n j o u r \0 0 1 2 3 4 5 6 7 Pr BOUZID Les tableaux de caractères • Initialisation à la déclaration: • Soit en indiquant chaque caractère: char chaine[10] = {’b’,’o’,’n’,’j’,’o’,’u’,’r’,’\0’} char chaine[] = {’b’,’o’,’n’,’j’,’o’,’u’,’r’,’\0’} • Soit en indiquant une chaîne constante: char chaine[]= ″Bonjour″; • Lecture et écriture avec scanf et printf: • Le spécificateur de format utilisé est: %s • La chaîne est lue en une seule fois (pas besoin de parcourir le tableau de caractères): scanf (″%s″, chaine); printf("Ma chaine est: %s", chaine); Programmation en langage C 18 //pas de & dans scanf (chaine est déjà une adresse) Pr BOUZID Les tableaux de caractères • Plusieurs fonctions existent d ans la bibliothèque standard du langage C pour manipuler les chaînes de caractères • On en trouve notamment dans: stdio.h, string.h et stdlib.h • Avec stdio.h: • gets(chaine) : lit la chaîne de caractère désignée par chaine (équivalent d’un scanf): • Exemple: • puts(chaine): imprime à l’écran la chaîne de caractère chaine et provoque un retour à la uploads/Ingenierie_Lourd/ cours-langage-c-chapitre-v.pdf
Documents similaires










-
44
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 21, 2021
- Catégorie Heavy Engineering/...
- Langue French
- Taille du fichier 1.0183MB