#include <stdio.h>
    /* Ceci est un commetnaire en C */
    /* La première ligne charge la librairie stdio.h (pour les entrées sorties: IO) */

    /* Le prototype d'une fonction en C est une ligne de la forme:
    typeSortie nomFonction (typeDeArg1 arg1, typeDeArg2 arg2) */
    /* Après le prototype on met en accolade une série de commandes séparées
       par des ";" et on termine par un appel à la fonction "return". */
    /* prec calcule le prédécesseur d'un entier */
    int prec (int x) {
    int res;/* je déclare une variable res de type int */
    int autreRes = x;/* je déclare une variable autreRes de type int
       et je lui donne "x" pour valeur initiale */
    res = x - 1;        /* j'assigne une valeur à res */
    autreRes--;/* cette commande décrémente autreRes */
    return(autreRes);/* je renvoie autreRes = résutat de la fonction */
    }


    void maFonction (int x, float y); /* Ceci est un prototype seul, il permet
         d'expliquer au compilateur que plus tard dans
         le fichier, je vais définir une fonction "maFonction"
         de ce type (ça me perme de l'utiliser dans main). */
    void tabTest ();


    /* La fonction qui porte le nom "main " sera la seule qui sera exécutée quand
       je lançerai le binaire */
    /* Elle est de type "void" (=type unit de OCaml): ne renvoie pas de valeur
       mais peut avoir des effets de bords */
    void main () {
    printf("Le prédécesseur de %d est %d\n",4,prec(4)); /* je donne les valeurs que je veux
     insérer dans le texte à la suite*/
    maFonction(10, 12.45);/* j'appelle une fonction définie plus tard */
    tabTest();
    }

    /* La syntaxe du if, for, while, case */
    void maFonction (int x, float y) {
    int a = 10;

    /* Syntaxe du if */
    if (a == 10) {/* if (CONDITION) { COMMANDES }*/
    printf("a==10\n");
    } else {
    printf("a!=10\n");
    }

    int i;
    /* Syntaxe du for */
    for (i=0; i<10; i++)  {/* for (X,Y,Z) { COMMANDES } où:
       X: l'initialisation
       Y: test d'arrêt 
       Z: que faire à la fin de chaque itération */
    printf("i vaut %d.\n", i);
    }

    int j = 0;
    /* Syntaxe du while */
    while (j <10) {/* while (CONDITION) { COMMANDES}  */
    printf("j vaut %d.\n", j);
    j++;
    }


    /* Syntaxe du switch */
    switch ( a ) {/* je vais distinguer des cas
       suivant la valeur de a*/
    case 10:/* si c'est a=10 alors: */
    printf("a==10\n");/* j'exécute cette ligne */
    break;/* important: permet de signifier la fin du cas */
    case 20:/* cas a=20 etc. */
    printf("a==20\n");
    break;
    default:/* tous les autres cas */
    printf("autre cas\n");
    break;
    }
    }


    /* Tableaux statiques */
    void tabTest () {
    int size = 10;
    int tab[10];/* je définie un tableau statique de taille sze=100 */
    int i;
    tab[0] = 1;        /* j'assigne la première case du tableau*/
    for (i=1; i < size; i++) {
    tab[i] = tab[i-1] * i;
    }
    printf("La 100ème case contient: %d.\n", tab[size-1]);
    }