:: News .:. Documents .:. Forum .:. Downloads .:. Bibliographie .:. Liens .:. Contact  :: 


Home
  :. News
  .: Documents
    .: Notions
    .: Protocoles
    .: Sécurité
    .: Architecture
    .: Prog
    .: Systèmes
  :. Forum
  .: Downloads
  :. Bibliographie
  .: Liens
  :. Contact

Chat

  Nickname:


irc: #guill.net

Forum



 
Langage C  
 

 

Structure générale d'un programme

Le C est réputé pour être le langage le plus complet qui soit. La difficulté par rapport au pascal est qu'il existe plusieurs solutions pour arriver au même résultat.
Voici la structure générale d'un programme en C.

Plusieurs choses à remarquer :
- Les fonctions peuvent être prédéfinies dans un fichier .h. Ce fichier est déclaré en début de programme, soit entre <>, soit entre "". La plupart du temps, ces fichiers ne seront pas écrits par vous : ce sont des librairies de fonctions comme par exemple les fonctions mathématiques ("math.h") qui contiendront la définition des fonctions sinus, cosinus, ...
- Le fichier "stdio.h" est le fichier des fonctions standard d'entées/sorties (standard input-output), donc les fonctions comme lire (scanf) et écrire (printf) en algorithmique. Il est presque toujours présent dans tous les programmes, et de toute façon, ça ne peut faire aucun mal de le mettre.
- La partie début programme et fin programme est traduite par main ( ) { } ("main" signifie "principal"). C'est le coeur du programme. En fait, tous les début et fin de l'algorithmique sont remplacés par { et } en C.
- Toutes les instructions sont suivies d'un point-virgule.
- Il n'y a pas de partie déclaration de variables très marquée comme en algo ou en pascal. Elles sont généralement placées en début de programme principal (ou de fonction) pour plus de lisibilité.
- Il y a deux façons d'écrires les commentaires :
/* commentaire */
// tout ce qui suit sur cette ligne est en commentaire.

Les fonctions

Chaque fois qu'il y a { } dans une fonction, vous n'êtes pas obligé de le mettre si le contenu est une seule instruction. Cependant, mettez-le, et vous ne vous tromperez jamais...

Les variables et constantes

Types de variable les plus courants :
Entiers                                 int i, j;
Reels                                   float taux, racine_x;
Booléens                             bool possible, sortir;
Caractères                          char choix;
Réel double                         double exponentielle;
Chaîne (ici de longueur 20)     char nom [20];

Pour donner une valeur à une variable ( équivalent de "=" en algorithmique, appelé instruction d'affectation ), on utilise l'opérateur "=" qui se lit "prend pour valeur".
Exemple : a = 10; /* a prend pour valeur 10 */

Instructions Lire et Ecrire

L'intruction printf ( ) écrit à l'écran ce qu'il y a entre parenthèses.
L'instruction scanf ( ) prend ce qui est entré au clavier et le met dans la variable qui suit le caractère "&" et qui signifie "adresse de" (om met la valeur à l'adresse de la variable) .
Pour mettre un retour à la ligne, il faut rajouer \n à la fin des guillemets.
%d fait appel à un entier, mais il faut mettre le type de la variable que l'on veut lire ou écrire.
%d           int
 %x          int  (en hexadécimal)
 %c          char
 %f          double
 %e         double (ecriture scientifique)
 %s          char[]

Instruction Si - Alors - Sinon - Fin Si

Les { } ne sont pas obligatoire si il n'y a qu'une seule instruction.
La partie else n'est pas non plus obligatoire si on ne fait rien lorsque la condition est fausse.

Le type Booléen : les conditions

Les tableaux et les vecteurs

On aura un tableau de 10 sur 10 rempli d'entiers et qui s'appelera montableau.
Un tel tableau peut-être pratique pour programmer une bataille navale...

La définition de type

La boucle Pour

les mots { } ne sont pas nécessaire si il n'y a qu'une instruction.
compteur++ équivaut à l'instruction compteur = compteur + 1.
Si vous voulez compter dans l'ordre décroissant, vous pouvez faire compteur-- à la place de compteur++...

La boucle Tant Que

La boucle Répéter - Jusqu'à

Contrairement aux autres boucles, celle si ne nécessite pas { }, quelque soit le nombre d'instructions...

La structure Selon

Ici, l'instruction break fait sortir de la structure switch. Ainsi, si vous ne mettez pas break, il regarde les autres cas, et s'ils correspondent à la valeur de la variable, ils sont éxécutés.
Cette propriété peut quelquefois être pratique et explique qu'il n'y a pas de { } dans chaque cas.

