Cours Langage C
Cours Langage C
Cours Langage C
I] Généralités.
4x1=4 i=1
…… faire une répétition
4x10=40 4xi=
afficher le résultat
i=i+1
1 # include <stdio.h>
- 3 main ()
{
4 /* premier programme*/
2 5 printf (“Bonjour\n”);
6 return 0 ;
- }
1 : # include <stdio.h>
standard inpout / outpout : permet d’inclure au programme des bibliothèques (
librairies), qui contiennent les définitions d’autres fonctions ( instructions).
# include <stdio.h>
# include <math.h>
# include <graphics.h>
# include <string.h>
Ex. : / *……….
5 : instruction ( fonction ) printf affiche à l’écran une chaîne ( X# ) ou la valeur d’une variable ( résultat
d’un calcul )
toujours ‘’ ‘’
ici : ‘’ Bonjour \n ‘’
affiché à l’écran
\n : code de saut de ligne ou signe de formattage
ici \n est facultatif : saut de ligne + retour à la ligne
Dès que l’on trouve un \ entre les ‘’ ‘’ d’un printf , le système attend derrière une lettre
pour exécuter une commande
autre Ex. :
#include <stdio.h>
main ()
{ char nom [20];
printf (‘’entrez votre nom : ‘’);
scanf (‘’%s’’,nom) ;
printf (‘’\n Vs vs appelez : %s’’, nom) ;
return 0
}
char nom[20] ; déclaration de variables : une variable est un nom auquel on affectera une valeur
Ce nom comporte uniquement des lettres minuscules ou majuscules, des chiffres et __ ( 31 premier caractère
untilisé par le C )
Ex. : Pgcd différent de pgcd = 2 variables différentes
*scanf est la fonction ( instruction) de saisie au clavier d’une valeur. Dans scanf, on trouve 1 symbole de
formattage % suivi d’une lettre enter ‘’ ‘’. Pas de \ dans scanf, ni de texte)
%s chaîne de caractère
%c caractère unique
%d entier
%f réel
%e réel exponentiel
%x entier héxadécimal
Ex. : int a ;
float x ;
scanf (‘’%d’’, &a) ;
scanf (‘’%f’’, &x );
ou scanf (‘’%d %f’’, &a,&x) ;
Dans l’exemple, %s dans printf sera remplacé par le contenu de la variable nom
-printf (‘’\n Vs vs appelez : %s, ‘’ nom) ; pas de & dans les printf
donne à l’écran
IV] Résumé.
* scanf (‘’%….’’) ;
* gets pour la saisie de chaîne
ex. : char ch[20]
gets ( ch) ou scanf ( ‘’%s’’, ch) ;
* getch et getche et getchar caractère seul
ex. : char x ;
x=getch ( ) ou getche ou getchar équivaut à scanf (‘’%c’’, &x) ;
I] Définition.
Ensemble des valeurs qui peut prendre 1 variable. Donc un type et un seul est associé à une variable.
Le type peut être définit par l’utilisateur ( complexe ) ou à partir de types existants type standard float,
int , char
27 20
128 64 32 16 8 4 2 1
III] Réels.
On peut préciser un nbre de chiffres défini à l’avance lors d’un affichage (et d’une saisie ) :
Entiers printf (‘’%4d’’, x) si x = 3, on affiche : _ _ _ 3 _
complété avec des 0
%04d 0003 _
cadrage à gauche
%-4d 3000 _
LES OPERATEURS EN C.
I] L’affectation.
_+
_-
_*
_/
incrémentation de 1 a=a+1 a++
décrémentation de 1 b=b-1 b—
ET logique &&
Résultat nul si au moins 1 des opérateurs est nul sinon 1
Y = 5&&3 y vaut 1
Y = 0&&2 y vaut 0
OU logique | |
Complément !
Comparaison = =
Résultat égal 1 si les deux termes sont égaux sinon 0
Ex. : printf (‘’%d’’, a= =b)
if ( )………
……….
else ……….
……….
Equation du premier degré :
#include <stdio.h>
main()
{ float a, b, x ;
printf (‘’donnez la valeur de a et b :’’);
scanf (‘’%f %f’’, &a, &b) ;
if (a= = 0)
printf (‘’ a nul , pas de calcul ‘’) ;
else
{ x = -b/a ;
printf (‘’ solution x = %f’’, x) ;
}
}
S=n+(n-1)+(n-2)+…+2+1+0
#include <stdio.h>
main()
{unsigned int S,n;
puts (‘’Donnez un entier : ‘’) ;
scanf (‘’%d’’, &n) ;
S=0 ;
while (n >0)
{ S=S+n ;
n=n-1 ;
}
printf (‘’la somme est : S=%d’’, S) ;
}
2. do {…….} while () répéter tant que condition vraie
le test étant fait en fin de boucle, la boucle est exécutée au moins une fois.
#include <stdio.h>
main()
{ int F,n;
puts (‘’donner un entier >0’’);
scanf (‘’%d’’, &n) ;
F=1;
do
{F=Fxn;
n = n – 1;
} while (n>1);
printf (‘’ la factorielle est : %d’’, F) ;
}
for ( ) ou for ( )
_instruction {…….plusieurs instructions
}
#include <stdio.h>
main()
{ int N1, N2, x;
puts (‘’Donner 2 entiers N1 supérieurs à N2) ;
scanf (‘’%d %d’’, &N1, &N2) ;
for ( x = N2 ; x <= N1 ; N2 = N2 + 10)
x = x + 10;
printf (‘’la somme est : x = %d’’, x);
}
main()
{ int i,j ;
for ( i = 2 , j = 4 ; ( i<5) && ( j>2) ; i++ , j--)
printf (‘’ i = %d et j = %d \n’’, i , j);
}
Remarque : dans les conditions de poursuite de boucles on peut comparer une variable à 2 valeurs par
exemple : 0 <= x <= 10 en C il faut écrire : ( x>= 0) && ( x <= 10)
main()
{ int i, j ;
for ( i = 1 ; i < 10 ; i++)
{ printf (‘’i = %d’’, i);
if ( i == 5 ) break
} printf (‘’i = 5’’);
}
V] Sélections multiples.
case…..
…….
……..
default : ……. ;
}
la variable ne peut ête que de type entier ou caractère.
Exemple : main()
printf (‘’i = ? :’’ ) ; scanf ( ‘’%d’’, &x);
switch ( i )
{ case 0 : printf (‘’zero \n ‘’) ; break ;
case 1 :
case 2 : printf (‘’ un ou deux \n ‘’) ; break ;
case 4 : break
case 5 : printf (‘’cinq \n’’) ; break ;
case 200 : printf (‘’deux cent \n’’; break ;
case 50 : printf (‘’cinquante \n’’) ; break ;
} default : printf (‘’autre case’’);
I] Algorithme.
Représentation physique ( sous forme graphique ) de la méthode d’analyse d’un problème pour
arriver à sa solution.
Arbre programmatique :
#include <stdio.h>
main()
{ float a, b, x;
printf (‘’ Donner a et b : ‘’);
scanf (‘’%f %f’’, &a, &b) ;
if ( a = = 0 )
printf (‘’ impossible’’) ;
else
{ x = - a/b ;
printf (‘’ x = %f ‘’, x);
}
}
changement de type ou transcodage ou outcasting : il suffit d’écrire le nouveau type entre () devant la
variable :
int a ; a=1
float x ; x = a/3 dans x on aurait 0
x = ( float ) a/3 x = 0.3333 mais pas x = (float) (a/3)
LES TABLEAUX.
I] Définition.
Suite séquentielle de données de même type. Le nombre d’éléments définit la taille du tableau,
chaque élément est acessible par l’intermédiaire d’un indice, le premier élément est toujours repéré par
l’indice 0
II] Déclaration.
indices 0 1 2 3 4 5 6
toujours de type entier supérieur ou égal :
8 4 3 -1 6 4 -30
1 élément du tableau
int i ;
for ( i = 0 ; i < 7 ; i++)
printf (‘’%d ‘’, t1[i]) ;
Saisie du tableau :
I=0;
while ( i < 7 )
{ printf (‘’\n t1 [%d] =…’’, i) ;
scanf (‘’%d’’, &t1[i]) ; toujours & pour les char, int , float par pour les chaînes.
i++ ;
}
t1 [0] = 10 (scanf)
t1 [1] = …..
ATTENTION : en C pas de tests sur les limites d’un tableau par exemple avec le tableau précéder à 7
éléments on peut écrire printf (‘’%d’’, t1[60]) ; pas d’erreur affiche un résultat
Toutes les opérations arithmétiques ou logiques sont possibles éléments par éléments
if ( t1 == t2) faux mais ne donne pas d’erreur car le nom d’un tavbleau est l’addresse mémoire du premier
élément du tableau.
if ( t1[i][j] == t2[i][j])
C’est le cas particulier d’un tableau à une dimension un caractère dit de fin de chaîne doit être placé à la fin
du tableau
Tableau noté ‘\0’
Ex. nom avec 20 lettres max. char x[21]
20 caractères plus celui de chaînes
ex. :
char jours [9]
scanf (‘’%s ‘’, jours) ;
jamais de & ni de []
J E U D I
0 1 2 3 4 5 6 7 8 9
TABLEAUX DE CHAINES.
LES POINTEURS.
I] Définition.
C’est une variable qui contient l’adresse d’une autre variable. Un pointeur doit être déclaré avant
utilisation et de même type que la variable pointée.
Le pointeur contient une adresse qui est de type entier > 0
Une valeur particulière de pointeur est nommée NULL c’est un pointeur qui pointe sur rien ( aucune
adresse)
Déclaration : int *p1 ; * : symbole du pointeur
float *y ; p1, y : nom de la variable
on dit que y pointe sur un réel
Exemple : main()
{ int i, j, *p ; déclaration des variables
i=5 ;
p = &i ; & : symbole d’adresse dans p on met l’adresse de i
met dans j le j = *p ;
contenu de la *p = j + 2 ; la valeur de l’expression j + 2 (7) est rangé dans le contenu de
variable point } la va riable pointée par p donc i
par p donc j = 5
Ex : main()
{ int a[10], *ptab, x ;
a[0] = 11 ;a[1] = 12 ;a[2] = 13 ;a[3] = 14 ;
ptab = c;
x = *ptab; /1
ptab = ptab + 1; /2
x = * ptab; /3
x = *ptab + 1; /4
x = *(ptab + 1); /5
}
-solutions : /1 x vaut 11
x = *ptab on met dans x le contenu de la variable pointée par ptab
/2 ptab = ptab + 1 ptab contient l’adresse de a[1] ou ptab pointe sur a[1]
/3 x = *ptab ; x vaut 12 on aurait pu écrire x = a[1]
/4 x = *ptab + 1 ; x vaut 13
/5 x = * (ptab + 1 ) pemet de pointer le 3ème élément a[2]
* (ptab + 1) représente le contenu de l’élément pointé par (ptab + 1) donc le contenu du 3ème élément a[2]
x vaut 13
x = * (ptab + 1) est identique à x = a[2]
la valeur ptab n’est pas modifié
V] Application.
main()
{ int x, y, *z ;
printf (‘’z pointe sur x’’) ;
x = 11 ;
z = &x ;
printf (‘’adresse de x : %d’’, z) ;
printf (‘’valeur de x : %d’’, x) ;
y = *z ;
*z = 49 ;
printf (‘’valeur de y : %d’’, y) ;
printf (‘’valeur de x : %d’’, x) ;
}
passage d’arguments par adresses (par référence) permet à une fonction de modifier les valeurs des variables
de la fonction appelante
Remarque :
Quand on utilise des fonctions et des pointeurs on a souvent un message d’erreur ( ou un warning) de type
Lvalue required, conclusions essayer les différentes cpmbinaisons &, * et rien devant les variables sources de
l’erreur.
Une variable globale est une variable dont la valeur est connue dans toutes les fonctiond d’un programme.
Ex : permutation de deux nbres
#include <stdio.h>
int a, b ; /* variables globales */
void permut (void);
main()
{ scanf (‘’%d %d’’, &a, &b);
permut (a, b);
printf (‘’a = %d et b = %d’’, a, b) ;
}
void permut ()
{ int x ; /* x est une variable locale */
x=a;
a=b;
b=x;
}
main()
{ int x ;
scanf (‘’%d’’, &n) ;
printf (‘’ factorielle de %d est %d’’, x, fact (x)) ; appel de fonction
}
int fact (int n ) ;
{ if (x >= 1)
if ( x = = 1)
return 1;
else
return x*fact ( x-1);
}
LES STRUCTURES.
I] Définition.
Collection ou ensemble d’éléments de type différent ( entier, réels, chaînes,…) dans une même entité
logique.
Ex. : struct date { char jour, char mois[12], int an}
type entier court
date est un nouveau type de variable, il faut des noms de variables de ce type. Déclaration des variables de
type structure date ;
struct date d1, d2, x ;
type variables
2/ -struct { int x ;
int y;
char couleur[30];
} p1; nom de la variable dans la structure
III] Utilisation.
Dans les déclarations précédentes point est une structure p1 et p2 sont des variables de type structure
point x, y et couleur sont les champs ou membres de la structure.
Pour accéder à un nombre de la structure la notation est variable structure.champ
Ex. : p1.x = 300
p1.y = p1.x
( saisie au clavier : scanf (‘’%d’’, &p1.x) ;
scanf (‘’%s’’, p1.couleur) ; )
p1.couleur = ‘’rouge’’ ne marche pas
strcpy (p1.couleur, ‘’rouge’’) OK
printf (‘’%s’’, p1.couleur) ;
si on a déclaré int n ;
n = p1.y
si on a deux structures p1 et p2 de même type, on peut recopier l’une dans l’autre par p1 = p2.
Identique à : p2.x = p1.x
p2.y = p1.y
p2.couleur = p1.couleur
V] Tableaux de structures.
.
.
x
Une structure est une variable dynamique réserver mémoire avec malloc ou calloc avant de lui
affecter une valeur.
P1 = (struct point*) malloc (sizeof(p1)) ;
DU C AU C++.
I] Introduction au C++.
II] Exemple : demande un entier n et affiche la liste des entiers compris entre 1 et n et calcule le nombre
d’entier affiché.
#include <iostream.h>
int lit_nombre(); // prototype
main()
{ int fin ;
fin = lit_nombre() ;
long total = 0 ;
for (int i = 1 ; i <= fin ; i++)
{ total = total + i;
cout << ‘’i = ‘’ <<i<<’’, total =’’ <<total<<endl
}
cout << ‘’total final = ‘’ << total
}
int lit_nombre()
{ cout << ‘’taper un nombre’’ ;
int n ;
cin >> n ;
return n ;
}