Exercices en langage C/Tableaux statiques
Un livre de Wikibooks.
| Exercices en langage C |
| Sommaire |
| Livre |
| Modifier ce modèle |
[modifier] Parcours d'un tableau
Écrire un programme nommé argv.c qui affiche :
- son nom de lancement (argv[0]);
- le nombre des ces arguments;
- la valeur de chaque argument reçu.
Rappels : La fonction main d'un programme C reçoit en argument :
- un entier argc indiquant le nombre d'élément du tableau argv;
- un tableau de chaines de caractère argv avec :
- argv[0] : Nom d'appel du programme.
- argv[i] : Valeur de l'argument de rang i.
Solution
Le fichier source en c99 :
/* Nom : argv.c Auteur : Thierry46 Role : Affiche le nom de lancement du programme le nombre et les valeurs des paramètres passés passés à ce programme. Paramètres : - argc : nombre de paramètres - argv : tableau de chaine de caractere contenant les parametre Code retour : 0 (EXIT_SUCCESS) Pour produire un exécutable avec le compilateur libre GCC : gcc -Wall -std=c99 -o argv.exe argv.c Pour exécuter, tapez : ./argv.exe Version : 1.0 du 16/1/2008 Licence : GNU GPL */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // Affiche le nom de lancement du programme (void)printf("Nom d'appel du programme (argv[0]) : %s\n", argv[0]); // Affiche le nombre de parametre passe au programme (void)printf("Nombre de parametre passe au programme : %d\n", argc-1); // Affiche la valeur des parametres for (int i=1; i<argc; i++) { (void)printf("Parametre %d : %s\n", i, argv[i]); } return EXIT_SUCCESS; } // int main(...
MacMini-TM:~/Documents/developpement/c thierry$ gcc -Wall -std=c99 -o argv.exe argv.c MacMini-TM:~/Documents/developpement/c thierry$ ./argv.exe dudule 1 Nom d'appel du programme (argv[0]) : ./argv.exe Nombre de parametre passe au programme : 2 Parametre 1 : dudule Parametre 2 : 1
[modifier] Position d'un élément dans un tableau
Ecrire un programme position.c contenant une fonction principale main déterminant si un entier est contenu dans un tableau statique par l'appel à une fonction position.
La fonction main :
- définira et initialisera le tableau d'entier
- récupèrera dans son tableau d'argument argv le nombre à chercher.
- appellera la fonction position.
- affichera l'indice de l'élément dans le tableau ou un message indiquant que le nombre n'a pas été trouvé.
La fonction position :
- aura pour prototype :
static int position(int t[], int taille, int x). - donnera l'indice d'un élément x dans le tableau t, ou -1 si x n'est pas trouvé.
Solution
Le fichier source en C99 :
/* Nom : position.c Role : Affiche le nom de lancement du programme le nombre et les valeurs des paramètres passés passés à ce programme. Paramètres : - argc : nombre de paramètres - argv : tableau de chaine de caractere contenant les parametres Code retour : 0 (EXIT_SUCCESS) Pour produire un exécutable avec le compilateur libre GCC : gcc -Wall -std=c99 -o position.exe position.c Pour exécuter, tapez : ./position.exe Version : 1.0 du 16/1/2008 Licence : GNU GPL */ #include <stdio.h> #include <stdlib.h> static int position(int t[], int taille, int x); int main(int argc, char *argv[]) { int tableau[] = { 2, 5, 45, 3, 9 }; int taille; int x = 0; int cr = 0; int resultat; // Determination de la taille du tableau taille = (int)(sizeof(tableau)/sizeof(tableau[0])); // Controle nombre de parametre et affiche usage if (argc != 2) { (void)fprintf(stderr, "%s : Cherche un entier x passe en parametre\n" "usage : %s x\n", argv[0], argv[0]); (void)fputs("Valeurs contenues dans le tableau : ", stderr); for (int i=0; i<taille; i++) { (void)fprintf(stderr, "%d ", tableau[i]); } (void)fputs("\n",stderr); exit(EXIT_FAILURE); } // if (argc != 2) // Recupere le nombre passe en parametre et le convertit cr = sscanf(argv[1], "%d", &x); if (cr != 1) { (void)fprintf(stderr, "Erreur : parametre \"%s\" invalide : doit etre un entier.\n", argv[1]); exit(EXIT_FAILURE); } // if (cr != 1) // Appel de la fonction position et affichage du resultat. resultat = position(tableau, taille, x); if (resultat != -1) { (void)printf("La position de %d est : %d\n", x, resultat); } else { (void)printf("%d non trouve !\n", x); } return EXIT_SUCCESS; } /* Fonction ...... : position Role .......... : Retourne la position de l'entier x dans la tableau t Parametres .... : - t : tableau d'entiers passé en entier. - taille : nombre d'elements du tableau - x : valeur a rechercher. Retour : L'indice dans le tableau de l'élément x ou -1 si non trouve. */ static int position(int t[], int taille, int x) { // On commence la recherche à partir de la fin du tableau int indice = taille - 1; while ((indice >= 0) && (t[indice] != x)) { indice--; } return indice; } // static int position(...
MacMini-TM:~/c thierry$ gcc -Wall -std=c99 -o position.exe position.c MacMini-TM:~/c thierry$ ./position.exe ./position.exe : Cherche un entier x passe en parametre usage : ./position.exe x Valeurs contenues dans le tableau : 2 5 45 3 9 MacMini-TM:~/c thierry$ ./position.exe a Erreur : parametre "a" invalide : doit etre un entier. MacMini-TM:~/c thierry$ ./position.exe 5 La position de 5 est : 1 MacMini-TM:~/c thierry$ ./position.exe 99 99 non trouve !