Cours langage de programmation C
Un guide complet pour débuter en programmation C
Introduction au langage C
Le langage C est un langage de programmation créé en 1972 par Dennis Ritchie. C’est un langage de bas niveau très performant, encore largement utilisé aujourd’hui pour le développement système, les systèmes embarqués, et comme base d’apprentissage de la programmation.
1. Structure d’un programme C
Tout programme C suit une structure de base :
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
Explications :
#include <stdio.h>: directive du préprocesseur qui inclut la bibliothèque standard d’entrées/sortiesint main(): fonction principale, point d’entrée du programmeprintf(): fonction pour afficher du textereturn 0: indique que le programme s’est terminé correctement
2. Les variables et types de données
Types de base
int age = 25; // Entier
float prix = 19.99; // Nombre décimal (simple précision)
double pi = 3.14159265; // Nombre décimal (double précision)
char lettre = 'A'; // Caractère
char nom[50] = "Alice"; // Chaîne de caractères
Affichage des variables
printf("Age: %d\n", age);
printf("Prix: %.2f\n", prix);
printf("Pi: %.8lf\n", pi);
printf("Lettre: %c\n", lettre);
printf("Nom: %s\n", nom);
Contrôler la précision après la virgule
printf("Prix: %.2f\n", prix); // Affiche 2 décimales : 19.99
printf("Pi: %.8lf\n", pi); // Affiche 8 décimales : 3.14159265
printf("Pi: %.2lf\n", pi); // Affiche 2 décimales : 3.14
Déclaration et initialisation
int x; // Déclaration
x = 10; // Initialisation
int y = 20; // Déclaration et initialisation combinées
3. Les opérateurs
Opérateurs arithmétiques
int a = 10, b = 3;
int somme = a + b; // Addition (13)
int difference = a - b; // Soustraction (7)
int produit = a * b; // Multiplication (30)
int quotient = a / b; // Division entière (3)
int reste = a % b; // Modulo (1)
Opérateurs de comparaison
a == b // Égal à
a != b // Différent de
a > b // Supérieur à
a < b // Inférieur à
a >= b // Supérieur ou égal à
a <= b // Inférieur ou égal à
Opérateurs logiques
&& // ET
|| // OU
! // NON (inverse)
4. Les structures de contrôle
Conditions (if/else)
Pour un choix simple
int age = 18;
if (age >= 18) {
printf("Vous êtes majeur\n");
} else if (age >= 13) {
printf("Vous êtes adolescent\n");
} else {
printf("Vous êtes enfant\n");
}
Switch
Les switch cases sont souvent utilisés pour les menus avec beaucoup de choix
int jour = 3;
switch (jour) {
case 1:
printf("Lundi\n");
break;
case 2:
printf("Mardi\n");
break;
case 3:
printf("Mercredi\n");
break;
default:
printf("Autre jour\n");
}
5. Les boucles
Boucle for
Répète de 0 à 5 exclus avec une incrémentation de 1 (comme Un+1)
for (int i = 0; i < 5; i++) {
printf("Itération %d\n", i);
}
Boucle while
Répète jusqu’à atteindre 5 exclus
int compteur = 0;
while (compteur < 5) {
printf("Compteur: %d\n", compteur);
compteur++;
}
Boucle do-while
Répète jusqu’à atteindre 5 exclus en essayant au moins une fois
int i = 0;
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
6. Les fonctions
// Déclaration et définition d'une fonction
int additionner(int a, int b) {
return a + b;
}
// Utilisation
int main() {
int resultat = additionner(5, 3);
printf("Résultat: %d\n", resultat);
return 0;
}
Fonction sans retour (void)
void afficherMessage() {
printf("Bonjour!\n");
}
7. Les tableaux
Tableaux unidimensionnels
int nombres[5] = {10, 20, 30, 40, 50};
// Accès aux éléments
printf("%d\n", nombres[0]); // Affiche 10
// Parcourir un tableau
for (int i = 0; i < 5; i++) {
printf("%d ", nombres[i]);
}
Tableaux multidimensionnels
int matrice[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printf("%d\n", matrice[1][2]); // Affiche 6
8. Les pointeurs (introduction)
Les pointeurs sont une notion fondamentale, mais complexe en C.
int x = 10;
int *ptr = &x; // ptr contient l'adresse de x
printf("Valeur de x: %d\n", x);
printf("Adresse de x: %p\n", &x);
printf("Valeur pointée par ptr: %d\n", *ptr);
Pour accéder à une valeur pointé sur une structure, on ne met pas ex: *p.element mais on met *p -> element
9. Les structures
// Définition du nouveau type "Etudiant"
typedef struct {
char nom[50];
int age;
float moyenne;
} Etudiant; // "Etudiant" devient le nom du type
Avec Pointeur
déclaration fonction=> .h
(void proc1(mastruct* p)); p= adresse d’une variable mastruct
p -> a = 2; *p.a (identique, mais à ne pas écrire mauvaise syntaxe) Accès à la variable a à l’intérieur de la structure pointée par p
Exemple dans un main
#include <stdio.h>
#include <string.h> // Nécessaire pour strcpy
int main() {
// Déclaration simple (comme: int x;)
Etudiant e1;
// Initialisation des champs
e1.age = 20;
e1.moyenne = 15.5;
// Attention : pour les chaînes, on utilise strcpy (String Copy)
// On ne peut pas faire : e1.nom = "Thomas";
strcpy(e1.nom, "Thomas");
// Autre méthode : Déclaration et initialisation immédiate
Etudiant e2 = {"Marie", 22, 18.0};
// Affichage
printf("Etudiant 1 : %s, Moyenne : %.2f\n", e1.nom, e1.moyenne);
printf("Etudiant 2 : %s, Moyenne : %.2f\n", e2.nom, e2.moyenne);
return 0;
}
10. Aléatoire
# include <time.h> // Nécessaire pour utiliser time()
rand() // Aléatoire simple (répétitif)
rand(time(NULL)) // Aléatoire avec le temps
11. Les entrées/sorties
Affichage (printf)
int age = 25;
float taille = 1.75;
printf("J'ai %d ans\n", age);
printf("Je mesure %.2f m\n", taille);
Saisie (scanf)
int nombre;
printf("Entrez un nombre: ");
scanf("%d", &nombre);
printf("Vous avez saisi: %d\n", nombre);
12. Exemple complet
Voici un programme qui calcule la moyenne de notes :
#include <stdio.h>
float calculerMoyenne(float notes[], int taille) {
float somme = 0;
for (int i = 0; i < taille; i++) {
somme += notes[i];
}
return somme / taille;
}
int main() {
float notes[5];
int nbNotes = 5;
printf("Entrez 5 notes:\n");
for (int i = 0; i < nbNotes; i++) {
printf("Note %d: ", i + 1);
scanf("%f", ¬es[i]);
}
float moyenne = calculerMoyenne(notes, nbNotes);
printf("\nMoyenne: %.2f\n", moyenne);
if (moyenne >= 10) {
printf("Admis!\n");
} else {
printf("Recalé!\n");
}
return 0;
}