5-Langage C
5-Langage C
5-Langage C
Langage C
Table des matières
1. Premiers pas......................................................................................................................................2
1.1. Console ou fenêtre ?.................................................................................................................2
1.2. Mon premier programme..........................................................................................................2
1.3. Les commentaires.....................................................................................................................3
2. Les variables.....................................................................................................................................4
2.1. Déclarer une variable................................................................................................................4
2.2. Les constantes...........................................................................................................................5
2.3. Les chaînes de caractères..........................................................................................................5
2.4. Afficher le contenu d'une variable............................................................................................6
2.5. Récupérer une saisie.................................................................................................................6
3. Les opérations de base......................................................................................................................7
3.1. Raccourcis d'écriture.................................................................................................................7
3.2. La bibliothèque mathématique..................................................................................................8
4. Les conditions...................................................................................................................................9
4.1. if… else.....................................................................................................................................9
4.2. switch... case...........................................................................................................................10
4.3. Les ternaires : des conditions condensées...............................................................................11
5. Les boucles.....................................................................................................................................12
5.1. Tant que : while.......................................................................................................................12
5.2. Faire tant que : do... while......................................................................................................12
5.3. Boucle : for.............................................................................................................................13
6. Les fonctions..................................................................................................................................13
6.1. Fonctions de manipulation des chaînes..................................................................................15
6.2. Les fonctions C.......................................................................................................................15
7. Les pointeurs..................................................................................................................................16
7.1. Utilisation de pointeurs...........................................................................................................16
7.2. Passer un pointeur à une fonction...........................................................................................17
8. Les tableaux....................................................................................................................................17
8.1. Déclarer un tableau.................................................................................................................18
8.2. Parcourir un tableau................................................................................................................18
8.3. Passage de tableaux à une fonction.........................................................................................19
8.4. Tableaux multi dimensionnels................................................................................................19
9. Les paramètres de la fonction main................................................................................................20
Le C est un langage de programmation impératif, généraliste, conçu pour la programmation
système. Inventé au début des années 1970 pour réécrire UNIX, C est devenu un des langages les
plus utilisés. De nombreux langages plus modernes comme C++, Java et PHP reprennent des
aspects de C.
5-langage_C.odt 1
Classe de première SI
1. Premiers pas
1.1. Console ou fenêtre ?
Il existe deux types de programmes :
• les programmes avec fenêtres ;
• les programmes en console.
Fenêtre Console
Les programmes console ont été les premiers à apparaître. À cette époque, l'ordinateur ne gérait que
le noir et blanc et il n'était pas assez puissant pour créer des fenêtres comme on le fait aujourd'hui.
int main()
{
printf("Hello world!\n");
return 0;
}
Les premières lignes qui commencent par # sont des directives de préprocesseur qui seront lues par
un programme appelé préprocesseur, un programme qui se lance au début de la compilation.
#include <stdio.h>
#include <stdlib.h>
Ces lignes demandent d'inclure deux fichiers au projet, c'est-à-dire d'ajouter deux fichiers pour la
compilation : stdio.h et stdlib.h.
Ces fichiers sont des fichiers source tout prêts qu'on les appelle bibliothèques qui contiennent la
5-langage_C.odt 2
Classe de première SI
plupart des fonctions de base dont a besoin un programme. stdio.h en particulier contient la fonction
printf.
int main()
main est la fonction principale du programme, c'est toujours par la fonction main que le programme
commence. C'est la seule qui soit obligatoire, aucun programme ne peut être compilé sans elle.
Une fonction a un début et une fin, délimités par des accolades { et } et retourne ou non une valeur.
Toute la fonction main se trouve donc entre ces accolades.
Les lignes à l'intérieur d'une fonction s'appellent des instructions.
Toute instruction se termine obligatoirement par un point-virgule « ; ».
printf("Hello world!\n"); demande à afficher le message « Hello world! » à l'écran.
return 0; la fonction main retourne la valeur 0 de type entière (int).
En pratique, 0 signifie « tout s'est bien passé » et n'importe quelle autre valeur signifie « erreur ».
Pour utiliser une fonction, il suffit d'écrire son nom, suivi d'une parenthèse ouvrante, puis
éventuellement de paramètres séparés par une virgule, suivi d'une parenthèse fermante et d'un
point-virgule.
ma_fonction(parametre_1, paramètre2) ;
Le caractère \n fait partie des caractères spéciaux qui commence par un anti-slash ( \ ), et le second
un nombre ou une lettre. Exemple :
• \n : retour à la ligne
• \t : tabulation
5-langage_C.odt 3
Classe de première SI
Exemple :
/*
Ci-dessous, ce sont des directives de préprocesseur.
Ces lignes permettent d'ajouter des fichiers au projet,
fichiers que l'on appelle bibliothèques contiennent des fonctions toutes prêtes.
*/
#include <stdio.h>
#include <stdlib.h>
/*
Ci-dessous, vous avez la fonction principale du programme, appelée main.
C'est par cette fonction que tous les programmes commencent.
*/
int main()
{
printf("Bonjour"); // Cette instruction affiche Bonjour à l'écran
return 0; // Le programme renvoie le nombre 0 puis s'arrête
}
Lors de la compilation, tous les commentaires seront ignorés. Ces commentaires n'apparaîtront pas
dans le programme final, ils servent seulement aux programmeurs.
2. Les variables
2.1. Déclarer une variable
En langage C, une variable est constituée :
• d'une valeur : par exemple le nombre qu'elle stocke.
• d'un nom : c'est ce qui permet de la manipuler.
Un nom de variable ne peut contenir que des lettres et des chiffres et doit commencer par une
lettre ; les espaces et accents sont interdits et le langage est sensible à « la casse »1.
Pour manipuler une variable, il faut la déclarer et indiquer son type. Voici les principaux types de
variables existant en langage C :
Nom du type Minimum Maximum
signed char -127 128
int -32 767 32 768
long -2 147 483 647 2 147 483 640
float -1.1037 1.1037
double -1.1037 1.1037
Les trois premiers types (signed char, int, long) permettent de stocker des nombres entiers : 1, 2, 3,
4… alors que les deux derniers (float, double) permettent de stocker des nombres décimaux
(appelés nombres flottants) : 13.8, 16.911…
Pour les types entiers (signed char, int, long…), il existe d'autres types dits unsigned (non signés)
qui eux ne peuvent stocker que des nombres positifs. Pour les utiliser, il suffit d'écrire le mot
1 Distinction majuscules/minuscules
5-langage_C.odt 4
Classe de première SI
2 American Standard Code for Information Interchange (Code américain normalisé pour l'échange d'information)
3 en valeur décimale (chaine[1] = 0x61 en hexadécimal)
5-langage_C.odt 5
Classe de première SI
return 0;
}
return 0;
}
5-langage_C.odt 6
Classe de première SI
return 0;
}
5-langage_C.odt 7
Classe de première SI
5 Équivalent à la fonction abs de la librairie standard stdlib.h (ne foctionne que sur des entiers)
5-langage_C.odt 8
Classe de première SI
4. Les conditions
Une condition peut être écrite en langage C sous différentes formes. On parle de structures
conditionnelles.
return 0;
}
Dans le cas des conditions multiples, on utilise les opérateurs logiques.
int main()
5-langage_C.odt 9
Classe de première SI
{
int age = 8; // initialisation de la variable
unsigned char garcon = 0; // équivalent d'un booléen initialisé à faux
if ( age < 12 && garcon ) // si j'ai moins de 12 ans et que je suis un garçon
{
printf("Bonjour Jeune homme");
}
else
{
if ( age < 12 && !garcon ) // si j'ai moins de 12 ans et que je suis pas un garçon
{
printf("Bonjour Mademoiselle");
}
}
return 0;
}
// début de la semaine
if ( !strcmp(jour, "lundi") || !strcmp(jour, "mardi") )
printf("courage !!!");
// milieu de la semaine
else if ( !strcmp(jour, "mercredi") )
printf("c'est le jour des enfants");
// fin de la semaine
else if ( !strcmp(jour, "jeudi") || !strcmp(jour, "vendredi") )
printf("bientôt le we !");
else // il faut traiter les autres jours (cas par défaut)
printf("vive le week end !");
return 0;
}
Cependant, pour une imbrication de if... else trop importante, il existe une autre structure plus
souple : switch... case.
int main()
{
const int LUNDI = 0, MARDI = 1, MERCREDI = 2, JEUDI = 3, VENDREDI = 4,
SAMEDI = 5, DIMANCHE = 6;
int jour = MERCREDI;
char *texte;
5-langage_C.odt 10
Classe de première SI
{
case 0 : // dans le cas où c'est le début de la semaine
case 1 : // on peut tester deux valeurs à la suite
texte = "courage !!!";
break; // ne pas oublier « break » sinon le langage C continue
printf("%s\n", texte);
return 0;
}
Le mot-clé default est le traitement par défaut quelle que soit la valeur de la variable.
Le langage C traite les instructions des case à la suite. Pour interrompre le traitement, il faut utiliser
break.
if ( age >= 18 )
{
majeur = 1;
}
else
{
majeur = 0;
}
return 0;
}
ou encore plus simplement :
5-langage_C.odt 11
Classe de première SI
int main()
{
int age = 24;
unsigned char majeur = ( age >= 18 ) ? 1 : 0 ;
return 0;
}
5. Les boucles
5.1. Tant que : while
Une boucle permet de répéter des instructions plusieurs fois.
• les instructions sont d'abord exécutées dans l'ordre, de haut en bas
• à la fin des instructions, on retourne à la première
• et ainsi de suite...
Tant que la condition est remplie, les instructions sont réexécutées. Dès que la condition n'est plus
remplie, on sort de la boucle.
int main()
{
int nombre_de_lignes = 1;
return 0;
}
Il faut TOUJOURS s'assurer que la condition sera fausse au moins une fois. Si elle ne l'est jamais,
alors la boucle s'exécutera à l'infini !
5-langage_C.odt 12
Classe de première SI
return 0;
}
return 0;
}
Cette boucle est utilisée lorsque l'on connaît à l'avance le nombre d'instructions à répéter.
6. Les fonctions
Une fonction est une série d'instructions qui effectue des actions qui sont répétées plusieurs fois
dans le code sans avoir à les réécrire à chaque fois.
Lorsqu'on appelle une fonction, il y a trois étapes.
1. L'entrée: on donne des informations à la fonction en lui passant des paramètres avec
lesquelles travailler.
2. Le traitement : grâce aux informations qu'elle a reçues en entrée.
3. La sortie : une fois qu'elle a fini son traitement, la fonction renvoie un résultat.
5-langage_C.odt 13
Classe de première SI
return 0;
}
Une fonction peut recevoir plusieurs paramètres séparés par des virgules.
int puissance(int valeur, int exposant)
{
// fonction : calcule la valeur d'un nombre élevé à une puissance
// in : valeur, valeur à calculer ; exposant, puissance
// out: la valeur élevée à la puissance
int i, total = 1;
for (i = 1; i <= exposant; i++)
total *= valeur;
return total;
}
5-langage_C.odt 14
Classe de première SI
5-langage_C.odt 15
Classe de première SI
7. Les pointeurs
Une donnée est toujours stockée en mémoire. La valeur stockée dans une variable possède donc une
adresse6 et une seule. On ne peut pas stocker deux nombres par adresse.
Le langage C permet d'accéder à la valeur d'une variable ou à son adresse.
Pour afficher l'adresse de la variable, on doit utiliser le format %ld ou %p (ce dernier affichera la
valeur au format hexadécimal) dans le printf. En outre, on doit envoyer à la fonction printf non pas
la variable, mais son adresse… Pour cela, il faut mettre le symbole & devant la variable.
int main()
{
int i = 10;
return 0;
}
// Créer une variable de type pointeur sur un int dont la valeur vaut l'adresse de la variable age
int *ptrAge = &age;
Remarque : le pointeur doit pointer sur une variable du type correspondant à sa déclaration.
On accède à la valeur pointée par un pointeur en le préfixant du symbole *.
int main()
{
int age = 10;
int *ptrAge = &age;
// et là aussi !
printf("valeur de la variable age %d et du pointeur %d\n", age, *ptrAge);
return 0;
}
Pour le pointeur ptrAge :
• ptrAge signifie : « Je veux la valeur de ptrAge » (cette valeur étant une adresse),
• * ptrAge signifie : « Je veux la valeur de la variable qui se trouve à l'adresse contenue dans
5-langage_C.odt 16
Classe de première SI
ptrAge ».
return 0;
}
En résumé :
1. Les variables heures et minutes sont créées dans le main.
2. On envoie à la fonction decoupeMinutes l'adresse de heures et minutes.
3. La fonction decoupeMinutes récupère ces adresses dans des pointeurs appelés ptrHeures
et ptrMinutes.
4. La fonction decoupeMinutes modifie directement les valeurs des variables heures et
minutes en mémoire car elle possède leurs adresses dans des pointeurs.
8. Les tableaux
Les tableaux sont une suite de variables de même type, situées dans un espace contigu en mémoire.
Un tableau a une dimension bien précise.
5-langage_C.odt 17
Classe de première SI
return 0;
}
Ou d'utiliser le pointeur du tableau :
int main()
{
int tableau[4] = {10, 23, 505, 8};
int i;
5-langage_C.odt 18
Classe de première SI
return 0;
}
Ainsi l'instruction tableau[2] est équivalente à *(tableau + 2).
Remarque : l'instruction printf("%d\n", tableau); donne l'adresse en mémoire du 1er élément du
tableau.
int main()
{
int premiersNombres[2][5] = // tableau 2 dimension : 2 x 5
{
{0, 2, 4, 6, 8}, // ne pas oublier la virgule !
{1, 3, 5, 7, 9}
};
int i, j;
5-langage_C.odt 19
Classe de première SI
}
}
return 0;
}
Le paramètre argc indique le nombre de chaînes de caractères sur lequel pointe argv.
Ces chaînes de caractères sont en réalité envoyées par le système d'exploitation (Windows, GNU/
Linux, etc...) au programme au lancement de ce dernier.
La première cellule de argv pointe sur une chaîne de caractères qui indique la commande utilisée
pour lancer le programme (ex : test.exe ). Par ailleurs, la norme veut que argc soit strictement
supérieur à 0 et que argv[argc] pointe sur NULL.
Les autres cellules peuvent pointer sur d'autres chaînes de caractères envoyées par le système
d'exploitation qui sont généralement indiquées par l'utilisateur en ligne de commande, grâce à la
console.
test.exe -b 9600
Chaque mot après le nom du programme sera placé dans une chaîne de caractères à laquelle vous
pourrez accéder grâce à argv.
Ainsi, dans l'exemple ci-dessus, on aura :
• dans argv[0] : test.exe
• dans argv[1] : -b
• dans argv[2] : 9600
Ainsi, on peut facilement récupérer ces arguments dans le programme C :
int main(int argc, char *argv[])
{
int i;
return EXIT_SUCCESS;
}
5-langage_C.odt 20
Classe de première SI
TEST
1 - Comment s'appelle le programme chargé de traduire un code source en binaire ?
• Le diffuseur
• Le compilateur
• Le binarisateur
2 - Lequel de ces programmes n'est pas un IDE ?
• Bloc-Notes
• Microsoft Visual Studio
• Code::Blocks
• Xcode
3 - Où s'afficheront les erreurs de compilation dans Code::Blocks d'après la capture suivante ?
• Zone (1)
• Zone (2)
• Zone (3)
• Zone (4)
int main()
{
printf("Hello world!\n");
return 0;
5-langage_C.odt 21
Classe de première SI
5-langage_C.odt 22
Classe de première SI
Ligne n°3
Ligne n°5
Ligne n°7
• for (compteur = 1 ; compteur < 9 ; compteur += 2)
• for (compteur = 1 ; compteur <= 7 ; compteur++)
• for (compteur = 0 ; compteur < 9 ; compteur += 2)
• for (compteur = 1 ; compteur < 8 ; compteur++)
10 - Combien de fois le message "Salut" sera-t-il affiché ici ?
int compteur = 14;
while (compteur < 15)
{
printf("Salut\n");
}
• 0 fois
• 1 fois
• 14 fois
• 15 fois
• C'est une boucle infinie
11 - Dans quel cas l'instruction return n'est pas obligatoire ?
• Quand la fonction ne prend aucun paramètre en entrée
• Quand la fonction est de type void
• Quand la fonction doit renvoyer 0
12 - Que sont les paramètres d'une fonction ?
• Des indications sur le nom de la fonction
• Des indications sur la valeur qu'elle doit renvoyer
• Des variables qu'on lui envoie pour qu'elle puisse travailler
13 - Quel est le problème de cette fonction qui est censée calculer le carré de la variable nombre ?
Rappel : le carré d'un nombre, c'est nombre * nombre (le nombre multiplié par lui-même)
int carre(int nombre){
int resultat = 0;
resultat = nombre * nombre;
}
5-langage_C.odt 23