Algorithmique et structures de données II
Page 1
Séries des exercices
Première
partie
1
Algorithmique et structures de données II
Page 2
Exercice1:
Analyser le programme suivant:
void main()
{
int a[10], *pa, x;
a[0] = 11; a[1] =22; a[2] = 33; a[3] = 44;
pa = &a[0];
x = *pa;
pa++;
x = *pa;
x = *pa + 1;
x = *(pa + 1);
x = *++pa;
x = ++*pa;
x = *pa++;
}
Exercice2:
Interpréter les instructions suivantes:
char *pc;
int *pi,*pj,*pk;
float *pr;
pc = (char*)malloc(10);
pi = (int*)malloc(16);
pr = (float*)malloc(24);
pj = (int*)malloc(sizeof(int));
Série1 : Les pointeurs
Algorithmique et structures de données II
Page 3
pk = (int*)malloc(3*sizeof(int));
free(pi);
free(pr);
Exercice 3:
adr1 et adr2 sont des pointeurs pointant sur des réels. Le contenu de adr1 vaut -45,78; le contenu de
adr2 vaut 678,89. Ecrire un programme qui affiche les valeurs de adr1, adr2 et leur contenu.
Exercice 4:
Saisir un texte. Ranger les caractères en mémoire. Lire le contenu de la mémoire et y compter le
nombre d'espaces et de lettres e.
Exercice 5 :
Écrire une fonction int* concat_tab(int t1[], int n1, int t2[], int n2) qui prend en paramètres deux
tableaux et leurs tailles respectives, et qui renvoie leur concaténation. Il faudra allouer un nouveau
tableau pour contenir cette concaténation.
Exercice 6 :
Écrire une fonction char* concat_string(char* s1, char* s2) qui prend en arguments deux chaînes de
caractères et qui renvoie leur concaténation (il faut allouer un nouveau tableau pour la contenir).
Exercice 7 :
On se donne une structure «livre» :
typedef struct livre {
char titre[20];
int cote;
int prix;
} Livre;
On veut créer une bibliothèque de plusieurs livres, sous la forme d’un tableau de livres.
1) Écrire une fonction init qui renvoie un tableau de n livres, qui alloue la mémoire nécessaire et qui
initialise les champs à 0 ou à la chaîne de caractères vide.
2) Écrire une fonction qui permet la saisie d’un livre.
2) Écrire une fonction qui affiche un tableau de n livres.
4) Écrire une fonction qui fait l’échange des livres d’indice i et j dans le tableau de livres.
Algorithmique et structures de données II
Page 4
Exercice 1 :
Écrire une fonction récursive qui permet de calculer la factorielle d'un entier positif.
Exercice 2 :
Écrire une fonction récursive qui permet de calculer la somme des n (n 0) premiers termes (à partir
de 1 jusqu’à n).
Exercice 3 :
Écrire une fonction récursive qui permet de calculer les nombres de "Fibonacci" qui sont définis par :
Fibonacci (0) = 0,
Fibonacci (1) = 1,
et pour tout n > 1, Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2)
Exercice 4 :
Écrire une fonction récursive qui permet de calculer le plus grand diviseur commun de deux entiers
naturels strictement positifs.
Exercice 5 :
Écrire une fonction récursive qui permet de calculer la valeur de la fonction d’Ackermann définie de la
manière suivante pour m ≥ 0 et n 0 :
Acker(m, n) = Acker(m-1, Acker(m, n-1))
Acker(0, n) = n+1 pour n > 0
Acker(m, 0) = Acker(m-1, 1) pour m > 0
Série 2: La récursivité
Algorithmique et structures de données II
Page 5
Exercice 6 :
Il s’agit de calculer la somme des entiers allant de 0 à un entier donné N et qui ont la même parité
que N. Par exemple,
Pour la valeur 6, la fonction doit rendre la valeur 12. (6+4+2+0 = 12)
Pour la valeur 5, la fonction doit rendre la valeur 9. (5+3+1 = 9)
a) Écrire une fonction itérative permettant de résoudre ce problème.
b) Résoudre le même problème par une fonction récursive.
Exercice 7 :
Ecrire une fonction récursive qui teste si un nombre positif n est un multiple de 5.
Exercice 8
On souhaite écrire une fonction calculant la division par 2 d'un entier sans utiliser l'opérateur / mais
seulement les opérateurs + et -. Pour cela on remarque la propriété suivante :
Ecrire cette fonction d’une manière récursive.
Exercice 9
On souhaite écrire une fonction calculant le produit de deux entiers m et n sans utiliser l'opérateur *
mais seulement les opérateurs + et -.
Pour cela on remarque la propriété suivante :
Ecrire cette fonction d’une manière récursive.
1 / 40 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !