Cours Langage C les pointeurs et les tableaux

Cours Langage C les pointeurs et les tableaux, tutoriel & guide de travaux pratiques langage C en pdf.

Deuxième partie : Types fondamentaux du C

ð En C il n’y a que 2 types fondamentaux, les entiers et les réels.
ð Pour les entiers : 4 variantes :
• Les caractères char
• Les entiers courts short int
• Les entiers longs long int
• Les entiers classiques int
Ces quatre variantes peuvent être signées ou non. ( unsigned), ce qui donne au total 8 types pour les entiers.
ð Pour les réels : 3 variantes :
• Les réels simple précision float
• Les réels double précision double
• Les réels quadruple précision long double;
Les entiers
Les caractères
ð En C un caractère est un entier car il s’identifie à son code ASCII (le plus souvent).
ð Un caractère peut donc être codé sur un octet.
ð On peut donc appliquer toutes les opérations entières sur les caractères (addition, soustraction …).
ð Problème, On ne sait pas si ce sont des entiers signés ou non, car cela dépend des machines. Les autres variantes du type entiers sont toujours signées par défaut (pas de unsigned).
car getchar () peut renvoyer -1 (et donc ce test ne fonctionnera que sur les machines ou les caractères sont signés).
Les autres entiers
ð Un entier correspond généralement à un mot machine.
ð Les attributs short, long, unsigned peuvent qualifier un entier
• long int x; /* x est un entier long (>= 32 bits) */
• short int x; /* x est un entier court */
• unsigned int x; /* x est un entier non signé */
• unsigned short int x; /* x est un entier court non signé */
ð Il n’y a pas de taille fixée par le langage, mais le C garanti que 1=T_C <= T_S <= T_I <= T_L
ð Les valeurs de T_C, T_S, T_I et T_L dépendent des machines
ð Un entier unsigned est un entier pour lequel le bit de signe est significatif.
ð Lorsque l’on utiliseles attributs short, long ou unsigned, on peut omettre le nom du type int.
• long x; /* x est un entier long (>= 32 bits) */
• short x; /* x est un entier court */
• unsigned x; /* x est un entier non signé */
• unsigned short x; /* x est un entier court non signé */
Les réels
ð Les float sont des réels codés de manière interne sous forme de mantisse/exposant.
ð Les double sont des float plus longs et les long double sont des doubles plus longs.
ð Plus la taille est grande, plus la mantisse est grande et plus la précision est grande.
ð Comme pour les entiers ces tailles sont dépendantes de la machine, le C garanti juste que T_F <= T_D <= T_LD
ð Tailles minimales :
char 1 octet
int et short int 2 octets
long int 4 octets
float 4 octets
double 8 octets
Les constantes
Constantes de type char
ð Elles n’existent pas en C,’a’est une constante int pas un char.
Constantes de type entières
ð Elles peuvent être écrites sous 4 formes
¤ caractère
• imprimable : ‘A’, ‘a’, ‘+’, ‘1’, ….
• non imprimable: ‘\n’, ‘\t’, ‘\b’, ….
• spéciaux: ‘\\’, ‘\ », ‘\ »‘, ….
• code octal : ‘\0’, ‘\126’
• Exemples de calculs sur les constantes caractère ‘a’ + ‘?’ vaut 160 car ‘a’ vaut 97 et ‘?’ vaut 63.
char c1,c2 ; int i ; c1=c2 + ‘a’ – ‘A’ ; i=c – ‘0’ ;
• décimal : un nombre qui ne commence pas par un 0 est en base 10 ex : 234
• octal : un nombre qui commence par 0 suivi d’un chiffre est en base 8 ex : 0234 = 4+3*8+2*64= 156
• hexadécimal : un nombre qui commence par un 0 suivi d’un x (ou X) est en base 16. ex : 0XABCD
ð Sous la forme numérique on peut dire explicitement quel type d’entier
on veut en rajoutant derrière la constante :
• u ou U : pour un unsigned
• l ou L : pour un long
• ul ou uL ou Ul ou UL : pour un unsigned long
• lu ou Lu ou lU ou LU : pour un unsigned long
ð Une constante numérique en base 10 est normalement un int. Si le nombre est trop grand le compilateur essaiera dans l’ordre les types long int, unsigned long int.
ð Une constante numérique en base 8 ou 16 est normalement un int. Si le nombre est trop grand le compilateur essaiera dans l’ordre les types unsigned int, long int, unsigned long int.
ð Les constantes de type short int et unsigned short int n’existent pas.
Constantes de type logique
ð Les constantes de type logique n’existent pas en tant que telle en C. On utilise la convention suivante sur les entiers :
0  faux et tout entier positif  vrai
Constantes de type réel
ð Les constantes double sont de la forme
<partie entière>.<partie fractionnaire> <e ou E><partie exposant>
¤ On peut omettre
soit <partie entière> : .475e-12
soit <partie fractionnaire> : 482.
mais pas les deux
¤ On peut omettre
soit . : 12e7
soit <partie exposant> : 12.489
mais pas les deux.
ð Les constantes long double sont des constantes double suivies de l ou L
ð Les constantes float sont des constantes double suivie de f ou F
Constantes chaine de caractères
ð Elles sont constituées de caractères quelconques encadrés par des guillemets. ex : « abc ».
ð Elles sont stockées en mémoire statique sous la forme d’un tableau de caractères terminé par la valeur ‘\0’ (valeur entière 0).

