Programmer en langage C avec exercices corrigés

I.GÉNÉRALITÉS SUR LE LANGAGE C
1- PRÉSENTATION PAR L’EXEMPLE DE QUELQUES INSTRUCTIONS DU LANGAGE C
1.1 Un exemple de programme en langage C
1.2 Structure d’un programme en langage C
1.3 Déclarations
1.4 Pour écrire des informations : la fonction printf
1.5 Pour faire une répétition : l’instruction for
1.6 Pour lire des informations : la fonction scanf
1.7 Pour faire des choix : l’instruction if
1.8 Les directives à destination du préprocesseur
1.9 Un second exemple de programme
2 – QUELQUES RÈGLES D’ÉCRITURE
2.1 Les identificateurs
2.2 Les mots clés
2.3 Les séparateurs
2.4 Le format libre
2.5 Les commentaires
3 – CRÉATION D’UN PROGRAMME EN LANGAGE C
3.1 L’édition du programme
3.2 La compilation
3.3 L’édition de liens
3.4 Les fichiers en-tête
II. LES TYPES DE BASE DU LANGAGE C
1- LA NOTION DE TYPE
2- LES TYPES ENTIERS
2.1 Leur représentation en mémoire
2.2 Les différents types d’entiers
2.3 Notation des constantes entières
3- LES TYPES FLOTTANTS
3.1 Les différents types et leur représentation en mémoire
3.2 Notation des constantes flottantes
4- LES TYPES CARACTÈRES
4.1 La notion de caractère en langage C
4.2 Notation des constantes caractères
5- INITIALISATION ET CONSTANTES
III. LES OPÉRATEURS ET LES EXPRESSIONS EN LANGAGE C
1- L’ORIGINALITÉ DES NOTIONS D’OPÉRATEUR ET D’EXPRESSION EN LANGAGE C
2- LES OPÉRATEURS ARITHMÉTIQUES EN C
2.1 Présentation des opérateurs
2.2 Les priorités relatives des opérateurs
3- LES CONVERSIONS IMPLICITES POUVANT INTERVENIR DANS UN CALCUL D’EXPRESSION
3.1 Notion d’expression mixte
3.2 Les conversions d’ajustement de type
3.3 Les promotions numériques
3.4 Le cas du type char
4 – LES OPÉRATEURS RELATIONNELS
5- LES OPÉRATEURS LOGIQUES
6- L’OPÉRATEUR D’AFFECTATION ORDINAIRE
6.1 Notion de lvalue
6.2 L’opérateur d’affectation possède une associativité de droite à gauche
6.3 L’affectation peut entraîner une conversion
7- LES OPÉRATEURS D’INCRÉMENTATION ET DE DÉCRÉMENTATION
7.1 Leur rôle
7.2 Leurs priorités
7.3 Leur intérêt
8- LES OPÉRATEURS D’AFFECTATION ÉLARGIE
9- LES CONVERSIONS FORCÉES PAR UNE AFFECTATION
10- L’OPÉRATEUR DE CAST
11- L’OPÉRATEUR CONDITIONNEL
12- L’OPÉRATEUR SÉQUENTIEL
13- L’OPÉRATEUR SIZEOF
14- RÉCAPITULATIF DES PRIORITÉS DE TOUS LES OPÉRATEURS
EXERCICES
IV. LES ENTRÉES-SORTIES CONVERSATIONNELLES
1- LES POSSIBILITÉS DE LA FONCTION PRINTF
1.1 Les principaux codes de conversion
1.2 Action sur le gabarit d’affichage
1.3 Actions sur la précision
1.4 La syntaxe de printf
1.5 En cas d’erreur de programmation
1.6 La macro putchar
2- LES POSSIBILITÉSDE LA FONCTION SCANF
2.1 Les principaux codes de conversion de scanf
2.2 Premières notions de tampon et de séparateurs
2.3 Les premières règles utilisées par scanf
2.4 On peut imposer un gabarit maximal
2.5 Rôle d’un espace dans le format
2.6 Cas où un caractère invalide apparaît dans une donnée
2.7 Arrêt prématuré de scanf
2.8 La syntaxe de scanf
2.9 Problèmes de synchronisation entre l’écran et le clavier
2.10 En cas d’erreur
2.11 La macro getchar
EXERCICES
V. LES INSTRUCTIONS DE CONTRÔLE
1- L’INSTRUCTION IF
1.1 Blocs d’instructions
1.2 Syntaxe de l’instruction if
1.3 Exemples
1.5 En cas d’imbrication des instructions if
2 – L’INSTRUCTION SWITCH
2.1 Exemples d’introduction de l’instruction switch
2.2 Syntaxe de l’instruction switch
3- L’INSTRUCTION DO. WHILE
3.1 Exemple d’introduction de l’instruction do. while
3.2 Syntaxe de l’instruction do. while
3.3 Exemples
4- L’INSTRUCTION WHILE
4.1 Exemple d’introduction de l’instruction while
4.2 Syntaxe de l’instruction while
5- L’INSTRUCTION FOR
5.1 Exemple d’introduction de l’instruction for
5.2 Syntaxe de l’instruction for
6- LES INSTRUCTIONSDE BRANCHEMENT INCONDITIONNEL: BREAK, CONTINUE ET GOTO
6.1 L’instruction break
6.2 L’instruction continue
6.3 L’instruction goto
EXERCICES
VI. LA PROGRAMMATION MODULAIRE ET LES FONCTIONS
1- LA FONCTION : LA SEULE SORTE DE MODULE EXISTANT EN
2- EXEMPLE DE DÉFINITION ET D’UTILISATION D’UNE FONCTION EN C
3- QUELQUES RÈGLES
3.1 Arguments muets et arguments effectifs
3.2 L’instruction return
3.3 Cas des fonctions sans valeur de retour ou sans arguments
3.4 Les anciennes formes de l’en-tête des fonctions
4- LES FONCTIONS ET LEURS DÉCLARATIONS
4.1 Les différentes façons de déclarer (ou de ne pas déclarer) une fonction
4.2 Où placer la déclaration d’une fonction
4.3 A quoi sert la déclaration d’une fonction
5- RETOUR SUR LES FICHIERS EN-TÊTE
6- EN C, LES ARGUMENTS SONT TRANSMIS PAR VALEUR
7- LES VARIABLES GLOBALES
7.1 Exemple d’utilisation de variables globales
7.2 La portée des variables globales
7.3 La classe d’allocation des variables globales
8- LES VARIABLES LOCALES
8.1 La portée des variables locales
8.2 Les variables locales automatiques
8.3 Les variables locales statiques
8.4 Le cas des fonctions récursives

