Exercices langage C pointeurs et tableaux à deux dimensions
Ecrire un programme qui lit une matrice A de dimensions N et M au clavier et affiche les données suivantes en utilisant le formalisme pointeur à chaque fois que cela est possible:
a) la matrice A
b) la transposée de A
c) la matrice A interprétée comme tableau unidimensionnel
Ecrire un programme qui lit deux matrices A et B de dimensions N et M respectivement M et P au clavier et qui effectue la multiplication des deux matrices. Le résultat de la multiplication sera affecté à la matrice C, qui sera ensuite affichée. Utiliser le formalisme pointeur à chaque fois que cela est possible.
Ecrire un programme qui lit 5 mots d'une longueur maximale de 50 caractères et les mémorise dans un tableau de chaînes de caractères TABCH. Inverser l'ordre des caractères à l'intérieur des 5 mots à l'aide de deux pointeurs P1 et P2. Afficher les mots.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <stdio.h> main() { /* Déclarations */ int A[50][50]; /* matrice */ int N, M; /* dimensions de la matrice */ int I, J; /* indices courants */ /* Saisie des données */ printf("Nombre de lignes (max.50) : "); scanf("%d", &N ); printf("Nombre de colonnes (max.50) : "); scanf("%d", &M ); /* Lecture de la matrice au clavier */ for (I=0; I<N; I++) for (J=0; J<M; J++) { printf("Elément[%d][%d] : ",I,J); scanf("%d", (int *)A+I*50+J); } /* a) Affichage de la matrice */ printf("Matrice donnée :\n"); for (I=0; I<N; I++) { for (J=0; J<M; J++) printf("%7d", *((int *)A+I*50+J)); printf("\n"); } /* b) Affichage de la transposée de A */ printf("Matrice transposée :\n"); for (J=0; J<M; J++) { for (I=0; I<N; I++) printf("%7d ", *((int *)A+I*50+J)); printf("\n"); } /* c) Interprétation de la matrice comme vecteur : */ /* Attention, ce serait une faute grave d'afficher */ /*'simplement' les NxM premiers éléments de A ! */ printf("Matrice affichée comme vecteur :\n"); for (I=0; I<N; I++) for (J=0; J<M; J++) printf(" %d ", *((int *)A+I*50+J)); printf("\n"); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#include <stdio.h> main() { /* Déclarations */ int A[50][50]; /* matrice donnée */ int B[50][50]; /* matrice donnée */ int C[50][50]; /* matrice résultat */ int N, M, P; /* dimensions des matrices */ int I, J, K; /* indices courants */ /* Saisie des données */ printf("*** Matrice A ***\n"); printf("Nombre de lignes de A (max.50) : "); scanf("%d", &N ); printf("Nombre de colonnes de A (max.50) : "); scanf("%d", &M ); for (I=0; I<N; I++) for (J=0; J<M; J++) { printf("Elément[%d][%d] : ",I,J); scanf("%d", (int *)A+I*50+J); } printf("*** Matrice B ***\n"); printf("Nombre de lignes de B : %d\n", M); printf("Nombre de colonnes de B (max.50) : "); scanf("%d", &P ); for (I=0; I<M; I++) for (J=0; J<P; J++) { printf("Elément[%d][%d] : ",I,J); scanf("%d", (int *)B+I*50+J); } /* Affichage des matrices */ printf("Matrice donnée A :\n"); for (I=0; I<N; I++) { for (J=0; J<M; J++) printf("%7d", *((int *)A+I*50+J)); printf("\n"); } printf("Matrice donnée B :\n"); for (I=0; I<M; I++) { for (J=0; J<P; J++) printf("%7d", *((int *)B+I*50+J)); printf("\n"); } /* Affectation du résultat de la multiplication à C */ for (I=0; I<N; I++) for (J=0; J<P; J++) { *((int *)C+I*50+J)=0; for (K=0; K<M; K++) *((int*)C+I*50+J) += *((int*)A+I*50+K) * *((int*)B+K*50+J); } /* Edition du résultat */ printf("Matrice résultat C :\n"); for (I=0; I<N; I++) { for (J=0; J<P; J++) printf("%7d", *((int *)C+I*50+J)); printf("\n"); } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <stdio.h> main() { /* Déclarations */ char TABCH[5][51];/* tableau de chaînes de caractères */ char AIDE; /* pour la permutation des caractères */ char *P1, *P2; /* pointeurs d'aide */ int I; /* indice courant */ /* TABCH+I est l'adresse de la I-ième chaîne du tableau */ /* Il vaut mieux convertir TABCH+I en pointeur sur char */ /* Saisie des données */ printf("Entrez 5 mots :\n"); for (I=0; I<5; I++) { printf("Mot %d (max.50 caractères) : ", I); gets((char *)(TABCH+I)); } /* Inverser l'ordre des caractères à l'intérieur des mots */ for (I=0; I<5; I++) { P1 = P2 = (char *)(TABCH+I); /* Placer P2 à la fin de la chaîne */ while (*P2) P2++; P2--; /* sinon '\0' est placé au début de la chaîne */ while (P1<P2) { AIDE = *P1; *P1 = *P2; *P2 = AIDE; P1++; P2--; } } /* Affichage des mots inversés */ for (I=0; I<5; I++) puts((char *)(TABCH+I)); return 0; } |