Expressions & Opérateurs

Expressions et opérateurs

ð Une expression est une notation de valeur. L’évaluation d’une expression est le processus par lequel le programme obtient la valeur désignée.
ð Une expression est constituée d’opérandes et d’opérateurs. Les opérandes dénotent les valeurs à composer. Ce sont des constantes (littéraux), des variables ou des expressions. Les valeurs sont essentiellement entières ou flottantes; les opérateurs sont alors associés à des opérations numériques
ð Dans le cas de types inadaptés, on peut convertir des valeurs d’un type en un autre selon une certaine hiérarchie :
• en C un type est surtout une taille mémoire. Il est évident qu’on ne peut convertir un objet d’une taille X et un objet d’une taille Y si X > Y…
• Le C définie la hiérarchie des tailles entre les types de la façon suivante : char < int < float < double
Les opérateurs arithmétiques
ð Les principaux opérateurs arithmétiques sont :
• + Addition
• – Soustraction
• * Multiplication
• / Division entière et réelle
• % Reste de la division entière (Modulo)
ð Ces opérateurs (sauf le %) sont applicables aussi bien à des entiers
ð Dans le cas de 2 opérandes entiers, le résultat de la division est entier, dans tous les autres cas, il est réel.
ð Dans le cas de la division entière,le C garantit que (si b <> 0) on a : (a/b)*b + a%b = a
ð En C, on dispose aussi du – unaire
Les opérateurs relationnels
ð Les principaux opérateurs relationnels sont :
• ==égalité (<> de l’affectation)
• != différence
• > supérieur
• >= Supérieur ou égal
• < Inférieur
• <= Inférieur ou égal
ð Les 2 opérandes doivent avoir le même type arithmétique. Si ce n’est pas le cas, des conversions sont effectuées automatiquement selon les
ð Le type BOOLEEN n’existe pas explicitement en C :les opérateurs de relation fournissent les valeurs 0 ou 1 (respectivement FAUX et VRAI) du type int.
ð En C, on peut écrire A < B < C car cette expression correspond à (A <
B) < C ce qui n’est probablement pas le résultat escompté par le programmeur : En effet si A < B, l’expression équivaut à 1 < C et sinon
Les opérateurs logiques
ð Les principaux opérateurs logiques sont :
• !Négation unaire d’une valeur logique
• &&ET de 2 valeurs logiques
• || OU de 2 valeurs logiques
ð Ces opérateurs interviennent sur des valeurs de type int : la valeur 0 est considérée comme la valeur FAUX; toutes les autres valeurs comme la valeur VRAI.
ð Les valeurs produites sont 0 (FAUX) ou 1 (VRAI) du type int.
ð Les opérateurs && et || impliquent l’évaluation de l’opérande gauche avant celle de droite.
ð L’opérande de droite peut ne pas être évalué si la valeur obtenue à partir de l’opérande de gauche suffit à déterminer le résultat :
• 0 pour l’opérande gauche de l’opérateur && implique FAUX
• 1 pour l’opérande gauche de l’opérateur || implique VRAI int Tab[10];
Soit le test : (k < 10) && (Tab[k] != v)
Si k est supérieur ou égal à 10 ,l’expression (Tab[k] != v) ne sera pas évaluée et il vaut mieux car pour k supérieur ou égal à 10 Tab[k] est
Priorités des opérateurs
ð Lors de l’évaluation des expressions, certaines règles sont appliquées systématiquement par le compilateur. Le programmeur doit donc en tenir compte lors de l’écriture d’un programme.
• Les opérateurs les plus prioritaires sont appliqués en premi er
• Les opérateurs de même priorité sont appliqués de la gauche vers la droite (sauf les opérateurs unaires qui sont appliqués de la droite vers la gauche)
• Si des sous-expressions parenthèsées sont présentes, les opérateurs présents dans celles-ci sont appliqués en premier
ð L’ordre des priorités des opérateurs déjà vus est le suivant (priorités
• ! – (opérateurs unaires)
• * / %
• + –
• <<=>=>
• == !=
• &&
• ||
ð Ainsi A + B * C est évalué comme A + (B * C)
ð Attention, tout programme qui dépend de l’ordre d’évaluation des opérandes doit être considéré comme incorrect, car pour la plupart des opérateurs il n’existe aucune règle et cela dépend du compilateur.

1. PREMIÈRE PARTIE : INTRODUCTION – DE L’APPLICATIF À L’IMPÉRATIF 
1.1. LES LANGAGES DE PROGRAMMATION.
1.2. LANGAGE C
2. DEUXIÈME PARTIE : TYPES FONDAMENTAUX DU C 
2.1. LES ENTIERS
2.2. LES RÉELS
2.3. LES CONSTANTES
3. TROISIÈME PARTIE : EXPRESSIONS & OPÉRATEURS 
3.1. EXPRESSIONS ET OPÉRATEURS
3.2. AUTRES OPÉRATEURS
3.3. CONVERSIONS NUMÉRIQUES
3.4. CONVERSIONS IMPLICITES
4. QUATRIÈME PARTIE : LES PRINCIPALES INSTRUCTIONS 
4.1. IF
4.2. IF … ELSE
4.3. WHILE
4.4. FOR
4.5. DO … WHILE
4.6. BREAK
4.7. CONTINUE
4.8. RETURN;
4.9. RETURN EXPRESSION
4.10. GOTO ÉTIQUETTE
4.11. SWITCH
5. CINQUIÈME PARTIE : LA PROGRAMMATION EN C 
5.1. LES FONCTIONS
5.2. STRUCTURE DES PROGRAMMES
5.3. COMMUNICATION ENTRE MODULES
5.4. UTILISATION DE MAKE
6. SIXIÈME PARTIE : LES POINTEURS ET LES TABLEAUX 
6.1. POINTEURS ET ADRESSES
6.2. OPÉRATIONS SUR LES POINTEURS
6.3. COMPARAISON DE POINTEURS
6.4. SOUSTRACTION DE POINTEURS
6.5. AFFECTATION DE CHAÎNES DE CARACTÈRES
6.6. POINTEURS ET TABLEAUX
6.7. PASSAGE DES PARAMÈTRES
6.8. POINTEURS ET TABLEAUX MULTIDIMENSIONNELS
6.9. REPRISE DES PREMIERS EXERCICES DE TD.
6.10. TABLEAUX DE POINTEURS
6.11. POINTEURS DE FONCTIONS
6.12. ALLOCATION DYNAMIQUE
7. SEPTIÈME PARTIE : STRUCTURES ET UNIONS 
7.1. DÉCLARATION DE STRUCTURE
7.2. INITIALISATION DE STRUCTURE
7.3. ACCÈS À UN CHAMP
7.4. UTILISATION DES STRUCTURES
7.5. TABLEAUX DE STRUCTURES
7.6. STRUCTURES ET POINTEURS
7.7. PASSAGE DE STRUCTURES COMME ARGUMENTS DE FONCTIONS
7.8. STRUCTURES RÉCURSIVES
7.9. LES UNIONS
7.10. SCHÉMAS D’IMPLANTATION
8. HUITIÈME PARTIE : ENTRÉES / SORTIES 
8.1. LES E/S FORMATÉES : PRINTF
8.2. LES E/S FORMATÉES : SCANF
8.3. LES E/S : LES FICHIERS
8.4. E/S FICHIERS :LES FONCTIONS DE NIVEAUX 1
8.5. E/S FICHIERS :LES FONCTIONS DE NIVEAUX 2
8.6. LES E/S FORMATÉES
9. NEUVIÈME PARTIE : COMPLÉMENTS 
9.1. COMPLÉMENTS 1 : LE PRÉPROCESSEUR
9.2. COMPLÉMENTS 2 : ARGUMENTS DE LA LIGNE DE COMMANDE
10. DIXIÈME PARTIE : TYPES DE DONNÉES ABSTRAITS 
10.1. LES TYPES DE DONNÉES ABSTRAITS
10.2. LE TDA LISTE
10.3. RÉALISATIONS DU TDA LISTE
10.4. COMPARAISON DES RÉALISATIONS
10.5. CONCLUSION
10.6. LISTING DE LA RÉALISATION DU TDA LISTE PAR CELLULES CONTIGÜES
10.7. LISTING DE LA RÉALISATION DU TDA LISTE PAR CELLULE CHAÎNÉE SANS ENTÊTE
11. ONZIÈME PARTIE – SUJETS DE TD ET SOLUTIONS
12. DOUZIÈME PARTIE : SUJETS DE TP

………

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *