01Un peu d'histoireFiche12 sectionsIntroduction généraleLa programmation c'est quoi ?Langage de programmationEt le C dans tout ça ?Un peu d'histoireUn langage compiléZoom sur la compilationLe prétraitement (préprocesseur)RemarqueLa compilationL'assemblageL'édition de liens
02OutilsFiche13 sectionsL'éditeur de codeVisual studio codeWindowsLinuxMacOSCompiler son programme CInstaller GCCLinuxRemarqueMacOSWindowsCompiler et exécuter son programme CRemarque
03Commencer à programmer en CCours59 sectionsL'incontournable : Hello WorldStructure d'une fonctionFonctionExempleRemarqueLe point d'entrée en CExempleRemarqueTout est question d'ordreContexteSolution : les prototypes de fonctionRemarqueLes types en CLe type caractèreRemarqueExemplePreshot les chaînes de caractèresRemarqueExempleLe type entierRemarqueRemarqueExempleComparaison de tailleLes types flottantsRemarqueExempleL'opérateur sizeof(...)Utiliser sizeof pour un type de donnéesExempleRemarqueUtiliser sizeof sur une variableExempleRemarqueCaster une variable en CExemplePortée des variablesExempleVariable localeExempleVariable globaleExempleRemarqueExempleRetour sur la fonction printf( )…RemarqueExempleAllignement du texteExempleAllignement à droiteAllignement à gaucheRemarqueExempleLes constantesGénéralitésDéfinir une constanteEn utilisant le mot clé constRemarqueEn utilisant #define
04Opérateurs & ArithmétiqueCours35 sectionsDéfinition généraleOpérateurOpérateurs arithmétiquesL’additionLa soustractionLa multiplicationLa divisionRemarqueRemarqueLe moduloInformationD’où vient ce résultat ?AstuceOpérateurs d’affectationOpérateurs d’affectation composésRemarqueConseilsLes opérateurs unitairesL’incrémentation ++La décrémentation --Opérateur logique de négation !RemarqueOpérateurs de comparaisonOpérateurs logiquesTables de véritéET logique &&OU logique ||NON logique !RemarquePriorité et associativité des opérateursPriorité et associativitéAssociativité droite/gaucheL’opérateur ~Le complément à deux5 en complément à deux, sur 8 bits
05Conditions et bouclesCours20 sectionsStructures de contrôleif, else if et elseRemarqueSigne d’un nombreInformationswitchRemarqueEffet de cascade (fall-through)NoteLes bouclesforAfficher les entiers de 1 à 10Double boucle forExemplewhileNotedo whileSaisir un nombre positifLe ternaireMaximum de deux valeurs
06Retour sur les fonctionsCours26 sectionsGénéralitésFonctionLa fonction produitRemarqueDocumentation d’une fonctionExemple : algorithme d’Euclidetemp mémorise aInformationtemp mémorise b (version retenue)RemarqueDéclaration et définition d’une fonctionRemarquePrototype, déclaration, définitionPGCD : prototype, main, puis définitionOrganisation et utilisation des fichiers .h personnalisésProjet guidé : dessiner des formesInformationRemarqueSurchargeSurcharge (overloading)Trois lambda, en pseudo-codeRemarqueErreur de redéfinitionComment la contourner ?Utiliser des noms différents (méthode classique)Utiliser des macros (_Generic)
07Les tableaux statiquesCours53 sectionsTableau statiqueDéclaration d’un tableau en CUn tableau sans élémentsUn tableau prérempliUtiliser une macroRemarqueOpérations sur les élémentsAccès à un élémentRemarqueRécupérer le second élémentModification d’un élémentRemplissage du tableauAvant remplissageUn tableau non initialisé n’est pas « vide »Le remplissageRemplissage manuel10 éléments initialisés à 0Tableau d’initialisation plus petitRemplissage automatique — valeurs fixéesCas pratique : les n premiers multiples de kRemarqueRemplissage automatique — valeurs aléatoiresRemarqueAffichage d’un tableauInformationAffichage personnaliséTableaux multidimensionnelsTableau à plusieurs dimensionsDéclaration et initialisation — méthode 1InformationNoteMéthode 2 : tableau platInitialisation incomplèteAccès aux valeursRécupérer un élément d’une matrice 3×5Affichage des tableaux multidimensionnelsGestion d’erreursTableau d’initialisation trop grandInitialiser un élément inexistantRemarqueUtilisation des tableauxParamètre de fonctionAfficher un tableau passé en paramètreDéterminer la taille du tableauErreur importante : sizeof sur un paramètre de fonctionRemarqueInformationAfficher une matrice façon PythonBonusInitialiser une matrice nulleRemarqueQuelques fonctions de math.hRemarque
08Chaînes de caractèresCours60 sectionsDéclarationInitialisationInitialisation expliciteInitialisation impliciteManipulation des chaînes de caractèresAccès aux élémentsLa 6e lettre de « informatique »RappelAffichageRemarqueExempleInformationRemarqueLectureLa fonction scanfLire un âgeRemarqueVérifier la saisie via la valeur de retourUtilisation avancée : lire plusieurs donnéesLimites de scanfLecture limitée au premier motRemarqueDépassement de mémoire (buffer overflow)RemarqueInformationLa fonction gets (obsolète)RemarqueLa fonction fgetsRemarqueFonctions de manipulationCopierParcourir et recopier soi-mêmeRemarqueLa fonction strcpyConcaténerConcaténationFonction strcatRemarqueConcaténer sans dépassement, en calculant la tailleFonction strncatRemarqueComparerFonction strcmpLa fonction strncmpComparaison manuelleRechercherLa fonction strchrInformationTrouver la première occurrence de « o »Ne jamais déréférencer sans vérifierLa fonction strstrInformationAstuceDécouper : la fonction strtokToken (jeton)Remarquestrtok(s, " ") avec s = "le mon de"Découper toute une phrase en boucleRemarqueSensibilité à la casse
09Les pointeursCours35 sectionsGénéralités sur les pointeursPointeurLa notion d’adresseInformationRetour sur les pointeurs : à quoi ça sert ?Déclaration et initialisationInformationp pointe vers aModification et accès à la variable pointéePiège : une copie de valeur ne suit pas le pointeurLes pointeurs et les tableauxAnalogie entre euxAccès aux éléments via l’arithmétique des pointeursParcourir un mot par arithmétique des pointeursCalculer la taille du tableau — le piège du pointeurChaîne de caractèresTableau d’entiers — encore plus trompeurPointeurs et chaînes de caractèresChaîne littéraleLittéraleModifier un littéral : crashRemarqueBrouiller une chaîne avec des lettres aléatoiresPointeurs et fonctionsRemarquePassage par valeurExemplePassage par adressePassage par adresseRetourner une adresseRemarqueTentative naïve : ça ne compile pasManipulation de chaînes : exercice de concaténationConcaténer deux chaînes saisies, séparées par #Une correction possible
10Allocation dynamiqueCours38 sectionsLa mémoireLa mémoire vive (RAM)VolatileLa mémoire morte (ROM)Le firmwareLa mémoire cacheMémoire secondaire (stockage de masse)Allocations automatique et statiqueAllocation automatiqueRetourner l’adresse d’une variable locale : le piègeAllocation statiqueRemarqueRemarqueLa pile et le tasLa pile (stack)RemarqueInformationLe tas (heap)RemarqueVoir les tailles pile/tas de son systèmeAllocation dynamique en CLa fonction mallocAllouer un entierAllouer une chaîne de 7 caractères + \0La fonction callocAstuceLibérer la mémoireRemarqueUtiliser la mémoire après libérationLibérer deux fois la même zone (double free)InformationAllocation d’un tableauAstuceAllocation d’une matriceInformationMatrice 3×4 complèteRemarqueRéallouer la mémoire
11Structures avancéesCours26 sectionsIntroduction aux structuresStructure (struct)Déclaration d’une structureLa structure EtudiantInitialisation d’une structureInformationInitialisation partielleAccès aux valeurs des champsModification d’un champPiège : affecter directement une chaîne échoueRemarqueStructures imbriquéesAccéder à l’adresse imbriquée via un pointeurTableaux de structuresInformationParcourir et afficher un groupe d’étudiantsAstuceTypedef et aliasAlias de type simpleUn alias string pour char*Alias de structuresStructures et fonctionsPassage par valeurRemarquePassage par adresseRetourner une structure
12Les fichiersCours35 sectionsIntroductionFichierPourquoi utiliser des fichiersTypes d’accès aux fichiersLes fichiers et le système d’exploitationInformationCycle de vie d’un fichier en CLes fichiers texteOuvrir un fichierRemarqueÉcrire dans un fichierLa fonction fprintfInformationLa fonction fputsInformationLecture dans un fichierLa fonction fscanfLire nom, âge, taille ligne par ligneRemarquesLa fonction fgetsRemarqueLa fonction fgetcInformationLire test.txt caractère par caractèreFermeture du fichierLes fichiers binairesModes d’ouvertureLecture : la fonction freadLire 5 entiers dans un tableauRemarqueÉcriture : la fonction fwriteÉcrire 5 entiers depuis un tableauRemarqueVérifier la fin de fichier et les erreursVérifier le nombre d’éléments lus après fread