Académique Documents
Professionnel Documents
Culture Documents
C BTS Se
C BTS Se
Un Bon Programme ? ? :
- Lisible
- Structuré
ProgrammationC 1
ProgrammationC 2
ProgrammationC 3 ProgrammationC 4
ProgrammationC 5 ProgrammationC 6
1
Structure d'un programme C Indenter = lisibilté #include <Lib1.h>
#include <stdio.h> #include <Lib2.h>
#define DEBUT -10 Directives du préprocesseur :
Prenez l'habitude de respecter (au moins au début) les #define X 0;
#define FIN 10 accès avant la compilation
règles :
#define MSG "Programme de démonstration\n" int fonc1(int x);
int fonc1(int x); - une accolade est seule sur sa ligne, float fonc2(char a);
int fonc2(int x); Déclaration des fonctions
- { est alignée sur le caractère de gauche de la ligne
précédente, int main(void)
void main()
{ /* début du bloc de la fonction main*/ - } est alignée avec l'accolade ouvrante correspondante, { /*main*/
int i; /* définition des variables locales */
Programme instruction;
- après { , on commence à écrire deux caractères plus à
i=0; principal instruction;
droite.
fonc1(i) ;
{
fonc2(i) ;
} /* fin du bloc de la fonction main */ instruction;
ProgrammationC 7 ProgrammationC
} /* fin main*/ 8
Préprocesseur
Le préprocesseur effectue un prétraitement du programme source avant qu'il soit compilé.
1er Programme
Ce préprocesseur exécute des instructions particulières appelées directives.
Ces directives sont identifiées par le caractère # en tête. #include <stdio.h>
Inclusion de fichiers #include <conio.h>
#include <nom-de-fichier> /* répertoire standard */ int main(void)
#include "nom-de-fichier" /* répertoire courant */ {
ProgrammationC 9 ProgrammationC 10
La fonction printf() : Les constantes de type caractère ont une valeur entiére dans la table ASCII
2
La fonction scanf() : 1er Programme
Librairie : stdio.h. #include <stdio.h>
ProgrammationC
Cette règle s'applique à tous : char, int, float ... 15 ProgrammationC 16
ProgrammationC 17 ProgrammationC 18
3
LES DECLARATIONS DE CONSTANTES
Identificateurs
2eme méthode : déclaration d'une variable, dont la valeur sera constante pour tout le programme. Les identificateurs nomment les objets C (fonctions, variables ... )
7/2 3
Remarque : Les mots réservés du langage 7.0/2
C doivent être écrits en minuscules. 7/2.0 3.5
7.0/2.0
ProgrammationC 21 ProgrammationC 22
ProgrammationC 23 ProgrammationC 24
4
int i;
Exemple
float f;
char c;
Contractions d'opérateurs
i = 7; f = 5.5; c = 'w'; Il y a une famille d’opérateurs
f>5 ====> vrai (1) += -= *= /= %=
(i + f) <= 1 ====> faux (0)
c == 'w‘ ====> vrai (1)
&= |= ^=
c != 'w' ====> faux (0) <<= >>=
c >= 10*(i + f) ====> faux (0)
(i >= 6) && (c == 'w') ====> vrai (1) Pour chacun d’entre eux
(i >= 6) || (c == 119) ====> vrai (1)
!expr1 est vrai si expr1 est faux et faux si expr1 est vrai ; expression1 op= expression2
expr1&&expr2 est vrai si les deux expressions expr1 et expr2 sont vraies et
faux sinon. L'expression expr2 n'est évaluée que dans le cas où l'expression
est équivalent à:
expr1 est vraie ; (expression1) = (expression1) op (expression2)
expr1 || expr2 = (1) si expr1=(1) ou expr2=(1) et faux sinon. a += 32; f /= 9.2; i *= j + 5;
L'expression expr2 n'est évaluée que dans le cas où l'expression expr1
a = a + 32; f = f / 9.2; i = i * (j + 5);
est fausse.
ProgrammationC 25 ProgrammationC 26
#include <stdio.h>
C a deux opérateurs spéciaux pour incrémenter (ajouter 1)
et décrémenter (retirer 1) des variables entières int main(void)
{
++ increment : i++ ou ++i est équivalent à i += 1 ou i = i + 1 int i, j = 5;
équivalent à:
1. j++;
-- decrement
i = ++j;
2. i = j; !
Ces opérateurs peuvent être préfixés (avant la variable) ou printf("i=%d, j=%d\n", i, j);
postfixés (après)
j = 5; équivalent à:
int i = 5, j = 4; i = j++; 1. i = j;
“i” vaudra 6 printf("i=%d, j=%d\n", i, j); 2. j++; !
i++;
“j” vaudra 3 return 0;
--j; } i=6, j=6
++i; i=5, j=6
“i” vaudra 7
ProgrammationC 27 ProgrammationC 28
5
Exemples :
Les structures de contrôle en C
if (i < 10) i++;
La variable i ne sera incrémentée que si elle a une valeur inférieure à 10.
Les décisions: if else
if (i == 10) i++; == et pas =
if (expression booléenne vraie) if (a<b) La variable i ne sera incrémentée que si elle est égale à 10.
{ {
if (!recu) printf ("rien reçu\n");
BLOC 1 D'INSTRUCTIONS min=a; Le message "rien reçu" est affiché si recu vaut zéro.
} }
else else if ((!recu) && (i < 10)) i++;
Le bloc " else " { { i ne sera incrémentée que si recu vaut zéro et i<10.
est optionnel. BLOC 2 D'INSTRUCTIONS min=b;
Si plusieurs instructions, il faut les mettre entre accolades.
} }
=
if ((!recu) && (i < 10) && (n!=0) ){
* Tout ce qui est 0 ( ‘\0’ 0 0.0000 NULL ) est faux i++; if(delta != 0) if(delta)
* Tout ce qui est != de 0 ( 1 ‘0’ 0.0001 1.34 ) est vrai moy = som/n;
=
printf(" la valeur de i =%d et moy=%f\n", i,moy) ;
if(32) } if(delta == 0) if(!delta)
printf("ceci sera toujours affiche\n"); else {
if(0) printf ("erreur \n");
i = i +2; // i +=2 ;
printf("ceci ne sera jamais affiche\n");
} !
ProgrammationC 31 ProgrammationC 32
! Attention! if emboîtés
else est associé avec le if le plus proche
Ne pas confondre = = (opérateur logique d’égalité)
int i = 100;
et = (opérateur d’affectation)
if(i > 0)
#include <stdio.h> if(i > 1000)
printf("i > 1000\n");
int main(void)
{ else
int i = 0; printf("i is reasonable\n"); i is reasonable
if(i = 0) /* ici affectation */
int i = 100;
printf("i = zero\n");
else
printf(“Quand i != de zero\n"); if(i > 0) {
if(i > 1000)
return 0;
printf(" i > 1000 \n");
}
Quand i != de zero } else
printf("i is negative\n"); I is negative
ProgrammationC 33 ProgrammationC 34
6
Exemple
Intérieur 1
do while = REPETER … tant que
i=1;
while(i<5) Intérieur 2 (guarantit l’exécution au moins une fois)
{ Intérieur 3
Intérieur 4 bloc d' do
printf(“Intérieur %d\n",i); {
itération i++; Extérieur 5 instructions ............; /* bloc d'instructions */
} ............;
printf("Extérieur %d\n",i); }
while (expression);
int j = 5; non
condition
start oui vraie
tant que, pas jusqu’à ce que! printf("start\n"); end
while(j == 0)
printf("j = %d\n", j--);
suite du programme i=1;
printf("end\n");
i=1; do
int j = 5; { i=1
while(i<5); do j=5 printf(“i=%d ",i);
{ stop
"tant que l'expression est vraie printf("j = %i\n", j--); j = 4 i++;
printf(“Intérieur %d\n",i); attendre". while(j > 0); j=3 }while(i<0);
i++; printf("stop\n"); j=2 printf("stop\n");
} j=1
stop
ProgrammationC 37 ProgrammationC 38
Le bloc "default" n'est pas obligatoire. valeur1, valeur2, …. doivent être des expressions default; printf("\nCE CHOIX N'EST PAS PREVU "); /* pas de break ici */
constantes. L’instruction switch correspond à une cascade d’instructions if ...else }
ProgrammationC 39 ProgrammationC 40
goto étiquette
Instructions d'échappement
#include <stdio.h>
Pour rompre le déroulement séquentiel d'une suite d'instructions void main()
{
Break;
# Continue; 8 int i, j;
int i, j=1; for (i = -10; i <= 10; i++) for (i=0; i < 10; i++)
char a; {
for (i = -10; i <= 10; i++){ if (i == 0) for (j=0; j < 4; j++) {
continue; if ( (i*j) == 10)
while(j!=0) /* boucle infinie */ // pour éviter la division par zéro
{ printf(“ %f”, 1 / i); goto trouve;
a=getchar(); } printf("i*j != 10.\n");
if(a= ='x')
break; }
} return (expression);
trouve:
} permet de sortir de la fonction qui la contient
printf("i*j =%d * %d = %d== 10.\n",i,j,i*j);