Qu'est-ce que le C ?

Le C est un langage compilé proche du matériel : fonctions, tableaux, pointeurs et gestion explicite de la mémoire.

À quoi ça sert ? Systèmes, embarqué, performances : en NSI pour comprendre comment la machine représente les données.

Éditeur C Exercices Quiz Kahoot Flashcards

Programme minimal

main

Fichier main.c → gcc main.c -o prog → ./prog

#include <stdio.h>
Entrées / sorties
int main(void)
Point d'entrée
return 0;
Code de succès
printf("Bonjour\n");
Affichage console
main.c
#include <stdio.h>

int main(void) {
    printf("Bonjour NSI !\n");
    return 0;
}

Types & variables

int : float

Types primitifs et constantes : taille fixe selon la plateforme.

int age = 17;
Entier
float moy = 14.5f;
Décimal simple précision
double pi = 3.14159;
Double précision
const int MAX = 100;
Constante

Fonctions

void : int

Déclaration, définition, prototype en tête de fichier, passage par valeur.

int carre(int x);
Prototype
int carre(int x) { return x*x; }
Définition
void afficher(int n);
Pas de valeur de retour
static int compteur = 0;
Variable locale persistante

Tableaux & pointeurs

* : &

Un tableau est une zone mémoire contiguë ; un pointeur stocke une adresse.

int t[5] = {1,2,3,4,5};
Tableau statique
int *p = &t[0];
Adresse du premier élément
printf("%d", *(p+2));
3e élément via pointeur
scanf("%d", &n);
Lecture clavier

Boucles & conditions

for : while

Structures de contrôle classiques du langage C.

if (n > 0) { }
Condition
for (int i=0; i<n; i++)
Boucle comptée
while (cond) { }
Tant que vrai
switch (c) { case 'a': }
Choix multiple

Structures

struct

Regrouper plusieurs champs dans un même type.

struct Point { int x; int y; };
Définition
struct Point p = {1, 2};
Initialisation
p.x = 10;
Accès au champ

Chaînes de caractères

char[]

En C, une chaîne est un tableau de char terminé par '\0'.

char msg[] = "NSI";
Littéral chaîne
printf("%s", msg);
Afficher une chaîne
#include <string.h>
strlen, strcpy…

Mémoire dynamique

malloc

Allocation sur le tas : taille connue seulement à l'exécution : toujours libérer avec free.

int *t = malloc(n * sizeof(int));
Tableau dynamique
if (t == NULL) return 1;
Échec d'allocation
free(t); t = NULL;
Éviter double free

On révise quoi ?