# Exercices en langage C/Types

* 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 ]

## Exercice 1 : longueurs en octet des types du langage C

Écrivez un programme taille.c qui affiche à l'écran la taille des différents types de données en octet du langage C sur votre architecture machine.
Vous utiliserez l'opérateur sizeof(type).
* Solution
* Correction
* Nom : taille.c
* Auteur : Thierry46
* Role : affiche à l'écran la taille en octet des différents types de données
* du langage C sur votre architecture.
* Paramètres : non pris en compte.
* Code retour : 0 (EXIT_SUCCESS)
* Pour produire un exécutable avec le compilateur libre GCC :
* gcc -Wall -pedantic -std=c99 -o taille.exe taille.c
* Pour exécuter, tapez : ./taille.exe
* Version : 1.2 du 10/3/2008
* Licence : GNU GPL
* #include <stdio.h>
* #include <stdlib.h>
* #include <limits.h>
* int main(void)
* /* Affiche les tailles récupérées avec sizeof */
* (void)printf("Taille des types en octet :\n"
* "\t- type char : %zu\n"
* "\t- type short : %zu\n"
* "\t- type int : %zu\n"
* "\t- type long : %zu\n"
* "\t- type long long : %zu\n"
* "\t- type float : %zu\n"
* "\t- type double : %zu\n"
* "\t- type long double : %zu\n",
* sizeof(char)*CHAR_BIT/8,
* sizeof(short)*CHAR_BIT/8, sizeof(int)*CHAR_BIT/8,
* sizeof(long)*CHAR_BIT/8, sizeof(long long)*CHAR_BIT/8,
* sizeof(float)*CHAR_BIT/8, sizeof(double)*CHAR_BIT/8,
* sizeof(long double)*CHAR_BIT/8);
* return EXIT_SUCCESS;
* Résultats affichés sur ma machine :
* MacMini-TM:~/Documents/developpement/c thierry$ ./taille.exe
* Taille des types en octet :
* - type char : 1
* - type short : 2
* - type int : 4
* - type long : 4
* - type long long : 8
* - type float : 4
* - type double : 8
* - type long double : 16
* Remarques :
* L'opérateur sizeof renvoie un résultat de type size_t. L'unité du résultat est de type char. Un char ne mesure pas forcément un octet ou 8 bits sur toutes les architectures. C'est pourquoi, pour des raisons de portabilité, j'utilise la constante CHAR_BIT qui indique le nombre de bits qu'occupe un char.
* Une valeur de ce type size_t s'imprime avec le spécificateur de format %zu de printf.

## Exercice 2 : caractéristiques numériques des types du langage C

Écrivez un programme limites.c qui affiche à l'écran les caractéristiques numériques des différents types du langage C.
Vous utiliserez les constantes symboliques des includes limits.h et float.h.
* Solution
* Correction
* Nom ......... : limites.c
* Role ........ : Imprime les caractéristiques numériques
* pour les types du langage C
* Auteur ...... : Thierry46
* Version ..... : V1.1 du 10/3/2008
* Licence ..... : GNU GPL
* Compilation :
* gcc -Wall -pedantic -std=c99 -o limites.exe limites.c
* Pour exécuter, tapez : ./limites.exe
* #include <stdio.h>
* #include <stdlib.h>
* // Pour les limites lies aux entiers et char
* #include <limits.h>
* // Pour les limites lies aux nombres reels
* #include <float.h>
* int main(int argc, char *argv)
* // Impression des limites pour les nombres entiers
* (void)printf("CHAR_MIN = %d\n", CHAR_MIN);
* (void)printf("CHAR_MAX = %d\n", CHAR_MAX);
* (void)printf("INT_MIN = %d\n", INT_MIN);
* (void)printf("INT_MAX = %d\n", INT_MAX);
* (void)printf("LONG_MIN = %ld\n", LONG_MIN);
* (void)printf("LONG_MAX = %ld\n", LONG_MAX);
* // Impression des limites pour les réels
* (void)printf("FLT_EPSILON = %e\n", FLT_EPSILON);
* (void)printf("FLT_MIN = %e\n", FLT_MIN);
* (void)printf("FLT_MAX = %e\n", FLT_MAX);
* (void)printf("DBL_EPSILON = %le\n", DBL_EPSILON);
* (void)printf("DBL_MIN = %le\n", DBL_MIN);
* (void)printf("DBL_MAX = %le\n", DBL_MAX);
* return EXIT_SUCCESS;
* } /* int main(... */
* Résultats affichés sur ma machine :
* MacMini-TM:~/Documents/developpement/c thierry$ ./limites.exe
* CHAR_MIN = -128
* CHAR_MAX = 127
* INT_MIN = -2147483648
* INT_MAX = 2147483647
* LONG_MIN = -2147483648
* LONG_MAX = 2147483647
* FLT_EPSILON = 1.192093e-07
* FLT_MIN = 1.175494e-38
* FLT_MAX = 3.402823e+38
* DBL_EPSILON = 2.220446e-16
* DBL_MIN = 2.225074e-308
* DBL_MAX = 1.797693e+308