Langage C KIA 2023
Langage C KIA 2023
Langage C KIA 2023
INTRODUCTION A LA
PROGRAMMATION EN LANGAGE C
2
EXERCICES.................................................................................................................. 11
• La saisie
• La compilation
• L’édition de lien
• L’exécution
Compilation
Librairie 1
Librairie 2
Librairie n
Edition de liens
var1
2.3 Les constantes :
montant_General
Une constante est un objet dont la valeur est fixe et connue. Une constante
x2
peut être entière , flottante ou de type caractères.
...
Exemples : 3.14, 25, ‘’Langage C’’, …
A noter l’obligation imposée par la plupart des langages de programmation de
commencer les identificateurs par une lettre alphabétique.
A remarquer que les constantes de type caractère est toujours délimitée par
le symbole double-quote (‘’).
2.2 Les types de données :
7
#include ....
Les opérateurs logiques : ....
Opérateur Sens
&& Et
Données et fonctions externes
|| Ou
.....
! Non
....
Les opérateurs relationnels fournissent des résultats pouvant avoir deux
valeurs possibles : Données et fonctions globales
....
1 (Vrai) ou 0 (Faux).
Main()
{ ....
2.6 Les expressions : ...
Une expression est constituée par la combinaison de champs, variables ....
mémoires, constantes, fonctions et d'opérateurs.
}
... Fonction1 ()...
... Fonction2 ()...
Exercices :
%c pour un caractère,
%d pour un entier à afficher en décimal
%x pour un entier à afficher en hexadécimal.
CHAPITRE III : LES INSTRUCTIONS Le programme suivant affiche le carré d’un nombre n.
D'ENTREES/SORTIES
#Include <stdio.h>
Ce chapitre a pour objet de présenter les instructions d'entrée/sortie les void main()
plus importantes. {
int n ;
3.1 L’affichage des données : printf n=4 ;
n=n*n
Syntaxe : printf (<chaine_de_formats>, <liste_d’expressions>)
printf(‘’Le carré est égal à %d’’, n) ;
}
L’instruction printf permet d’afficher sur l’écran une liste d’expressions,
selon un format d’affichage souhaité (double, entier, réel, caractère, ...).
Exemple : Le programme suivant affiche « Bonjour » à l’écran. La première ligne du programme fait l’inclusion du fichier <stdio.h> qui définit
les instructions d’entrées/sorties.
#Include <stdio.h> La ligne printf(‘’Le carré est égal à %d’’, n) affiche à l’écran le message
suivant :
void main()
{
printf(‘’Bonjour’’) ; Le carré est égal à 16
}
La chaîne de formats est composée de séquences commençant par le 3.2 La lecture des données : scanf
caractère % suivi d’un caractère qui indique le format d’impression. Il
existe, entre autres : Syntaxe : scanf(<chaine_de_format>, <liste_de_variables>)
11
Nous avons que , aussi bien pour l’instruction printf que scanf , il est
Cette instruction permet d’affecter une valeur tapée au clavier à une
impératif de préciser le format des expressions à afficher ou à lire ; les
variable.
différents format supportés sont :
printf(‘’La somme est égale à %i’’, x+y) ; Exercice 2 : Faire un programme qui lit deux nombres X et Y , et permute
} leurs valeurs .C'est à dire si X=15 et Y=10 , on doit avoir :
Y=15 et X=10 .
Les deux fonctions « printf » et « scanf » sont définies dans le fichier des
instructions standards d’entrée/sorties « stdio.h ». Il est nécessaire de
faire appel à l’inclusion de ce fichier grâce à l’instruction include au début du
programme.
void main()
{
int x ;
if (x>0)
printf(‘’Nombre positif’’) ;
Ce chapitre a pour objet de présenter les instructions de contrôle de C : if, else
while, do-while et for. printf(‘’Nombre négatif’’) ;
}
Ce programme fait la lecture, au clavier, d'une donnée numérique qui sera
4.1 L’instruction if : affectée à la variable X. La instruction IF évalue la condition 'est-ce que X
est plus grand que zéro?'. Si la condition est vraie, le C affiche 'Nombre
Syntaxe : if (<condition>) { Bloc 1}
positif', dans le cas contraire, il affiche 'Nombre négatif ou nul'.
else { Bloc 2}
Remarquez que dans le cas où il y a plus d’une instruction à exécuter , en cas
de valeur vraie ou fausse, il y a lieu de les délimiter par les deux symboles
accolades { }.
<action-n>
Exemple : Ce programme affiche les (10) premiers nombres entiers.
}
while (<condition>)
}
Syntaxe : switch (<expression>)
{ Cette instruction est bien adaptée pour la programmation d’un menu de choix
case <constante1> : <bloc_instructions> (interface à partir de laquelle l’utilisateur choisit une fonction).
break ;
case <constante2> : <bloc_instructions> EXERCICES :
break ;
case <constante3> : <bloc_instructions>
break ;
... Exercice 1 : Faire un programme C qui affiche tous les multiples de 5
inférieurs à 100 , en utilisant l'instruction for .
15
Exercice 6 : Faire un programme qui lit une suite de nombres entiers (on ne
Exercice 13 : Faire un programme qui calcule le nombre PI de la manière
connaît pas leur nombre , mais le dernier est égal à 0) ,
suivante :
calcule puis affiche :
Exercice 8 : Faire un programme qui lit une suite de nombres entiers 24=23 * 3 , 70=2*5*7 , 350=2*52 *7
(on ne connaît pas leur nombre , mais le dernier est égal à 0
) , puis affiche le plus grand des nombres pairs lu et le plus Faire un programme qui lit un nombre entier et l'affiche
petit des nombres impairs lu . sous forme d'un produit de puissances de nombres
premiers.
Exercice 9 : Faire un programme qui lit un nombre entier et vérifie s'il est
parfait.Un nombre entier est dit parfait s'il est égal à la
somme de tous ses diviseurs (excepté lui-même). Exemple
6=1+2+3.
16
Exemples :
Ce chapitre a pour objet de présenter la structure de données tableau. int t[10] /* déclare un tableau t de 10 éléments entiers.
long int t1[10], t2[20] /* déclare deux tableaux t1 et t2 d’entiers longs. Le premier
5.1 Qu’est ce qu’un tableau ? : /* a 10 éléments et le second 20.
Jusqu'à présent nous n’avons traité que des variables simples (entières,
caractères, réelles, ...). Ces structures de données simples ne suffisent pour L’utilisation des tableaux recquiert la compréhension des remarques
répondre à tous les cas de modélisation informatique ; d’autres structures suivantes :
de données plus complexes sont nécessaires. Parmi ces structures, nous
trouvons les tableaux. • Les index des éléments d’un tableau vont de 0 à n-1.
• La taille d’un tableau doit être connue statiquement par le compilateur.
Un tableau peut être définit schématiquement comme une suite de variables C’est à dire qu’il est impossible d’écrire :
simples. L’accès à un élément quelconque du tableau se fait grâce à son
indice. int t[n], où n serait une variable.
Il est possible de déclarer des tableaux à plusieurs dimensions. Par Exercice 4 : Soit une suite mathématique définie de la manière suivante :
exemple :
Un = Un-1 + 2*Un-2
int T[5][10] /* Tableau à deux dimensions (matrice de 5 lignes U0 = 1 , U1 = 3
/*et 10 colonnes).
Faire un programme qui étant donné un nombre entier N range
tous les éléments de cette suite dans un tableau .
5.4 Les tableaux de caractères : Faire un autre programme qui consulte la valeur d'un élément
quelconque Ui .
Comme pour les autres types de base, il est possible de manipuler des
tableaux de caractères. Il existe toutefois une particularité pour ces Exercice 5 : Faire un programme qui étant donnés deux tableaux numériques
derniers qui consiste en la possibilité d’affecter toute une chaîne au tableau triés A et B (dont le nombre d'éléments sont respectivement m
. et n ) en tire un nouveau tableau numérique trié C . (Faire
attention de ne pas reproduire un élément plus d'une fois) .
Exemple : Exemple :
Exercices.
18
Exercice 7 : Faire un programme qui affiche tous les entiers premiers Le point de selle s'il existe est unique. Faire un programme
inférieurs à un nombre donné N . qui cherche le point de selle d'une matrice.
Struct <nom_structure>
{ type1 membre1 ;
type2 membre2 ;
CHAPITRE VI : LES STRUCTURES &
LES UNIONS type3 memebre3 ;
....
typen membren
}
Ce chapitre a pour objet de présenter les structures du langage C.
L’exemple suivant déclare deux variables p1 et p2 , qui ont toutes les deux la
6.1 Les Structures : même structure que personne.
Une structure en langage C est une structure de données qui regroupe des
variables hétérogènes, c’est à dire qui peuvent avoir des types différents. Struct personne
{
int age ;
C’est le cas , par exemple, des informations concernant une personne qui
float taille, poids ;
peuvent être regroupées au sein d’une même structure : char nom[20] ;
} p1, p2 ;
Struct personne
{
int age ;
float taille, poids ; 6.2 Accès aux champs de la structure :
char nom[20] ;
} Pour désigner un champs d’une structure, il faut utiliser l’opérateur de
sélection de champ qui se note . (point).
Cette déclaration précise que l’identificateur personne est une structure
composée des quatre champs : le premier est un entier nommé age, le second Par exemple, si p1 et p2 sont deux variables de type struct personne, on
est un réel nommé taille, le troisième est un réel nommé poids et le dernier désignera le champs nom de p1 par p1.nom, et on désignera le champ taille
est un tableau de 20 caractères représentant le nom de la personne. de p2 par p2.taille.
Une structure est construite selon le schéma général suivant :
Le programme suivant montre un exemple de manipulation d’une structure
personne. Il permet la saisie des renseignemens d’une personne donnée.
#Include <stdio.h>
20
printf(‘’Introduisez le nom ‘’) ; l’emploi des différents éléments d’une union se fait comme pour les
scanf(‘’%c’’, &n) ; structures. Ainsi si z est une variable de type zone, on peut alors écrire :
homme.nom=n ;
z.i = 15
z.c = ‘t’
6.3 Tableaux de structures :
D’une manière générale , la déclaration d’une union se fait selon le schéma
Une déclaration de tableau de structures se fait selon le même modèle que la
suivant :
déclaration d’un tableau dont les éléments sont de type simple.
Union <nom_union>
Supposons que l’on ait déjà déclaré la struct personne, si on veut déclarer un
{ type1 membre1 ;
tableau de 100 strcutures de ce type, on écrira :
type2 membre2 ;
type3 memebre3 ;
....
21
Dans l’exemple précédent, l’union z pourra posséder soit une valeur entière, - Editer toutes les personnes nées au mois de Décembre.
soit une valeur réelle, amis pas les deux à la fois. - Editer toutes les personnes par année de naissance.
Exercices.
Exercice 3 : Faire un programme qui trie par ordre croissant du salaire les
employés de l'exercice 1 .
22
Exemples de déclarations :
Poiteur P
7.3 L’opérateur adresse de : &
Les programmes C utilisent souvent l’opérateur & (appelé « de » ou « et
commercial »). Cet opérateur appliqué à une variable délivre l’adresse de
1356888
celle-ci, adresse qui pourra donc être affectée à une variable de type
pointeur.
Exemple :
int i ;
int *pi ;
23
Struct personne
pi=&i ; //pi pointera vers la variable I ;
{
int age ;
float taille, poids ;
Autre exemple : char nom[20] ;
}
int i, j ;
int *pi ; void main()
{
pi=&i ; //initialisation du pointeur pi struct personne pers ; //pers est une variable de type
*pi=2 ; //initialisation de la valeur pointée par pi //struct personne
j=*pi+1 ; // la variable j aura la valeur 3 struct personne *p ; //p est un pointeur vers une
//struct personne
p=&pers ;
}
Struct personne
{
int age ;
float taille, poids ;
char nom[20] ;
}
Struct personne *p ;
(*p).nom
Il en va de même pour les autres champs : age, taille et poids, qui seront
représentés respectivement ainsi :
Le champs de nom suivant est déclaré comme étant du type pointeur vers
une struct personne. 7.7 Détermination de la taille allouée à un type :
Cet opérateur peut être utilisé de deux manières différentes : p=malloc(sizeof(struct personne)) ;
sizeof expression
sizeof (nom-de-type)
La fonction calloc admet deux paramètres :
Exemple : nb_elem=10 ;
. Numéro de l'employé .
. Nom de l'employé . 4 3 5 2 7 1 12 0
. Prénom de l'employé .
. Salaire de l'employé .
Faire un programme qui étant données deux listes représentant
deux polynômes (dont les adresses des premiers éléments sont
Ecrire les programmes suivants :
respectivement Tête1 et Tête2) , construit une nouvelle liste
représentant le polynôme résultat de la somme.
. Insérer un nouvel employé en fin de liste .
. Supprimer un employé de numéro donné .
. Afficher tous les employés dont le salaire est
supérieur à un montant donné .
. Trier la liste par ordre croissant des salaires .
27
#include
Le programme suivant <stdio.h>
utilise la fonction somme précédente pour faire la
CHAPITRE VIII : LES FONCTIONS
somme de deux nombres a et b introduits par l’utilisateur :
float somme (float x, float y) ;
void main()
{
float a, b ;
Ce chapitre a pour objet de présenter la structuration des fonctions (sous-
programmes) dans les programmes C. printf(‘’Introduisez le premier nombre ‘’) ;
scanf(‘’%f’’, &a) ;
8.1 Structure des fonctions : printf(‘’Introduisez le second nombre ‘’) ;
scanf(‘’%f’’, &b) ;
La structure générale des fonctions en C obéit au schéma suivant :
printf(‘’La somme est %f = ’’, somme(a, b)) ;
<type_fonction> <nom_fonction> (type1 argument1, type2 argument2, }
...,
float Somme (float x, float y)
typen argumentn) {
{ return(x+y)
Corps de la fonction }
le type de la fonction permet de préciser le type du résultat rendu par la Au moment de l’appel de la fonction somme, les paramètres x et y (appelés
fonction. Si la fonction ne renvoit aucun résultat, sa déclaration doit être paramètres formels) sont remplacés respectivement par a et b (appelés
précédée par le mot réservé void. paramètres effectifs).
Exemple : la fonction suivante réalise la somme de deux nombres réels x et y. Notez qu’on doit informer le compilateur du nom de la fonction avant le bloc
(main).
28
Cependant, la variable c est une variable locale. Elle n’est vue que dans le bloc
Le programme suivant résume la différence entre les deux types de correspondant au programme principal (main). De ce fait, une erreur sera
variables : signalée à la compilation : lors du passage sur le bloc fonc2, le compilateur
conclura que la variable c n’est pas définie !.
#include <stdio.h>
void main()
{
int c; /* déclaration d’une variable
locale */
a=5; b=10; c=15;
printf("%i", a+b+c);
printf("%i", fonc1());
printf("%i", fonc2());
};
int fonc1(void)
{
int d; /* déclaration d’une
variable locale */
29
EXERCICES :
Exercice 1 : Ecrire une fonction ABS qui calcule la valeur absolue d'un
nombre .
Exercice 4 : Ecrire une fonction qui calcule la nième puissance d'un nombre
X.
Exercice 5 : Faire une fonction Fact qui calcule la factorielle d'un nombre
entier N . Rappelons que la factorielle d'un nombre notée n! est
: n! = 1*2*3*4*...*(n-1)*n
La déclaration d’un fichier se fait au moyen de l’instruction FILE qui est • ‘’r’’ : Ouverture en lecture (read). Dans ce cas le fichier ouvert ne peut
contenue dans le fichier <stdio.h>. être que lu et ne peut être modifié.
• ‘’w’’ : Ouverture en écriture (write). Dans ce cas le fichier est remis à
L’exemple suivant déclare un fichier fp : zéro avant de recevoir de nouvelles données.
• ‘’a’’ : Ouverture en ajout (append). Dans ce cas le contenu du fichier
ouvert est conservé, et les nouvelles données seront rajoutées à
#include <stdio.h> la fin de celles qui existent déjà.
void main()
{ La fonction fopen retourne une valeur de type pointeur vers FILE. Si
FILE *fp ; l’ouverture a réussi, la valeur retournée permet de repérer le fichier, et
…………
………… devra être passée en paramètre à toutes les procédures d’entrées/sorties
} sur le fichier. Si l’ouverture s’est avéré impossible (cas d’un fichier
inexistant qu’on veut lire, par exemple) fopen rend la valeur NULL.
#include <stdio.h>
31
void main() }
{
FILE *fp ; 9.4 Ecriture sur un fichier : fprintf
fp=fopen(‘’resultat.dat’’, ‘’r’’) ;
if (fp==NULL) L’instruction fprintf est analogue à printf à l’execption que fprintf s’applique
printf(‘’Impossible d’ouvrir ce fichier’’) ; pour un fichier sur disque alors que printf s’applique pour la sortie standard
………… (écran). Les formats admissibles sont rigoureusement les mêmes pour les
…………
deux instructions.
} fichiers : fclose
9.3 Ouverture des
L’exemple suivant#include
écrit dans le fichier ‘’nombre’’ les 100 premiers entiers :
<stdio.h>
Après avoir terminé les entrées/sorties sur un fichier, il est fortement
recommandé de le fermer en utilisant la fonction fclose, dont la syntaxe
void main()
est :
{
FILE *fp ;
fclose(<nom_fichier>) int i ;
fp=fopen(‘’nombre’’, ‘’w’’) ;
if (fp==NULL)
Exemple : Cet exemple complète le programme précédent en faisant une printf(‘’Impossible d’ouvrir ce fichier’’) ;
ouverture d’un fichier en lecture, puis en le fermant grâce à l’instruction
fclose. for(i=1 ;i<=100 ; i++)
{ fprintf(fp, ‘’%d’’, i) ;
}
void main()
Exercice 2 : Ecrire un programme C qui recopie le contenu d’un fichier sur
{
FILE *fp ; un autre.
int i , n;
fp=fopen(‘’nombre’’, ‘’w’’) ;
if (fp==NULL)
printf(‘’Impossible d’ouvrir ce fichier’’) ;
close(fp) ;
fp=fopen(‘’nombre’’, ‘’r’’) ;
while (fscanf(fp, ‘’%d’’, &n) !=EOF)
printf(‘’%d’’, n) ;
fclose(fp) ;
}
EXERCICES :
_inpd(
unsigned short
port );
int _kbhit( void ); renvoie une valeur non nulle si une Conio.h
touche du clavier a été pressée, 0
sinon.
double log( double x ); calcule le logarithme d’un nombre x. math.h
size_t count );
char *strstr( const recherche si la chaîne string2 est String.h
char *string1, incluse dans string1. Elle renvoie,
const char dans l’affirmatif, l’indice de
*string2 ); string2.
char *_strupr( convertit une chaîne de caractères String.h
char *string ); en majuscules.
double tan( double calcule la tangente d’un nombre x. math.h
x );
double tanh( double calcule la tangente hyperbolique math.h
x ); d’un nombre x.