« Exercices en langage C/Pointeurs » : différence entre les versions
Contenu supprimé Contenu ajouté
mAucun résumé des modifications |
mAucun résumé des modifications |
||
Ligne 3 : | Ligne 3 : | ||
Soit un texte donné par une chaîne de caractères. Le but est de compter le nombre d'occurrences de chaque lettre sans distinction entre minuscules et majuscules. |
Soit un texte donné par une chaîne de caractères. Le but est de compter le nombre d'occurrences de chaque lettre sans distinction entre minuscules et majuscules. |
||
==Exercice 1== |
|||
===Question 1=== |
===Question 1=== |
||
Déclarer le texte comme un tableau statique initialisé par une chaîne de caractères constante, un tableau d'entiers statique pour compter les occurrences dont la taille est fixée par une constante et un pointeur pour parcourir le texte. |
Déclarer le texte comme un tableau statique initialisé par une chaîne de caractères constante, un tableau d'entiers statique pour compter les occurrences dont la taille est fixée par une constante et un pointeur pour parcourir le texte. |
||
Ligne 22 : | Ligne 23 : | ||
</source> |
</source> |
||
}} |
}} |
||
===Question 2=== |
===Question 2=== |
||
Ligne 68 : | Ligne 67 : | ||
}} |
}} |
||
==Exercice 2== |
|||
===Pointeurs et références=== |
|||
Donner et expliquer le résultat de l'exécution du programme suivant : |
|||
<source lang="C"> |
|||
#include <stdio.h> |
|||
#define taille_max 5 |
|||
void parcours(int *tab){ |
|||
int *q=tab; |
|||
do { |
|||
printf("%d:%d\n", q-tab, *q-*tab); |
|||
} |
|||
while (++q-tab < taille_max); |
|||
} |
|||
void bizarre(int **copie, int *source){ |
|||
*copie=source; |
|||
} |
|||
int main(void){ |
|||
int chose[taille_max] = {1,3,2,4,5}, *truc; |
|||
printf("chose : \n"); |
|||
parcours(chose); |
|||
bizarre(&truc, chose); |
|||
printf("truc : \n"); |
|||
parcours(truc); |
|||
return 0; |
|||
} |
|||
</source> |
|||
[[Catégorie:Exercices en langage C (livre)]] |
[[Catégorie:Exercices en langage C (livre)]] |
Version du 24 septembre 2007 à 14:56
Soit un texte donné par une chaîne de caractères. Le but est de compter le nombre d'occurrences de chaque lettre sans distinction entre minuscules et majuscules.
Exercice 1
Question 1
Déclarer le texte comme un tableau statique initialisé par une chaîne de caractères constante, un tableau d'entiers statique pour compter les occurrences dont la taille est fixée par une constante et un pointeur pour parcourir le texte.
Solution
#include <stdio.h>
const nb_lettres = 26;
int main(void){
char ch[]="ceci est une chaine de test"; //déclaration d'une chaine <=> tableau de caractères.
printf("Chaine en memoire : %s\n",ch);
char *p = ch; //déclaration d'un pointeur sur une chaine de caracteres.
int occ[nb_lettres]; //déclaration d'un tableau de 26 cases correspondant aux lettres de l'alphabet, contenant les occurrences des lettres trouvées dans la chaîne.
Question 2
Initialiser le vecteur d'entiers avec un parcours par indice.
Solution
int i=0;
for (i=0; i<nb_lettres;++i)
occ[i]=0; //initialisation du tableau des occurrences à 0.
Question 3
Compter les occurrences en utilisant la conversion entre le type char et le type int (la conversion d'un caractère donne son code dans le standard américain).
Solution
while (*p != '\0'){ //parcours de la chaine. Caractère de fin d'une chaine en C : '\0'.
if (*p >= 'a' && *p <= 'z'){
++occ[*p-'a'];
} else if (*p >= 'A' && *p <= 'Z'){
++occ[*p-'A'];
}
++p; //incrémentation du pointeur <=> passage à la lettre suivante.
}
Question 4
Afficher le résultat sur la sortie standard.
Solution
for (i=0; i<nb_lettres; ++i){
printf("Nombre de %c : %i\n",'a'+i,occ[i]); //le transtypage est automatique : 'a'+i renvoie un entier.
++p;
}
return 0;
}
Exercice 2
Pointeurs et références
Donner et expliquer le résultat de l'exécution du programme suivant :
#include <stdio.h>
#define taille_max 5
void parcours(int *tab){
int *q=tab;
do {
printf("%d:%d\n", q-tab, *q-*tab);
}
while (++q-tab < taille_max);
}
void bizarre(int **copie, int *source){
*copie=source;
}
int main(void){
int chose[taille_max] = {1,3,2,4,5}, *truc;
printf("chose : \n");
parcours(chose);
bizarre(&truc, chose);
printf("truc : \n");
parcours(truc);
return 0;
}