Exercice langage C
[tab name=’Exercice langage C’]
Exercice 1
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
Exercice 2
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.
Exercice 3
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.
[/tab][tab name=’Correction’]
Exercice 1
#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; }
Exercice 2
#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; }
Exercice 3
#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 '' 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; }
Exercice langage C
Exercice informatique, Correction exercice, exercices corrigés, Solution exercice, Exercice langage C
[/tab][end_tabset skin= »lightness » ]