Concevoir une fonction "moyenne" qui calcule la moyenne d'un nombre n donné mais variable de réels.
#include <stdio.h>
#include <stdarg.h>
/* La fonction moyenne
Arguments :
n : le nombre de reels dans la liste d'arguments variable
... : une liste d'arguments de type double variable
Resultat :
la moyenne des reels de la liste d'arguments variable
*/
double moyenne (int n, ...) {
va_list listeReels;
int cptrArgs;
double somme;
va_start (listeReels, n);
for (somme = cptrArgs = 0; cptrArgs < n; cptrArgs++)
somme += va_arg (listeReels, double);
va_end (listeReels);
return (n != 0) ? (somme / n) : 0;
}
/* Le programme de test */
int main() {
printf("moyenne(2, 4.0, 6.0) = %f\n",
moyenne(2, 4.0, 6.0));
printf("moyenne(4, 4.5, 6.0, 7.25, 8.75) = %f\n",
moyenne(4, 4.5, 6.0, 7.25, 8.75));
printf("moyenne(0) = %f\n",
moyenne(0));
}
Concevoir une fonction "concaténation" qui concatène un nombre n donné mais variable de chaînes de caractères et les stocke dans une chaîne destination.
Comme il faut d'abord connaître la taille de la chaîne destination, il faut traiter deux fois la liste d'arguments variable, une fois pour calculer la taille de la destination et une deuxième fois pour y stocker les chaînes.
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/* La fonction concat
Arguments :
n : le nombre de chaines dans la liste d'arguments variable
... : une liste d'arguments de type char * variable
Resultat :
la concatenation des chaines
*/
char *concat (int n, ...) {
va_list listeChaines;
int cptrArgs;
size_t taille;
char *resultat;
va_start(listeChaines, n);
for (taille = cptrArgs = 0; cptrArgs < n; cptrArgs++)
taille += strlen(va_arg(listeChaines, char *));
va_end(listeChaines);
resultat = (char *) malloc(taille + 1);
if (NULL != resultat) {
va_start(listeChaines, n);
strcpy(resultat, "");
for (cptrArgs = 0; cptrArgs < n; cptrArgs++)
strcat(resultat, va_arg(listeChaines, char *));
va_end(listeChaines);
}
return resultat;
}
/* Le programme de test */
int main() {
printf("concat(4, \"Ceci\", \" est\", \" un\", \" test.\") = \"%s\"\n",
concat(4, "Ceci", " est", " un", " test."));
printf("concat(2, \"Ceci\", \" aussi\") = \"%s\"\n",
concat(2, "Ceci", " aussi"));
printf("concat(0) = \"%s\"\n",
concat(0));
}
|
|
© 2003, Pierre Mousel Veuillez faire parvenir toute remarque ou commentaire à Pierre Mousel |