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
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ée scolaire 2015-2016 - 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.
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
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.
Chaque fonction doit être déclarée en donnant son prototype : son nom, qui doit être unique à l'intérieur d'un même programme, ses paramètres appelés paramètres d'entrée, et son résultat appelé retour de fonction.
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é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
#include <stdio.h>
/* This program displays the string "Hello World!" */
int main()
{
printf("Hello World!\n");
return 0;
}
Le but d'une fonction ou sous-fonction (aussi appelée sous-programme ou procédure) est d'optimiser le code et son exécution en évitant la redondance.
Un sous-programme (ou procédure, fonction ou sous-fonction) est un bout de code indépendant dont l'exécution va produire un résultat précis à partir de paramètres (ou arguments) qui lui seront fournis au début de son exécution.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Le sous-programme va contenir du code (des instructions) qui devra être utilisé plusieurs fois par le programme principal. Pour utiliser le code d'un sous-programme, on réalise au besoin un appel du sous-programme ou encore un appel de fonction.
Il n'y a pas de limite dans les appels (sauf en cas de récursivité).
Lorsque la fonction est appelée, le contexte d'exécution du programme principal est sauvegardé. Le contexte d'exécution de la fonction est mis en place. À la fin de la fonction, le contexte d'exécution du programme principal est rechargé et reprend là où il s'était arrêté.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
La fonction est caractérisée par :
La fonction doit être déclarée (son code doit être explicitement rédigé) en dehors du programme principal, soit dans le même fichier que le main, soit dans un fichier .c indépendant.
Ceci est le prototype d'une fonction :
type_retour nom_fonction(liste des paramètres)
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - 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
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
#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;
}
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
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
#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;
}
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>
/*
Déclaration du code de la fonction
en dehors du main
*/
void MaFonctionBonjour()
{
printf("Bonjour!\n");
return;
}
int main()
{
int i;
MaFonctionBonjour(); // appel de la fonction
for(i=0; i<5; i++)
MaFonctionBonjour();
return 0;
}
Déclarez une fonction qui permet, à chaque fois qu'on l'appelle, d'afficher le message "Bonjour" sur la console avec un retour à la ligne.
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>
/*
Cette fonction permet d'afficher sur la console le message
"Bonjour" suivi du nom de la personne saluée
@param: chaîne de caractère contenant le nom de la personne saluée
@return: void - rien
*/
void BonjourUntel(char* pnom)
{
printf("Bonjour %s !\n", pnom);
return;
}
int main()
{
char nom[30];
printf("Veuillez saisir votre nom\t");
gets(nom);
BonjourUntel(nom); // appel de la fonction avec passage de paramètre
return 0;
}
Déclarez une fonction qui permet, à chaque fois qu'on l'appelle, d'afficher le message "Bonjour " suivi du nom de la personne saluée passé en paramètre. Ce message doit s'afficher sur la console avec un retour à la ligne.
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>
/*
Cette fonction permet d'afficher sur la console
la moyenne de deux valeurs entières passées en paramètre.
@param1: entier contenant la valeur entière 1
@param2: entier contenant la valeur entière 2
@return: void - rien
*/
void MaMoyenne(int val1, int val2)
{
float moy=0.00;
moy = (val1 + val2) / 2 ;
printf("La moyenne de %d et %d est %f\n", val1, val2, moy);
return;
}
int main()
{
int note1, note2;
MaMoyenne(15, 19);
printf("Veuillez saisir la note numéro 1\t");
scanf("%d", ¬e1);
printf("Veuillez saisir la note numéro 2\t");
scanf("%d", ¬e2);
MaMoyenne(note1, note2); // appel de la fonction avec passage de paramètre
return 0;
}
Déclarez une fonction qui permet, à chaque fois qu'on l'appelle, d'afficher la moyenne de deux valeurs entières passées en paramètre.
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>
/*
Cette fonction permet de calculer
la moyenne de deux valeurs entières passées en paramètre.
@param1: entier contenant la valeur entière 1
@param2: entier contenant la valeur entière 2
@return: réel valeur de la moyenne
*/
float MaMoyenne(int val1, int val2)
{
float moy=0;
moy = (val1 + val2) / 2 ;
return(moy);
}
int main()
{
int note1, note2;
float moyenne=0.00;
// appel de la fonction avec valeurs fixes
moyenne = MaMoyenne(15, 19);
printf("La moyenne de %d et %d est %f\n", 15, 19, moyenne);
// appel de la fonction avec valeurs saisies
printf("Veuillez saisir la note numéro 1\t");
scanf("%d", ¬e1);
printf("Veuillez saisir la note numéro 2\t");
scanf("%d", ¬e2);
moyenne = MaMoyenne(note1, note2); // appel de la fonction avec passage de paramètre
printf("La moyenne de %d et %d est %f\n", note1, note2, moyenne);
return 0;
}
Déclarez une fonction qui permet, à chaque fois qu'on l'appelle, de calculer la moyenne de deux valeurs entières passées en paramètre. Le résultat de la fonction est la moyenne calculée.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Donnez le code C d'un programme permettant à l'utilisateur de saisir la longueur (en cm) du rayon d'un cercle, puis d'afficher la surface du cercle par appel à une fonction dont le rôle est de calculer la surface à partir de la longueur du rayon passé en paramètre puis de retourner cette valeur. Axes de réflexion :
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Ecrire une fonction MIN et une fonction MAX qui déterminent le minimum et le maximum de deux nombres réels.
Ecrire un programme se servant des fonctions MIN et MAX pour déterminer le minimum et le maximum de quatre nombres réels entrés au clavier.
Axes de réflexion :
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Les fonctions en C sont définies à l'aide de blocs d'instructions. Un bloc d'instructions est encadré d'accolades et composé de deux parties:
Blocs d'instructions en C
{
<déclarations locales>
<instructions>
}
Par opposition à d'autres langages de programmation, ceci est vrai pour tous les blocs d'instructions, non seulement pour les blocs qui renferment une fonction. Ainsi, le bloc d'instructions d'une commande if, while ou for peut théoriquement contenir des déclarations locales de variables et même de fonctions.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Exemple
La variable d'aide I est déclarée à l'intérieur d'un bloc conditionnel. Si la condition (N>0) n'est pas remplie, I n'est pas défini. A la fin du bloc conditionnel, I disparaît.
if (N>0)
{
int I;
for (I=0; I<N; I++)
...
}
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Les variables déclarées dans un bloc d'instructions sont uniquement visibles à l'intérieur de ce bloc. On dit que ce sont des variables locales à ce bloc.
void HELLO()
{
char NOM[20];
printf("Introduisez votre nom : ");
gets(NOM);
printf("Bonjour %s !\n", NOM);
return;
}
Exemple:
La variable NOM est définie
localement dans le bloc
extérieur de la fonction HELLO.
Ainsi, aucune autre fonction
n'a accès à la variable NOM
Attention ! Une variable déclarée à l'intérieur d'un bloc cache toutes les variables du même nom des blocs qui l'entourent.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Les variables déclarées au début du fichier (à l'extérieur de toutes les fonctions) sont disponibles à toutes les fonctions du programme.
Ce sont alors des variables globales.
En général, les variables globales sont déclarées immédiatement derrière les instructions #include au début du programme..
#include <stdio.h>
int STATUS;
void A(...)
{
...
if (STATUS>0)
STATUS--;
else
...
...
}
void B(...)
{
...
STATUS++;
...
}
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Conseils
L'utilisation de variables globales devient néanmoins inévitable, si