# Exercices en langage C/Tableaux statiques

* Préparation
* Notions de base
* Les variables et constantes
* Les types
* Les opérateurs
* Les structures de contrôle
* Les tableaux statiques
* Les fonctions
* Les chaînes de caractères
* Les pointeurs
* Le préprocesseur C
* Préparation
* Notions de base
* Les variables et constantes
* Les types
* Les opérateurs
* Les structures de contrôle
* Les tableaux statiques
* Les fonctions
* Les chaînes de caractères
* Les pointeurs
* Le préprocesseur C
[ Modifier le sommaire ]

## 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 chaînes 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
* Rôle : 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 chaînes de caractère contenant les paramètres
* 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 paramètres passés au programme
* (void)printf("Nombre de paramètres passés au programme : %d\n", argc-1);
* // Affiche la valeur des paramètres
* for (int i=1; i<argc; i++)
* (void)printf("Paramètre %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 paramètres passés au programme : 2
* Paramètre 1 : dudule
* Paramètre 2 : 1

## Position d'un élément dans un tableau

Écrire 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
* Rôle : 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 chaînes de caractères contenant les paramètres
* 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;
* // Détermination de la taille du tableau
* taille = (int)(sizeof(tableau)/sizeof(tableau[0]));
* // Contrôle nombre de paramètre et affiche usage
* if (argc != 2)
* (void)fprintf(stderr,
* "%s : Cherche un entier x passe en paramètre\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)
* // Récupère le nombre passé en paramètre 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 résultat.
* 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
* Rôle .......... : Retourne la position de l'entier x dans la tableau t
* Paramètres .... :
* - t : tableau d'entiers passé en entier.
* - taille : nombre d’éléments 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 paramètre
* 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 !