Funciones avanzadas disponibles en la aplicación
Le langage C est un langage de programmation impératif, bas niveau, utilisé pour la programmation système et les applications performantes.
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
| Type | Taille typique | Description |
|---|---|---|
| int | 4 octets | Entier signé |
| float | 4 octets | Nombre à virgule flottante simple |
| double | 8 octets | Nombre à virgule flottante double |
| char | 1 octet | Caractère ASCII |
| void | - | Type vide (absence de type) |
int a = 5;
float pi = 3.14;
char c = 'A';
int x;
scanf("%d", &x); // Lecture d'un entier
printf("Valeur: %d\n", x); // Affichage
if (a > 0) {
printf("Positif\n");
} else {
printf("Négatif ou nul\n");
}
if (a > 0) {
printf("Positif\n");
} else if (a == 0) {
printf("Nul\n");
} else {
printf("Négatif\n");
}
switch (a) {
case 1:
printf("Un\n");
break;
case 2:
printf("Deux\n");
break;
default:
printf("Autre\n");
}
Note: La structure switch ne supporte que les valeurs entières (ou énumérations).
Les boucles permettent la répétition d’un bloc de code.
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("i = %d, j = %d\n", i, j);
}
}
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
Le pointeur est une variable qui contient l’adresse mémoire d’une autre variable.
int *p; // p est un pointeur vers un int
int a = 10;
p = &a; // p contient l'adresse de a
printf("%d\n", *p); // Affiche la valeur pointée par p (ici 10)
Utilisations fréquentes :
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 5, b = 10;
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
}
La récursion est une fonction qui s’appelle elle-même.
[Formule mathématique]
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
Permettent de regrouper plusieurs variables sous un même type.
struct Point {
int x;
int y;
};
struct Point p1;
p1.x = 10;
p1.y = 20;
struct Point p2 = {5, 15};
void printPoint(struct Point pt) {
printf("(%d, %d)\n", pt.x, pt.y);
}
Note : On peut aussi utiliser typedef pour simplifier la syntaxe :
typedef struct {
int x;
int y;
} Point;
Point p3 = {1, 2};
En C, la mémoire peut être allouée dynamiquement avec malloc, calloc, realloc et libérée avec free.
int *arr = malloc(5 * sizeof(int)); // allocation mémoire pour 5 int
if (arr == NULL) {
// Gestion erreur allocation
}
for (int i = 0; i < 5; i++) {
arr[i] = i * i;
}
free(arr); // libération mémoire
Important : Toujours libérer la mémoire allouée pour éviter les fuites.
int add(int a, int b) {
return a + b;
}
int operate(int (*func)(int, int), int x, int y) {
return func(x, y);
}
int main() {
int result = operate(add, 3, 4);
printf("%d\n", result); // Affiche 7
}
#define PI 3.14159
#define MAX(a,b) ((a) > (b) ? (a) : (b))
Attention : Les macros ne sont que du texte substitué, attention aux effets de bord.
#include <errno.h>
#include <stdio.h>
FILE *f = fopen("file.txt", "r");
if (!f) {
perror("Erreur ouverture fichier");
return 1;
}
[Diagramme]
Citation importante :
« Le langage C offre un contrôle précis du matériel grâce à la manipulation des pointeurs et à la gestion fine de la mémoire, mais cela nécessite une rigueur extrême pour éviter bugs et fuites mémoire. »
Cette fiche couvre les notions intermédiaires essentielles du langage C. Pour approfondir, il est conseillé de pratiquer avec des exercices impliquant manipulation de pointeurs, récursion et gestion dynamique de structures complexes.
