« Exercices en langage C/Pointeurs » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
m <source> -> <syntaxhighlight> (phab:T237267) |
||
Ligne 9 : | Ligne 9 : | ||
{|style="width:70%;" |
{|style="width:70%;" |
||
|{{Boîte déroulante|titre=Solution|contenu = |
|{{Boîte déroulante|titre=Solution|contenu = |
||
< |
<syntaxhighlight lang="C"> |
||
#include <stdio.h> |
#include <stdio.h> |
||
#include <stdlib.h> |
#include <stdlib.h> |
||
Ligne 27 : | Ligne 27 : | ||
int occ[nb_lettres]; |
int occ[nb_lettres]; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
}} |
}} |
||
|} |
|} |
||
Ligne 34 : | Ligne 34 : | ||
Initialiser le vecteur d'entiers avec un parcours par indice. |
Initialiser le vecteur d'entiers avec un parcours par indice. |
||
{{Boîte déroulante|titre=Solution|contenu = |
{{Boîte déroulante|titre=Solution|contenu = |
||
< |
<syntaxhighlight lang="C"> |
||
/* initialisation du tableau des occurrences à 0. */ |
/* initialisation du tableau des occurrences à 0. */ |
||
int i=0; |
int i=0; |
||
for (i=0; i<nb_lettres;++i) |
for (i=0; i<nb_lettres;++i) |
||
occ[i]=0; |
occ[i]=0; |
||
</syntaxhighlight> |
|||
</source> |
|||
}} |
}} |
||
Ligne 45 : | Ligne 45 : | ||
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). |
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). |
||
{{Boîte déroulante|titre=Solution|contenu = |
{{Boîte déroulante|titre=Solution|contenu = |
||
< |
<syntaxhighlight lang="C"> |
||
/* parcours de la chaîne. |
/* parcours de la chaîne. |
||
Caractère de fin d'une chaîne en C : '\0'. */ |
Caractère de fin d'une chaîne en C : '\0'. */ |
||
Ligne 61 : | Ligne 61 : | ||
++p; |
++p; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
}} |
}} |
||
Ligne 67 : | Ligne 67 : | ||
Afficher le résultat sur la sortie standard. |
Afficher le résultat sur la sortie standard. |
||
{{Boîte déroulante|titre=Solution|contenu = |
{{Boîte déroulante|titre=Solution|contenu = |
||
< |
<syntaxhighlight lang="C"> |
||
for (i=0; i<nb_lettres; ++i) |
for (i=0; i<nb_lettres; ++i) |
||
Ligne 78 : | Ligne 78 : | ||
return 0; |
return 0; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
}} |
}} |
||
Ligne 84 : | Ligne 84 : | ||
=== Pointeurs et références === |
=== Pointeurs et références === |
||
Donner et expliquer le résultat de l'exécution du programme suivant : |
Donner et expliquer le résultat de l'exécution du programme suivant : |
||
< |
<syntaxhighlight lang="C"> |
||
#include <stdio.h> |
#include <stdio.h> |
||
#define taille_max 5 |
#define taille_max 5 |
||
Ligne 115 : | Ligne 115 : | ||
return 0; |
return 0; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
[[Catégorie:Exercices en langage C (livre)|Pointeurs]] |
[[Catégorie:Exercices en langage C (livre)|Pointeurs]] |
Version du 16 avril 2020 à 08:41
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>
#include <stdlib.h>
const int nb_lettres = 26;
int main(void)
{
/* déclaration d'une chaîne <=> tableau de caractères. */
char ch[]="ceci est une chaîne de test";
printf("Chaîne en mémoire : %s\n",ch);
/* déclaration d'un pointeur sur une chaîne de caracteres. */
char *p = ch;
/* 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.*/
int occ[nb_lettres];
}
|
Question 2
Initialiser le vecteur d'entiers avec un parcours par indice.
Solution
/* initialisation du tableau des occurrences à 0. */
int i=0;
for (i=0; i<nb_lettres;++i)
occ[i]=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
/* parcours de la chaîne.
Caractère de fin d'une chaîne en C : '\0'. */
while (*p != '\0')
{
if (*p >= 'a' && *p <= 'z')
{
++occ[*p-'a'];
}
else if (*p >= 'A' && *p <= 'Z')
{
++occ[*p-'A'];
}
/* incrémentation du pointeur <=> passage à la lettre suivante. */
++p;
}
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, /* le transtypage est automatique : 'a'+i renvoie un entier. */
occ[i]);
}
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;
}