Généralités

Dans ce chapitre, nous vous proposons une première approche d’un programme en langage C, basée sur deux exemples commentés.
Vous y découvrirez (pour l’instant de façon encore « informelle ») comment s’expriment les instructions de base (déclaration, affectation, lecture et écriture) ainsi que deux des structures fondamentales (boucle avec compteur, choix).Nous dégagerons ensuite quelques règles générales concernant l’écriture d’un programme. Enfin, nous vous montrerons comment s’organise le développement d’un programme en vous rappelant ce que sont: l’édition, la compilation, l’édition de liens et l’exécution.

Un exemple de programme en langage C

Voici un exemple de programme en langage C, accompagné d’un exemple d’exécution. Avant d’en lire les explications qui suivent, essayez d’en percevoir plus ou moins le fonctionnement.

#include <stdio.h>
#include <math.h>
#define NFOIS 5
main()
{ int i ;
float x ;
float racx ;
printf (« Bonjour\n ») ;
printf (« Je vais vous calculer %d racines carrées\n », NFOIS) ;
for (i=0 ; i<NFOIS ; i++)
{ printf (« Donnez un nombre : « ) ;
scanf (« %f », &x) ;
if (x < 0.0)
printf (« Le nombre %f ne possède pas de racine carrée\n », x) ;
else
{ racx = sqrt (x) ;
printf (« Le nombre %f a pour racine carrée : %f\n », x, racx) ;
}
}
printf (« Travail terminé – Au revoir ») ;

Structure d’un programme en langage C

La ligne:
main()
se nomme un « en-tête ». Elle précise que ce qui sera décrit à sa suite est en fait le « programme principal » (main). Lorsque nous aborderons l’écriture des fonctions en C, nous verrons que celles-ci possèdent également un tel en-tête; ainsi, en C, le programme principal apparaîtra en fait comme une fonction dont le nom (main) est imposé.
Le programme (principal) proprement dit vient à la suite de cet en-tête. Il est délimité par les accolades « { » et « } ». On dit que les instructions situées entre ces accolades forment un « bloc ». Ainsi peut-on dire que la fonction main est constituée d’un en-tête et d’un bloc; il en ira de même pour toute fonction C. Notez qu’un bloc (comme en Pascal) peut lui-même contenir d’autres blocs (c’est le cas de notre exemple). En revanche, nous verrons qu’une fonction ne peut jamais contenir d’autres fonctions (ce qui était le cas du Pascal).
1.3 Déclarations
Les trois instructions:
int i ;
float x ;
float racx ;
sont des « déclarations ».
La première précise que la variable nommée n est de type int, c’est-à-dire qu’elle est destinée à contenir des nombres entiers (relatifs). Nous verrons qu’en C il existe plusieurs types d’entiers. Les deux autres déclarations précisent que les variables xet racxs ont de type float, c’est-à-dire qu’elles sont destinées à contenir des nombres flottants (approximation de nombres réels). Là encore, nous verrons qu’en C il existe plusieurs types flottants. En C, comme en Pascal, les déclarations des types des variables sont obligatoires et doivent être regroupées au début du programme (on devrait plutôt dire: au début de la fonction main). Il en ira de même pour toutes les variables définies dans une fonction; on les appelle « variables locales » (en toute rigueur, les variables définies dans notre exemple sont des variables locales de la fonction main). Nous verrons également (dans le chapitre consacré aux fonctions) qu’on peut définir des variables en dehors de toute fonction; on parlera alors de variables globales.

Pour écrire des informations : la fonction printf

L’instruction:
printf (« Bonjour\n ») ;
appelle en fait une fonction « prédéfinie » (fournie avec le langage, et donc que vous n’avez pas à écrire vous-même) nommée printf.
Ici, cette fonction reçoit un argument qui est:
« Bonjour\n »
Les guillemets servent à délimiter une « chaîne de caractères » (suite de caractères). La notation \n est conventionnelle: elle représente un caractère de fin de ligne, c’est-à-dire un caractère qui, lorsqu’il est envoyé à l’écran, provoque le passage à la ligne suivante. Nous verrons que, de manière générale, le langage C prévoit une notation de ce type (\ suivi d’un caractère) pour un certain nombre de caractères dits « de contrôle », c’est-à-dire ne possédant pas de « graphisme » particulier.

Notez que, apparemment, bien que printf soit une fonction, nous n’utilisons pas sa valeur. Nous aurons l’occasion de revenir sur ce point, propre au langage C. Pour l’instant, admettez que nous pouvons, en C, utiliser une fonction comme ce que d’autres langages nomment une « procédure » ou un « sous-programme ».
L’instruction suivante:
printf (« Je vais vous calculer %d racines carrées\n », NFOIS) ;
ressemble à la précédente avec cette différence qu’ici la fonction printf reçoit deux arguments. Pour comprendre son fonctionnement, il faut savoir qu’en fait le premier argument de printf est ce que l’on nomme un « format »; il s’agit d’une sorte de guide qui précise comment afficher les  informations qui sont fournies par les arguments suivants (lorsqu’ils existent). Ici, on demande à printf d’afficher suivant le format:
« Je vais vous calculer %d racines carrées\n »

….

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Programmer en langage C (752 Ko) (Cours PDF)
Programmer en langage C

Télécharger aussi :

Laisser un commentaire

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