Fonctions et Procédures

Pour la fonction x_carre, au début de la ligne, il y a "double", cela veut dire que la fonction renvoie un réel double. Il faut spécifié le type de variable que renvoie la fonction (ou le type de la fonction...).
Une procédure est simplement une fonction qui ne renvoie rien (void).

Le programme Agenda

#include <stdio.h>

void ajouterqqun( )
{
    totalpersonne++;
    printf ("Nom?");
    scanf ("%s", vecteurpersonne[totalpersonne].nom);
    printf ("Prénom?");
    scanf ("%s", vecteurpersonne[totalpersonne].prenom);
    printf ("Téléphone?");
    scanf ("%s", vecteurpersonne[totalpersonne].telephone);
    printf ("Adresse?");
    scanf ("%s", vecteurpersonne[totalpersonne].adresse);
}

void afficherliste( )
{
   int compteur;
   for ( compteur = 1, compteur <= totalpersonne, compteur++)
    {
        printf ("%s ", vecteurpersonne[compteur].nom);
        printf ("%s ", vecteurpersonne[compteur].prenom);
        printf ("%s ", vecteurpersonne[compteur].adresse);
        printf ("%s\n", vecteurpersonne[compteur].telephone);
    }

}

void afficherqqun ( )
{
    int compteur;
    char nomcherche[15];
    printf ("Nom?\n");
    scanf ("%s", nomcherche);
    for ( compteur =1, compteur <= totalpersonne, compteur++)
    {
        if ( vecteurpersonne[compteur].nom == nomcherche )
        {
            printf ("%s\n", vecteurpersonne[compteur].nom);
            printf ("%s\n", vecteurpersonne[compteur].prenom);
            printf ("%s\n", vecteurpersonne[compteur].adresse);
            printf ("%s\n", vecteurpersonne[compteur].telephone);
        }
    }
}

void supprimerqqun ( )
{
    int compteur;
    char nomcherche[15];
    bool apresceluiquonasupprime;
    apresceluiquonasupprime = false;
    printf  ("Nom à supprimer?");
    scanf ("%s", nomcherche);
    for ( compteur = 1, compteur <= totalpersonne, compteur++)
    {
        if ( vecteurpersonne[compteur].nom == nomcherche )
            apresceluiquonasupprime = true;
        if ( apresceluiquonasupprime )
        {
            vecteurpersonne[compteur-1].nom = vecteurpersonne[compteur].nom;
            vecteurpersonne[compteur-1].prenom = vecteurpersonne[compteur].prenom;
            vecteurpersonne[compteur-1].adresse = vecteurpersonne[compteur].adresse;
            vecteurpersonne[compteur-1].telephone = vecteurpersonne[compteur].telephone;
        }
    }
    totalpersonne--;
}

main ( )
    typedef enum BOOL (false, true) bool; //définition du type booléen
    type struct PERSONNE
    {
    char nom[15];
    char prenom[15];
    char telephone[15];
    char adresse[40];
    } personne;
    char choix;
    bool sortir = false;
    personne vecteurpersonne[100];
    int totalpersonne = 0;
    do
    {
        printf ("Agenda\n\n");
        printf  ("1 – Ajouter quelqu'un\n");
        printf  ("2 – Supprimer quelqu''un\n");
        printf  ("3 – Trouver quelqu'un\n");
        printf  ("4 – Liste des personnes\n");
        printf  ("X - Sortir\n");
        readln ("%c", choix);
        switch ( choix )
        {
           case '1' : ajouterqqun;
                          break;
            case '2' : supprimerqqun;
                         break;
           case '3' : afficherqqun;
                         break;
           case '4' : afficherliste;
                         break;
           case 'X' : sortir = true;
                         break;
        }
    }
    while ( sortir );
}

 




Sondage

Quel est votre connexion à Internet aujourd'hui ?
 
RTC 56Kbps
ADSL simple de 128 à 2048 Kbps
ADSL + Téléphonie (+TV) de 128 à 2048 Kbps
ADSL simple jusqu'à 20Mbps
ADSL + Téléphonie (+TV) jusqu'à 20Mbps
Autres (RNIS, Satellites bi-directionnel...)
Total :
3241

Recherche


Docs
   Pflogsumm (Analyseur de log mail pour Postfix)
   Proftpd (Mise en service d'un serveur FTP avec proftpd sous Linux)
   Openldap (Mise en service d'un serveur LDAP sous Linux)
   Gestion des périphériques en c++ builder (Communication RS232 en C++ Builder)
   Les sockets windows (Windows Sockets : un cours accéléré)

guill.net©1999-2024