BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
Historiquement, les lignes de programmation portaient des numéros. Et ces lignes étaient exécutées par la machine dans l’ordre de ces numéros.
Ce type de langages se présente comme une suite de branchements emmêlés les uns dans les autres.
D’une part, on ne peut pas dire que cela favorise la lisibilité du programme.
D’autre part, c’est une source importante d’erreurs.
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
A l’inverse, la programmation structurée, surtout si l’on prend soin de rationaliser la présentation en mettant des lignes de commentaires et en pratiquant l’indentation, évite des erreurs, et révèle sa structure logique de manière très claire.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
les variables
les tableaux
les types personnalisés
les fichiers
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
Le code d'un programme C est toujours contenu dans un ou plusieurs fichier(s) source(s) dont l'extension est .c ou .cpp.
Le code est structuré en fonctions et en sous-fonctions.
Le point de départ d'un programme correspond à la fonction main(), qui en anglais veut dire "fonction principale".
Il est possible de réutiliser des fonctions déjà codées, dont le code est défini dans des fichiers d'en-tête (extension .h), bibliothèques ou librairies.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
#include <stdio.h>
/* This program displays the string "Hello World!" */
int main()
{
printf("Hello World!\n");
return 0;
}
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
Un programme en C se compose de divers jetons et un jeton est soit un mot-clé, un identifiant, une constante, une chaîne de caractères, ou un symbole.
Par exemple, la déclaration de C suivant se compose de 5 jetons:
BSIO1 - SI4 Les bases de la programmation
printf("Hello World!\n");
Un identifiant est un nom utilisé pour identifier une variable, une fonction ou un objet défini par l'utilisateur:
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
Une variable est une boîte stockée en mémoire dans le contexte du programme dont les caractéristiques sont :
En langage C, une variable doit avoir été déclarée avant de pouvoir être utilisée. La déclaration se fait par convention en début de programme, en donnant au compilateur le nom et le type de la variable.
Il est préférable de toujours initialiser une variable en lui donnant une valeur au moment où elle est déclarée.
BSIO1 - SI4 Les bases de la programmation
4.1 - Les variables en langage C
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
La syntaxe à respecter pour déclarer une variable en C est :
type _identifiant = valeur_initiale;
BSIO1 - SI4 Les bases de la programmation
int i, j, k; // déclaration de 3 variables de type entier
int a = 3; // déclaration de 1 variable entier de valeur initiale 3
char c, ch; // déclaration de 2 variables de type caractère (8 octets)
float f, salary; // déclaration de 2 variables de type décimal de précision simple (6 décimaux)
double d; // déclaration de 1 variable de type double précision (10 décimaux)
Les types de base en C sont les suivants:
4.2 - La déclaration et l'initialisation
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
Caractéristiques des types entiers de C :
BSIO1 - SI4 Les bases de la programmation
mot clé | description | valeur min | valeur max | nombre d'octets |
---|---|---|---|---|
char | caractère | -128 | 127 | 1 |
short | entier court | - 32768 | 32767 | 2 |
int | entier standard | -32768 | 32767 | 2 |
long | entier long | -2147483648 | 2147483647 | 4 |
Et les types de rationnels, encore appelés nombres flottants :
mot clé | précision | mantisse | valeur min | valeur max | nombre d'octets |
---|---|---|---|---|---|
float | simple | 6 | 3.4 * 10^-38 | 3.4 * 10^38 | 4 |
double | double | 15 | 1.7 * 10^-308 | 1.7 * 10^308 | 8 |
long double | supplémentaire | 19 | 3.4 * 10^-4932 | 3.4 * 10^4932 | 10 |
En langage C, tout nombre rationnel est représenté sous la forme
<+|-> <mantisse> * 10<exposant> |
où la mantisse est un décimal positif avec un seul chiffre devant la virgule.
4.3 - Les types de variables numériques en langage C
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
Traduisez les déclarations suivantes en langage C, sachant que vous travaillerez dans les ensembles de nombres indiqués entre accolades { }.
Choisissez les types les
plus économiques,
sans perdre en
précision.
BSIO1 - SI4 Les bases de la programmation
Exercices d'application
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
printf() est la fonction permettant d'écrire sur le flux de sortie standard (la console).
Elle est incluse dans la bibliothèque stdio.h
BSIO1 - SI4 Les bases de la programmation
#include <stdio.h>
int main()
{
int a = 5;
int b = 7;
printf("Addition de a et de b, resultat dans c\n");
int c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
scanf() est plus ou moins l’inverse de printf(). Elle permet de récupérer le contenu du flux d'entrée standard (le clavier).
On l’utilise parce que c’est simple, mais la gestion d’erreurs est difficile.
Il faut lui donner l’adresse
de chaque élément lu.
BSIO1 - SI4 Les bases de la programmation
#include <stdio.h>
int main()
{
int a, b, c;
printf("Enter the first value: ");
scanf("%d", &a);
printf("Enter the second value: ");
scanf("%d", &b);
c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}
BTS SIO - AMEP Redoute - Années scolaires 2015-2018 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
if(expression_booléenne)
{
/*
instruction(s) à exécuter
si l'expression booléenne est vraie
*/
}
#include <stdio.h>
int main ()
{
int a = 10;
if( a < 20 )
{
/* si la condition est vraie */
printf("a est plus petit que 20\n" );
}
printf("la valeur de a est : %d\n", a);
return 0;
}
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
if(boolean_expression)
{
/* instruction(s) à exécuter si l'expression booléenne est vraie */
}
else
{
/* instruction(s) à exécuter si l'expression booléenne est fausse */
}
#include <stdio.h>
int main ()
{
int a = 100;
if( a < 20 )
{
/* si la condition est vraie */
printf("a est plus petit que 20\n" );
}
else
{
/* si la condition est fausse */
printf("a n'est pas plus petit que 20\n" );
}
printf("la valeur de a est : %d\n", a);
return 0;
}
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
Ecrivez un programme qui lit trois valeurs entières (A, B et C) saisies au clavier par ordre aléatoire. Le programme devra afficher les 3 valeurs par ordre croissant :
(valeur 1) < (valeur 2) < (valeur 3)
.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
switch(expression)
{
case expression-constante1 :
instruction(s);
break; /* facultatif */
case expression-constante2 :
instruction(s);
break; /* facultatif */
/* vous pouvez ajouter autant de cas que nécessaire */
default : /* facultatif */ instruction(s);
}
#include <stdio.h>
int main ()
{
char note = 'B';
switch(note)
{
case 'A' :
printf("Excellent!\n" );
break;
case 'B' :
printf("Très bien!\n" );
break;
case 'C' :
printf("Moyen\n" );
break;
case 'D' :
printf("Vous avez réussi\n" );
break;
case 'F' :
printf("Examen échoué\n" );
break;
default :
printf("Note non valide\n" );
}
printf("Votre note est %c\n", note );
return 0;
}
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
Nous souhaitons mettre au point un programme qui détermine si un caractère saisi par l'utilisateur est une voyelle ou une consonne.
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
Nous souhaitons mettre au point un programme qui propose à l'utilisateur divers actions en fonction de l'entier qu'il aura saisi.
Exemple : Pour une nouvelle partie, l'utilisateur doit rentrer "1"; pour reprendre une partie existante il faut taper "2"; pour consulter le tableau des scores il faut taper "3"; pour terminer le programme il faut taper "0".
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
while(condition)
{
instruction(s);
}
#include <stdio.h>
int main ()
{
int a = 10;
/* boucle TANT QUE ... FAIRE */
while( a < 20 )
{
printf("valeur de a: %d\n", a);
a = a + 1;
}
return 0;
}
do
{
instruction(s);
}
while(condition);
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
Nous souhaitons mettre au point un programme qui calcule le cube du nombre qu'on lui fournit par saisie au clavier.
Après avoir calculé puis affiché le résultat, le programme attend le prochain nombre à calculer.
Le programme s'arrête lorsque l'utilisateur saisit le chiffre 0.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
Nous souhaitons améliorer le programme précédent qui calcule le cube des nombres qu'on lui fournit.
Nous souhaitons désormais que lorsque le programme s'arrête, il affiche le nombre total de cubes qui ont été calculés.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2018-2019 - Préparé par Axel Féliot
Nous souhaitons améliorer d'avantage le programme précédent afin qu'il affiche le pourcentage de cubes négatifs qui ont été calculés.
Par exemple, en fin de programme on obtient le message :
Vous avez tapé 0, le programme se termine.
Sur 12 calculs de cube, 2 étaient négatifs (16%)
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
for ( initialisation; condition; incrémentation )
{
/* instruction(s) à réaliser : FACULTATIF */
}
#include <stdio.h>
int main ()
{
int a = 0;
/* boucle POUR */
for( a = 10; a < 20; a = a + 1 )
{
printf("la valeur de a est: %d\n", a);
}
return 0;
}
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Nous souhaitons mettre au point un programme qui trouve le plus petit parmi une liste de 100 nombres saisis par l’utilisateur.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Nous souhaitons mettre au point un programme qui affiche la table de multiplication d'un entier quelconque. L'utilisateur doit indiquer la borne supérieure de la table à afficher (comprise entre 10 et 50).
Par exemple, l'utilisateur souhaite-t-il que la table s'affiche jusqu'à 10? 20?
Un tableau est une variable de 1 à N dimensions
Tableau = structure de données du même type
Il est toujours nécessaire de préciser la dimension du tableau
Comme les variables, on initialisera les tableaux
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Un tableau se déclare et se manipule ainsi
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
int tab[7];
tab[0] = 45;
tab[1] = 154;
tab[2] = 58;
tab[3] = 78;
tab[4] = 31;
tab[5] = 5;
tab[6] = 74;
tab[7] = 58; // légal, mais bug!
tab[−1] = 1; // légal, mais bug!
int DERNIERS_JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int size = 9;
float b[size];
long A[25];
float B[100];
double B[100];
char D[30];
Une autre façon d'initialiser un tableau
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
char tab_mois[12];
tab_mois[0] = "Janvier";
tab_mois[1] = "Février";
tab_mois[2] = "Mars";
tab_mois[3] = "Avril";
tab_mois[4] = "Mai";
tab_mois[5] = "Juin";
tab_mois[6] = "Juillet";
tab_mois[7] = "Août";
tab_mois[8] = "Septembre";
tab_mois[9] = "Octobre";
tab_mois[10] = "Novembre";
tab_mois[11] = "Décembre";
tab_mois = {"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août",
"Septembre","Octobre","Novembre","Décembre"};
0 | "Janvier" |
1 | "Février" |
2 | "Mars" |
3 | "Avril" |
4 | "Mai" |
5 | "Juin" |
6 | "Juillet" |
7 | "Août" |
8 | "Septembre" |
9 | "Octobre" |
10 | "Novembre" |
11 | "Décembre" |
En C, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
short A[5] = {1200, 2300, 3400, 4500, 5600};
Voici en exemple le code du programme en langage C dont le but est de remplir un tableau de valeurs lues au clavier :
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
#include <stdio.h>
int main()
{
int A[5];
int I; /* Compteur */
for (I=0; I<5; I++)
scanf("%d", &A[I]);
return 0;
}
1. Ecrire un programme qui lit la dimension N d'un tableau TAB du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Calculer et afficher ensuite la somme et la moyenne des éléments du tableau.
2. Ecrire un programme qui lit la dimension N d'un tableau TAB du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Fichier = plage de données structurées
Un fichier peut être stocké sur disque dur ou chargé en mémoire RAM. Il faut toujours charger un fichier en RAM pour le manipuler.
Il existe plusieurs modes d'accès au fichier (direct, séquentiel, indexé, ...)
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Il est possible de créer ses propres types de données :
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
struct [identifiant]
{
/* Déclaration des membres */
type id_membre1;
type id_membre2;
type id_membreN;
} [déclaration de une ou plusieurs variable(s)];
#include <stdio.h>
#include <string.h>
int main( )
{
struct Livres
{
char titre[50];
char auteur[50];
char sujet[100];
int book_id;
} livre1;
strcpy( livre1.titre, "C Programming");
strcpy( livre1.auteur, "Nuha Ali");
strcpy( livre1.sujet, "Tutoriel de programmation en C");
livre1.book_id = 6495407;
/* print Book1 info */
printf( "Le titre est : %s\n", livre1.titre);
printf( "L'auteur est : %s\n", livre1.auteur);
printf( "Le sujet est : %s\n", livre1.sujet);
printf( "L'ident. est : %d\n", livre1.book_id);
return 0;
}