Exercices en langage C/Tableaux statiques
Apparence
Parcours d'un tableau
[modifier | modifier le wikicode]É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
[modifier | modifier le wikicode]É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 ! |