Vous êtes sur la page 1sur 4

TP1

Exercice 1 :

Commandes Unix :

Créer le répertoire TP1 :


    mkdir TP1
Se placer dans le répertoire TP1 :
    cd TP1
Lancer emacs en ouvrant le fichier ex1.c :
    emacs ex1.c &
-> ex1.c est créé directement s’il n’existait pas
-> & permet de pouvoir continuer à écrire des commandes Unix tout en gardant emacs ouvert

Compiler le programme C:
    gcc -Wall ex1.c
-> -Wall est une option qui permet d’afficher certaines erreurs supplémentaires (Warning)
A utiliser à chaque compilation!

Visualiser le résultat = Afficher la liste des fichiers présents dans le répertoire:


ls
-> résultat = un fichier a.out est créé (en vert)

Exécuter le a.out :
    ./a.out

Afficher les droits des fichiers :


    ls -l
-> résultat = a.out a le droit de lecture, écriture et exécution car c’est un fichier exécutable

Compiler le programme C en donnant un nom au fichier exécutable :


    gcc ex1.c -o ex1 -Wall
-> -o est une option qui indique que l’on donne le nom de l’exécutable, le nom donné doit
suivre directement le -o
Remarque : L’ordre des options n’a pas d’importance, on peut avoir : gcc -Wall -o ex1 ex1.c

Exécuter l’éxécutable :
    ./ex1

Remarques :
-Veillez à bien respecter les espaces lorsqu'il y en a dans les commandes Unix et les
programmes C. En revanche, on peut en rajouter un ou plusieurs pour aérer le code, mais ce
n'est pas obligatoire.
    ex: if(a!=0) est équivalent à if          (          a          !=          0          )
-Dans emacs, cocher la première option (Syntax Highlighting) pour avoir le code en couleur.
-Dans la console, utiliser la flèche vers le haut pour avoir les dernières commandes
effectuées.
-Messages d’erreurs :
· Warning -> pas grave mais à corriger si on ne veut pas avoir de surprises…
· Fatal error -> il faut recompiler car l’exécutable n’est pas créé
ex : parse error = erreur de syntaxe ; , }

Quelques commandes supplémentaires :


Se placer dans un répertoire en indiquant son chemin d’accès :
    cd ProgC/TP1
Revenir un répertoire en arrière :
    cd ..
Revenir à la racine :
    cd
Supprimer un fichier :
    rm ex1.c
Supprimer un répertoire :
    rmdir TP1
Déplacer un fichier dans un répertoire en indiquant son chemin d’accès :
    mv ex1.c ProgC/TP1
Changer les droits d’un fichier :
    chmod 755 ex1.c
    chmod +x ex1.c
-> ajoute le droit d’exécution au fichier
Rappel : -rwxr-xr-x = 755

Afficher des manuels pour la programmation en C :


    man printf
    ...

Debugger un programme avec gdb :


gdb -help      -> usage (= comment ça s'utilise)
gcc -g -Wall -o ex1 ex1.c    -> compilation
gdb ./ex1      -> exécution
Ensuite pour lancer le programme : run
Pour plus de détails : help (suivi d'une commande dans la liste indiquée)
Pour quitter gdb : quit

Programme C :
ex1.c
/* réalisé par Nom    le Date TP1 ex1 /      -> commentaire entre /*…*/
#include <stdio.h>      -> inclusion de la bibliothèque permettant d’utiliser printf, scanf…
int main(void) {      -> fonction principale obligatoire entre accolades
printf(“Bonjour\n ”);      -> affichage de ce qui est entre guillemets (\n = retour à la ligne)
return 0;      -> retour de la fonction principale de type int
}

Remarque : Chaque instruction se finit par un point-virgule

Exercice 2 :
ex2.1.c
/* TP1 ex2 version 1 * /
#include <stdio.h>
int main(void) {
int a,b; -> déclaration de deux variables entières
a=2;      -> affectation d’une variable
b=3;
printf(“Somme=%d\n Différence=%d\n Produit=%d\n Quotient=%d\n”,a+b,a-b,a*b,a/b);
      -> %d pour afficher une variable de type int que l’on indique après la virgule
return 0;
}

ex2.2.c
/* TP1 ex2 version 2 */
#include <stdio.h>
int main(void) {
float a; -> déclaration d’une variable réelle
int b;
a=2.5;      -> un nombre à virgule s’écrit avec un point
b=3;
printf(“Somme=%f\n Différence=%f\n Produit=%f\n Quotient=%f\n”,a+b,a-b,a*b,a/b);
      -> %f pour une variable de type float (la somme d’un entier et d’un réel donne un réel)
return 0;
}

Remarque : Dans le prinft, si on met %.2f -> affiche seulement deux chiffres après la virgule.

ex2.3.c
/* TP1 ex2 version 3 et 4 * /
#include <stdio.h>
int main(void) {
float a;
int b;
scanf(“%f%d”,&a,&b); -> lecture de variables au clavier
printf(“Somme=%f\n Différence=%f\n Produit=%f\n”,a+b,a-b,a*b);
      -> affichage dans tous les cas
if(a!=0) printf(“Quotient=%f\n”,a/b);      -> teste si a est différent de 0
(a==0 pour tester l’égalité)
else printf(“Division par zéro impossible\n”);      -> si le test du if n’est pas vérifié
return 0;
}

Instructions conditionnelles :
if(condition) {
instruction;
}
-> si l’instruction est réduite à une seule ligne, les accolades ne sont pas obligatoires

Exercice 3 : (faire de même pour b)


int a;
scanf(“%d”,&a);
if(a%2==0 && a%3==0) printf(“%d est divisible par 2 et par 3\n”,a);
      -> a%2 se lit “a modulo 2” et calcule le reste de la division euclidienne
      -> && = et || = ou
else if(a%2==0)    printf(“%d est divisible par 2\n”,a);
else if(a%3==0)    printf(“%d est divisible par 2\n”,a);      -> mettre else devant le if lorsque
      l’on est sûr que 2 conditions de peuvent pas être vérifiées en même temps
else printf(“%d n’est divisible ni par 2ni par 3\n”,a);      -> pour tous les autres cas

Remarque : Dans le printf, si on met %3d -> affiche le nombre sur au moins 3 caractères en
ajoutant des espaces devant (permet d’aligner les nombres à droite).

Vous aimerez peut-être aussi