programmation en c: introduction

34
Langage C 2013-2014 2013-2014 Ceci est le compte-rendu / cours fait par Groupe n°2 du GE1S4 (ENIS). Ce cours de C utilise le support de cours de Mr Hafedh Trabelsi, professeur à l’ENIS ainsi que ses remarques données (et collectés) en classes. En addition de quelques petites informations/petit projets extraits depuis les outils de « Ahmed Yahia Kallel » et sources codes des projets/jeux codés en C. Cours :: Compte- Rendu Par Groupe 2 : Ahmed Yahia KALLEL , Ahmed Derbel , Ahmed Kammoun, Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane Professeur : Mr Hafedh Trabelsi

Upload: thekdl

Post on 27-Nov-2015

55 views

Category:

Documents


0 download

DESCRIPTION

Ceci est un cours-compte-rendu concernant la programmation en langage C.Les notions abordés sont de bases avec un peu de notions avancés où on a expliqué ce qu'il faut savoir lors de la programmation.Basé sur le cours de Mr Trabelsi Hafedh

TRANSCRIPT

Langage C

2013-2014

2013-2014Ceci est le compte-rendu / cours fait par Groupe n°2 du GE1S4 (ENIS). Ce cours de C utilise le support de cours de Mr Hafedh Trabelsi, professeur à l’ENIS ainsi que ses remarques données (et collectés) en classes. En addition de quelques petites informations/petit projets extraits depuis les outils de « Ahmed Yahia Kallel » et sources codes des projets/jeux codés en C.

Cours :: Compte-Rendu

Par Groupe 2 :

Ahmed Yahia KALLEL , Ahmed Derbel , Ahmed Kammoun, Aymen Baccari, Ghazi Zouari, Mohamed Allouch,

Wassef Chaaben, Zied Omrane

Professeur :

Mr Hafedh Trabelsi

GE1 S4 Journal de C

1 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 1 : Introduction…!

Pourquoi programmer en C ?

Elle est proche du langage machine

Elle est rapide et plus performant (excluant le cas du CLR)

Elle est très populaire et utilisé partout

C, depuis quand ?

Langage C est plus ou moins ancienne (développé par Dennis Ritchie et co. en 1972). Mais, ceci ne reflète pas la

fréquence d’utilisation du C (et C++) aujourd’hui, en effet : ordre de popularité :

- C et C++

- C# et Visual Basic

- Java

C ou C++ ?

Le C et C++ sont 2 langages différents. En effet, C++ c’est C avec les classes.

Ceci ne veut pas dire que C++ est la nouvelle version de C ! En effet il est possible d’avoir un code qui ne marche que

sur C et un code qui ne marche que sur C++.

C’est comme l’Arabe et L’arabe de dialecte Tunisienne : On ajoute des mots dans les 2 dictionnaires, essayez de dire

dans un contexte Tunisien, la réponse (avancer) « زلفت » dans un essai en arabe ! De même, essayez de dire « وقتاش »

va être « Qu’est-ce que vous avez avalez » et pas comme en Arabe native « Qu’est-ce que s’est avancé ».

C, B , A ,D ! ?

Oui, Avant C, il y avait ADA c’est « A », puis BCPL c’est « B », alors si on voulait ajouter un autre langage ça serait

« C ». Il y a aussi des autres langages tel que D, F# etc…

Au cours de notre « cours- compte-rendu » on a utilisé Word, Notepad++, Code ::Blocks et Visual C++ 2008 Express.

GE1 S4 Journal de C

2 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Passons alors vers une chose plus sérieuse !

Le processus de création d’un exécutable

Le compilateur essaie de lire tout le programme d’un seul coup :

1. Il cherche s’il y a des erreurs de syntaxes

2. Vérifie les variables

3. Crée un fichier d’extension .o ou .obj qui contient tout ce qui est nécessaire pour compiler le programme

4. Il édit les liens (vers les bibliothèques)

5. Il exécute le programme

Par exemple : l’output du compilateur de Visual STUDIO 9 (2008) sur son IDE principal

>------ Build started: Project: test0, Configuration: Debug Win32 ------

>Compiling...

>test.cpp

>Linking...

>Embedding manifest...

>Build log was saved at "file://c:\Users\Kallel\Documents\Visual Studio 2008\Projects\test0\test0\Debug\BuildLog.htm"

>test0 - 0 error(s), 0 warning(s)

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

GNU GCC sur Code::Blocks (environment : Windows)

-------------- Build: Debug in Lessons_C (compiler: GNU GCC Compiler)---------------

mingw32-gcc.exe -Wall -g -c "C:\Users\Kallel\Documents\New folder (3)\Lessons_C\file.c" -o obj\Debug\file.o

C:\Users\Kallel\Documents\New folder (3)\Lessons_C\file.c: In function 'l4':

C:\Users\Kallel\Documents\New folder (3)\Lessons_C\file.c:28:1: warning: control reaches end of non-void function [-

Wreturn-type]

mingw32-g++.exe -o bin\Debug\Lessons_C.exe obj\Debug\file.o

Output size is 29.85 KB

Process terminated with status 0 (0 minutes, 3 seconds)

0 errors, 1 warnings (0 minutes, 3 seconds)

Enfin, il faut brièvement mentionner qu’il existe trop d’IDE de C, nous en citons : - Code :: Blocks (Windows, Linux et MacOS) - Visual Studio (Windows) - CodeLite (Windows, Linux) - Dev-C++ (Windows…) - Eclipse et NetBeans (avec Plugin C++) [Windows, Linux et MacOS]

Baah, and pour les professionnels, vous avez toujours votre ‘Emacs’ ou Notepad++

Compilation Edition de liens Exécution

GE1 S4 Journal de C

3 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 2 : Langage++, Réel et entiers !

Se familiariser avec C

Comment coder : Commentaires, Puts, printf, scanf

S’introduire aux nombres

Journée 2

1. Hello world

2. Header

3. Body :

a) printf

b) les entiers

c) les décimaux

d) différentes bases

[par cast]

4. Exercice d’application

5. Formatage

GE1 S4 Journal de C

4 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Hello World !

#include <stdio.h>

#include <conio.h>

//notre fonction : Hello World !

void main() {

puts("Bonjour!");

int a,b, somme;

a = 2;

b = 1;

somme = a+b;

printf("Votre Somme est:%d",somme);

}

Donc, voici notre premier code en C ! Maintenant, pour comprendre tout le programme, il faut comprendre comment on code en C ! Chaque code codé en C comporte un « header » et un « body ».

Header

#include <stdio.h>

#include <conio.h>

#include permet d’importer des bibliothèques les fonctions nécessaires pour faire marcher le code : Sans « stdio.h » par exemple, on ne peut pas utiliser « printf ». Par exemple, dans le code source du ‘object.cpp’ tiré du jeu vidéo « Re-Volt » , le header est ceci (modifié un peu) :

//-----------------------------------------------------------------------------

// File: object.cpp

//

// Desc: Object processing code

//

// Re-Volt (Generic) Copyright (c) Probe Entertainment 1998

//-----------------------------------------------------------------------------

#include "revolt.h"

#include "object.h"

#include "main.h"

#include "model.h"

#include "aerial.h"

#include "timing.h"

#include "field.h"

#ifdef _PC

#include "Path.h"

#include "Light.h"

#endif

#include "obj_init.h"

#include "SoundEffectEngine.h"

#include "weapon.h" //$REVISIT: Hack to fix improper freeing of electro pulse

GE1 S4 Journal de C

5 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Body

C’est la partie « programme ! » //notre fonction : Hello World !

void main() {

puts("Bonjour!");

int a,b, somme;

a = 2; /* a reçoit 2*/

b = 1;

somme = a+b;

printf("Votre Somme est:%d",somme);

}

Il est noté que pour faire un commentaire (remarques, ne sera pas exécuté) on peut :

- Ajouter « // » avant la phrase - Ajouter « /* » avant la phrase/paragraphe et finir par « */ » (dite commentaire multi-ligne)

Donc, notre programme est

void main() {

puts("Bonjour!");

int a,b, somme;

a = 2;

b = 1;

somme = a+b;

printf("Votre Somme est:%d",somme);

}

Dans les langages C (C, C++, Java, QT, Javascript, C# etc…) le mot fonction n’existe vraiment pas. Devant chaque nom de fonction, on écrit le type d’output de la fonction. Exemple, on voulait coder une fonction f(x) = 2*x + 1

float f(x) {

return x*2+1;

}

(voir les types des variables)

Ainsi, notre fonction « main » ne va pas vraiment de retourner une variable, donc pour cela on écrit « void » main où void = vide/rien (en fr.)

Et comme C est un langage C-ien , les variables et instructions doivent finir par « ; » Et doivent être case-sensitive ! On n’écrit pas « float A ; » puis printf(« %d »,a) ;

Pour afficher un message et revenir en ligne on écrit :

puts("Bonjour!");

Ceci est pratiquement équivalent avec printf("Bonjour!\n");

GE1 S4 Journal de C

6 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

ATTENTION :

Pour pouvoir utiliser puts il faut importer conio.h

et pour utiliser printf il faut importer stdio.h

Pour les variables, en C, il existe plusieurs types de variables tels que :

Type Keyword Exemple

Entier* int int a ; a = 2.5 ; a = 2

Réel* float float a ; a=5.0/2 ; a = 2.5

Caractère* char char c; c=’a’; c= ‘a’

Void (le rien) void void main()

Le caractère est une représentation d’un entier en tant qu’un dessin ASCII, ainsi, on utilisera le char comme un entier.

Entiers

Type Range Exemple Taille mémoire Formatage

char -27 27 - 1 char a ; a=65 ; a=’A’

1 octet %c

unsigned char 0 28 unsigned char b ; 1 octet

short -215 215 - 1 short a ; 2 octets

Unsigned short 0 216 unsigned short a ; 2 octets

int -231 231 - 1 int a ; 4 octets %d

unsigned int 0 232 unsigned int c ; 4 octets %u long -2

63 2

63 - 1 long a ; 8 octets %ld

unsigned long 0 264

unsigned long alpha ; 8 octets

Note : Long n’est pas toujours défini (les anciens compilateurs ne le comprennent pas), mais fait partie du C90 !

Réel

Type Exemple Taille mémoire Formatage

float float a ; 4 octets %f et %g

double double b ; 8 octets %f et %g

2ème programme ! (combinaison exercices 1 et 2)

On veut programmer un programme qui 1. lit un entier non signé 2. Affiche son code ASCII 3. Affiche son code hexadécimal 4. Affiche son code octal

GE1 S4 Journal de C

7 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

#include <conio.h>

#include <stdio.h>

void main() {

unsigned int a;

printf("Donner un entier non signé :");

scanf("%u",&a);

printf("code ascii: %c\n",a);

printf("code hex: %x\n",a);

printf("code oct: %o\n",a);

getch();

}

On a déclaré notre variable « unsigned int a; » (Mon entier n’est pas signé , Hélas……)

On a écrit à l’utilisateur de donner un entier printf("Donner un entier non signé :");

Puis on a commandé l’ordinateur de lire la valeur du clavier à travers « scanf » scanf("%u",&a);

Enfin, on a fini par lecture d’un caractère getch();

Puis, on a converti le code entré en utilisant les formats

Clôturons !

printf Permet de formatter et afficher un texte

scanf Permet de lire en format un entré (du clavier) getch Lit un seul caractère

Formatage

On dit qu’un texte est formaté s’il est écrit sous une forme prédéfinie !

Pour formater un texte en C, il suffit juste d’écrire :

printf("%d+%d=%d!!!",a,b,a+b);

Pour comprendre comment ça marche, soient a = 3, b = 12

printf("%d+%d=%d!!!",a,b,a+b);

donne

Execution

3+12=15!!!

Les listes des formats sont affichés ci-dessus. On peut aussi ajouter :

%x : afficher en base hexadécimal

%o : Afficher en base octale

GE1 S4 Journal de C

8 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 3 : C

Maîtriser Printf / différents méthodes de E/S

Voir les différentes Opérateurs (normales et combinés)

S’introduire aux constantes

Voir comment on peut faire des « casts »

S’introduire à « if » et « while » ainsi que les expressions logiques

Journée 3

1. Caractère spéciaux

2. Opérateurs

3. Fonctions

d’affichage/entrer

4. getchar(), getch() ?

5. Petit projet sur

« Décalage »

6. sizeof()

7. Opérateurs combinés

8. Constantes

9. Cast

10. Boucles et conditions

(1)

a) If

b) expression logiques

c) petit projet

d) while

GE1 S4 Journal de C

9 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

printf : caractères spéciaux

Caractère Nom ASCII Eq. Visual Basic

\n Nouvelle ligne LF (asc = 10) VbLF \t Tabulation horizontal HT (asc = 09) VbTab \v Tabulation vertical VT (asc = 11) \r Retour chariot CR (asc = 13) VbCR \\ Back slash \ ’’ Guillemets (asc = 34) \a Alert (console beep) (asc = 7)

\r\n est la retour à la ligne utilisé sur Windows (eq. CRLF)

Exercice 1 : Créer un programme qui permet d’entrer un chiffre flottant (réel)

#include <stdio.h> #include <conio.h>

void main()

{

float f;

printf("Donner un Reel:");

scanf("%f",&f);

printf("Vous avez entré %f!",f);

getch();

}

Donner un Réel: 12.3

Vous avez entré 12.300000!

Exercice 2(SUPPORT=4): Tester le programme suivant et conclure

#include <stdio.h>

#include <conio.h>

void main()

{

char c;

c = 'A';

printf("decimal = %d \t ASCII = %c\n",c,c); //c est le caractère alphanumérique A

puts("Pour continuer frapper une touche...");

getch(); //attente d'une saisie de clavier

}

Réponse : Type char est un entier !

decimal = 65 ASCII = A

Pour continuer frapper une touche...

GE1 S4 Journal de C

10 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Opérateurs

Réels : + - * /

Entiers : + - * / %

Booléens : & | ~ << >>

Exercice 3(SUPPORT =8): a, b sont des réels : a=-21.43 b=4.782.

Calculer et afficher a+b, a-b, a*b, a/b en soignant l’interface homme/machine

#include <stdio.h>

#include <conio.h>

void main()

{

float a,b;

a=-21.43;b=4.782;

printf("%.3f+%.3f=%.3f\n",a,b,a+b);

printf("%.3f-%.3f=%.3f\n",a,b,a-b);

printf("%.3f*%.3f=%.3f\n",a,b,a*b);

printf("%.3f/%.3f=%.3f\n",a,b,a/b);

getch();

}

-21.430+4.782=-16.648

-21.430-4.782=-26.212

-21.430*4.782=-102.478

-21.430/4.782=-4.481

%.3f = Affiche 3 chiffres après la virgule. (%.2f = 2 chiffres après la virgule)

Exercice 4: a, b sont des entiers : a=-21 b=4.

Calculer et afficher a+b, a-b, a*b, a/b et a%b en soignant l’interface homme/machine

#include <stdio.h>

#include <conio.h>

void main()

{

int a,b;

a=-21;b=4;

printf("%d+%d=%d\n",a,b,a+b);

printf("%d-%d=%d\n",a,b,a-b);

printf("%d*%d=%d\n",a,b,a*b);

printf("%d/%d=%d\n",a,b,a/b);

getch();

}

Reste de

la division

Quotient de

la division

Division

normale

ET OU Complément

à 1 Décalage à

gauche

Décalage à

droite

GE1 S4 Journal de C

11 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Exécution

-21+4=-17

-21-4=-25

-21*4=-84

-21/4=-5

Autres fonctions de sorties

Commande Equivalent

puts(str) printf(str) ;printf(‘’\n’’) ;

putchar(car) printf(“%c”,car);printf(“\n”);

c=getch()

c=getchar() scanf(“%c”,&c);

Getchar et GetCh

getchar() et getch(), tous les deux appartiennent à « stdio.h ».

- getch() retourne le code du caractère juste après taper une touche .

- getchar() attend jusqu’à ce que « entrée » est appuyé puis retourne le premier caractère. equiv.

scanf(“%c”,&c);

c =getch() ;

« attendre jusqu’à ce qu’une touche est tapée » « Retourne le code ASCII du caractère » (fin fonction)

c=getchar() ;

« Une fois code tapé, affiche le dans le console » « Retourne le premier caractère » (fin fonction)

Décalage ? C’est quoi ça ???

PETIT PROJET A: Chaque couleur (sur l’écran) peut être représenté sous la forme de « couleur 24-bits » (RGB) ou « couleur 32-bits » (ARGB ou RGBA)

Chaque couleur est le mélange de 3 couleurs principaux codés chacun sur un octet (Rouge, Vert (Green) et Bleu) d’où le nom RGB.

Par exemple

Rouge : R=255 , G=0, B=0

Noir : R=0, G = 0, B = 0

Blanc : R=255, G=255, B=255

Ainsi on peut coder alpha qui définit l’opacité du couleur, (dit bit d’opacité ou bit de transparence) de la manière suivante : Alpha = 255 opaque , Alpha = 0

transparent, alpha = 128 semi transparent

Pour minimiser le taux de transfert, on code le couleur sous la forme d’un « code couleur » compréhensible par la carte graphique.

De nos jours, la plupart des cartes graphiques supporte « code couleur 32-bits » (auparavant était juste 16-bits puis 24-bits)

GE1 S4 Journal de C

12 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Un code ARGB est codé de la manière suivante :

Alpha Rouge Vert Bleu

Bits : 32 24 16 8 0

Par exemple : pour ARGB = (255,0,128,0) : le code couleur est : 4278222848

Notre groupe se propose d’écrire un code C qui permet de coder un code couleur !

Et pour simplifier le programme :

on va utiliser « int » au lieu d’ « unsigned char » (byte)

On va assumer qu’existe un type dit « uint » (unsigned integer) défini comme ci-suit (avant void main) : typedef unsigned int uint;

On ne va pas utiliser la somme, mais les remplacer par « ou » (pour éviter directcast à chaque décalage)

#include <stdio.h>

typedef unsigned int uint;

void main()

{

int a,r,g,b;

uint c;

printf("Donner Alpha:");

scanf("%d",&a);

printf("Donner R:");

scanf("%d",&r);

printf("Donner G:");

scanf("%d",&g);

printf("Donner B:");

scanf("%d",&b);

c = (a<<24) | (b<<16) | (g <<8) | b;

printf("Votre Code Couleur est: %u",c);

getch();

}

GDI et DirectX utilise ce code couleur. OpenGL utilise glcolor3f() ou glcolor4f() qui permet d’entrer un couleur défini avec des

nombres allant de 0 vers 1.

sizeof()

Le sizeof() peut ou ne peut pas être important pour le moment. Mais pour ceux qui veulent importer

les données d’un fichier binaire, ce code sauve la vie !

sizeof() permet de retourner le nombre d’octets qu’un objet utilise.

Par exemple :

char c;

printf(« %d », sizeof(c));

Donne “1” qui est vrai car c est défini entre -128 et 127 (0 vers 255 pour certains compilateurs) soit un octet.

GE1 S4 Journal de C

13 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

++ , -- et Opérateurs combinés

En langages de type C tel que C, on peut simplifier le code du programme énormément :

Ces instructions sont équivalentes :

Instruction 1 Instruction 2 Instruction 3

i = i + 1 i+=1 i++ i = i - 1 i -=1 i-- a = a+b a+=b a = a-b a-=b a = a * b a *= b a = a / b a /= b a = a & b a &= b a = a | b a |= b

Constantes

Pour déclarer les constantes, on a deux types :

#define PI 3.1415926536

Ceci permet de compiler PI en tant qu’un Keyword

Ou bien

const float PI = 3.1415926536;

Ceci permet de mettre PI une constante (invariante)

Peut n’importe, les détails ne sont pas importants, il faut retenir que ces deux méthodes sont équivalentes (presque….)

Cast (dite aussi DirectCast)

En C, il est possible de passer d’un type vers un autre :

Par exemple, pour passer de réel (float) entier (int)

float a ;

a = 2.5;

int b;

b = (int)a;

GE1 S4 Journal de C

14 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Boucles et Conditions

If

if (expression Logique) {

//SI EXPRESSION EST VRAIE, CE BLOC SERA EXECUTE

} else {

//SI EXPRESSION EST FAUSSE, CE BLOC SERA EXECUTE

}

Expression Logique (binaire) :

C’est une expression qui lorsque est évaluée, elle donne « 1 » si l’expression est vraie et « 0 » sinon.

Langage C étant basé sur C90, le type booléen n’existe pas par défaut dans le compilateur (on peut importer

stdbool.h ou bien windef.h).

Mais, on peut toujours définir « TRUE » et « FALSE » comme constantes de compilateurs :

#define TRUE 1

#define FALSE 0

Les expressions logiques possible :

Fonctionnement Expression Résultat

Test d’égalité a==b 1 si a = b 0 sinon

Test de non égalité

a != b 1 si a ≠ b 0 sinon

Comparaison a<b a>b a<=b a>=b

1 si l’expression est vrai 0 sinon

ET a&&b 1 si A ET B = vrai 0 sinon

OU a||b 1 si A OU B = vrai 0 sinon

NON !a 1 si a = faux 0 si a = vrai

PETIT PROJET B: Surtout dans les jeux et les programmes avancés, on utilise les flags : Un nombre composé (qui peut être lit en tant qu’un entier) qui donne l’état

d’un objet (ou du programme).

Par exemple, dans Re-Volt (modifié pour simplifier), on définit le polygone (qui peut être composé soit par 3 points [triangle] soit par 4 points dit [QUAD]) par des données

tel que texture (image), positions, normal ET aussi par un flag :

#define POLY_QUAD 1 //4 points, et pas 3 points

#define POLY_SEMITRANS 4 //semi transparent

#define POLY_MIRROR 128 //réflective

#define POLY_TEXANIM 512 //contient animation de texture

GE1 S4 Journal de C

15 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Ainsi par exemple, un polygone de 4 points et animé est de flag 512 + 1 = 513.

Un QUAD qui est semi transparent et réflectif :1+ 4+128=133.

On se propose de composer un code qui teste (avec l’opérateur LOGIQUE ET et non testeur logique ET) le flag d’un polygone et donne ses propriétés.

A noter :

513 & 1 = 1

513 & 128 = 0

#include <stdio.h>

#include <conio.h>

#define POLY_QUAD 1 //4 points, et pas 3 points

#define POLY_SEMITRANS 4 //semi transparent

#define POLY_MIRROR 128 //reflective

#define POLY_TEXANIM 512 //contient animation de texture

void main()

{

int p;

printf("Donner le flag d'un polygone:");

scanf("%d",&p);

if (p & POLY_QUAD) puts("\tQUAD");

if (p & POLY_SEMITRANS) puts("\tSemi-transparent");

if (p & POLY_MIRROR) puts("\tRéflectif");

if (p & POLY_TEXANIM) puts("\tAnimé");

getch();

}

Note : En C, on peut omettre {} si on ne veut exécuter qu’une seule instruction et on doit l’ajouter sinon !

Exemple :

if (p & POLY_QUAD)

puts("\tQUAD");

else{

printf("NON!");

printf("N'est pas QUAADD!!\n");

}

Majuscule, minuscule

Exercice 5: Ecrire un programme qui permet de transformer une lettre majuscule vers une lettre minuscule ;

#include <stdio.h>

#include <conio.h>

void main() {

char c;

printf("Donner une lettre en majuscule:");

scanf("%c",&c);

if (c>='A' && c <= 'Z') {

printf("En minuscule ça devient:%c!",c-'A'+'a');

} else {

puts("Erreur!");

}

GE1 S4 Journal de C

16 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

getch();

}

While

while (expression)

{

//Jusqu'à ce que l'expression devient fausse, ceci va être exécuté

}

GE1 S4 Journal de C

17 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 4 : Boucles et Conditions (2)

Mettre If et « While » en poche

S’introduire à Pour

Convertir Pour en while

Cas particulier : Boucle infini

Journée 4

1. Exercice d’application

sur if et while

2. Pour

3. Conversion pour_while

4. Petit projet

5. Boucle infini

GE1 S4 Journal de C

18 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Exercice 1 : Transformer le programme de l’exercice précédent (5 dans notre journal) de manière qu’il répète ce procédé jusqu’à l’intervention de l’utilisateur

Proposition 1

#include <stdio.h>

#include <conio.h>

void main() {

char c;

c='o'; //init..

while(c=='o') {

printf("Donner une lettre en majuscule:");

scanf("%c",&c);

if (c>='A' && c <= 'Z') {

printf("En minuscule ca devient:%c!\n",c-'A'+'a');

} else {

puts("Erreur!");

}

printf("Appuyez sur 'o' pour répéter...\n");

c = getch();

}

}

Proposition 2

#include <stdio.h>

#include <conio.h>

#define TRUE 1

#define FALSE 0

void main() {

char c;

int test = TRUE;

while(test) {

printf("Donner une lettre en majuscule:");

scanf("%c",&c);

if (c>='A' && c <= 'Z') {

printf("En minuscule ça devient:%c!\n",c-'A'+'a');

} else {

puts("Erreur!");

}

printf("Appuyez sur 'o' pour répéter...");

test = getch()=='o';

}

}

Ces programmes ne marchent pas parfaitement ! En effet c’est un défaut de C qui était fixé en C++ !

Mais on peut le fixer en C ;)

Le problème est ici : scanf("%c",&c); va lire le caractère ainsi que le caractère « entrée » (13).

GE1 S4 Journal de C

19 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Lorsque on démarre un autre code de scan clavier (getch(), getchar() ou scanf()), « entrée » (13) va être lu automatiquement sans l’intervention de l’utilisateur. Ainsi, on ajoute un code qui lit l’ « entrée » (tour à vide)

Programme modifié :

#include <stdio.h>

#include <conio.h>

#define TRUE 1

#define FALSE 0

void main() {

char c;

int test = TRUE;

while(test) {

printf("Donner une lettre en majuscule:");

scanf("%c",&c);

if (c>='A' && c <= 'Z') {

printf("En minuscule ca devient:%c!\n",c-'A'+'a');

} else {

puts("Erreur!");

}

scanf("%c",&c);

printf("Appuyez sur 'o' pour répéter...\n");

test = (getch()=='o');

}

}

For (Pour)

La boucle Pour a un goût spécial en langage basé sur C !

En effet, C, C#, C++, D, Java, Javascript, PHP tous utilise un système similaire pour « pour »

for ( INITIALISATION ; CONDITION DE MARCHE ; INSTRUCTION REPETITIVE ) {

// Votre Code ici !

}

INITIALISATION :

C’est le code a exécuté avant entrer la boucle (par exemple : i = 0 )

CONDITION DE MARCHE :

L’expression logique à tester, si elle donne oui on continue sinon on sort (par exemple : i < MAX_I )

INSTRUCTION REPETITIVE:

Le code a exécuté à la fin de chaque cycle du boucle (par exemple : i=i+1 i++ )

GE1 S4 Journal de C

20 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

for ( INITIALISATION ; CONDITION DE MARCHE ; INSTRUCTION REPETITIVE ) {

// Votre Code ici !

}

INITIALISATION

while(CONDITION DE MARCHE) {

//VOTRE CODE ICI

INSTRUCTION REPETITIVE

}

Exercice 2 : Faire un programme qui permet de calculer le factoriel d’un nombre :

#include <stdio.h>

#include <conio.h>

void main() {

int n=-1;

while (n<0)

{

printf("Donner un nombre positif:");

scanf("%d",&n);

}

int i = 0;

unsigned int p = 1;

for(i=1;i<=n;i++) p*=i;

printf("%d!=%u",n,p);

getch();

}

Exercice 3 : Transformer le programme ci-dessus avec « while » :

#include <stdio.h>

#include <conio.h>

void main() {

int n=-1;

while (n<0)

{

printf("Donner un nombre positif:");

scanf("%d",&n);

}

int i = 1;

unsigned int p = 1;

while(i<=n){

p*=i;

i++;

}

printf("%d!=%u",n,p);

getch();

}

GE1 S4 Journal de C

21 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Les C++iens utilisent for(int i = 0 ; i < MAX ; i++) qui ne marche que sur std-C99 et versions plus récentes. Autrement dit, ne l’utilisez PAS ! Il valait mieux d’initialiser « i » avant de l’utiliser dans la boucle

PETIT PROJET C: Le perceptron (vu mathématiquement) est une fonction mathématique qui donne {-1,1} comme résultat.

Nous voulons faire un petit programme de perceptron 1D (positive ray, rayon positif) qui choisit des nombres entiers aléatoires de -100..100 et donne combien des points

sont positifs et combiens ils sont négatifs.

Ci-dessous un programme qui permet de générer un nombre aléatoire entier compris entre 0 et 200 !

#include <stdio.h>

#include <conio.h>

#include <time.h>

void main() {

printf("%d",rand()%200); //aléatoire, un nombre de 0 à 200

}

On peut aussi ajouter un « Random_seed » (générateur de nombre aléatoire) mais rand() tout seul va aller !

srand(time(NULL)); //randomize, a declare une seule fois

Notre proposition !

#include <stdio.h>

#include <conio.h>

#include <time.h>

void main() {

int i=0;

int p=0;

int n=0;

srand(time(0)); //facultative

for (i=0;i<100;i++) {

if((rand()%200)-100<=0) n++; else p++;

}

printf("Les points \t positifs: %d\n\t\t negatifs:%d",p,n);

getch();

}

Boucle infini : Il est possible de programmer une boucle qui ne stoppe pas (boucle infini) for( ;;) {

//votre boucle ici

}

GE1 S4 Journal de C

22 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 5 : Switch, do While et TD

Maîtriser Switch

S’introduire à Do While

Faire des applications

Journée 5

1. switch

2. Do while

3. Petit projet : Sélection

4. TD

GE1 S4 Journal de C

23 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

switch

switch (expression) {

case valeur1:

//code a execute si expression = valeur 1

break;

case valeur2:

//code a execute si expression = valeur 2

break;

default:

// code a execute si expression != valeur1 et expression != valeur2

}

Break ? Break permet de sortir du switch, pour comprendre comment ça marche on va voir cet exemple :

#include <stdio.h>

#include <conio.h>

void main() {

char c = 'a';

switch(c)

{

case 'a':

puts("C'est a");

case 'b':

puts("C'est b");

case 'c':

puts("C'est c");

}

getch();

}

Execution

C’est a

C’est b

C’est c

Et bah, c’est 0 comme note ….

Pour cela on va utiliser « break » (casser) qui casse l’exécution depuis a

#include <stdio.h>

#include <conio.h>

void main() {

char c = 'a';

switch(c)

{

case 'a':

puts("C'est a");break;

case 'b':

puts("C'est b"); break;

case 'c':

puts("C'est c"); break;

}

GE1 S4 Journal de C

24 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

getch();

}

Execution

C’est a

PETIT PROJET D:

Notre groupe se propose d’écrire un programme qui permet de

1. permettre de choisir un ou plusieurs items à acheter d’une liste

2. Choisir la quantité de chaque terme

3. Donner la somme à payer dans le format : 0,000TND avec le reçu (facture)

Notre proposition :

#include <stdio.h>

#include <conio.h>

#define PRIX_CAPCIN 600

#define PRIX_CAPCINO 900

#define PRIX_CITRON 450

#define PRIX_THE 480

void main() {

int somme=0;

int capcin=0,capcino=0,citron=0,the =0;

int encore = 1; //flag

char entre;

int quant = 0;

printf("Bonjour et bienvenue à GE1S4 - Café&Resto! Svp choisir\n\n");

while(encore)

{

quant = 0; //init

printf("Touche\tItem\tPrix\n");

// $(REVISION) : Cappuccino, Capucin

n’est pas Cappucin, Cappucino

GE1 S4 Journal de C

25 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

printf("a\tCappucin\t600m\n");

printf("z\tCappucino\t900m\n");

printf("e\tCitro\t450m\n");

printf("r\tThe\t480m\n");

printf("y\tFinir; Facture et somme\n");

printf("\n\t");

entre = getch();

if (entre!='y') {

printf("Quantite: ");

scanf("%d",&quant);

}

switch(entre){

case 'a':

capcin+=quant;

break;

case 'z':

capcino+= quant;

break;

case 'e':

citron+= quant;

break;

case 'r':

the+= quant;

break;

case 'y':

encore = 0; //trigger pour s’arrêter!

break;

default:

printf("Saisie erroné! Réessayer SVP\n");

}

}

somme = capcin * PRIX_CAPCIN + capcino * PRIX_CAPCINO + the * PRIX_THE + citron

* PRIX_CITRON;

printf("Vous avez entre\n \t(%d)*%d CAPPUCIN \n\t(%d)*%d CAPPUCINO\n\t(%d)*%d

CITRON\n\t(%d)*%d

THE\n",capcin,PRIX_CAPCIN,capcino,PRIX_CAPCINO,citron,PRIX_CITRON,the,PRIX_THE);

printf("Svp de payer %.3fTND\n",(float)somme/1000);

printf("Merci! Revenez bientôt");

getch();

}

Do While

Do {

//code a exécuté si l’expression est encore vraie

} while(expression)

GE1 S4 Journal de C

26 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Journée 6 : TD

TD

TD

1. Polynôme 2ème dégrée

2. Compteur de lettres

3. Calcul de carré (jusqu’à

kbhit)

4. Suite

5. Affichage d’un tableau

6. Calcul min de 3

nombres

GE1 S4 Journal de C

27 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Exercice 1 Proposer un programme qui permet de résoudre ax²+bx+c

Ce programme peut être vu sous la forme :

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

float a,b,c;

float delta = 0;

float imZ,reZ;

printf("Donner a:"); scanf("%f",&a);

printf("Donner b:"); scanf("%f",&b);

printf("Donner c:"); scanf("%f",&c);

if (a==0)

{

if (b==0 && c==0) printf("Solution: droite IR");

if (b==0 && c!=0) printf("Pas de solutions");

if (b!=0) printf("solution: x=%.2f",-c/b);

} else {

delta = b*b-4*a*c;

if (delta > 0) printf("Deux solutions: x1=%.2f \tx2=%.2f",(-b-sqrt(delta)) /

(2*a) ,(-b+sqrt(delta)) / (2*a));

if (delta == 0) printf("Double solution: x=%.2f",(-b-sqrt(delta)) / (2*a));

if (delta < 0) {

reZ = -b/(2*a);

imZ = sqrt(-delta);

if (imZ >0)

printf("Double solution Complexes: z1=%.2f + %.2fi\t z2=%.2f -

%.2fi",reZ,imZ,reZ,imZ);

else

printf("Double solution Complexes: z1=%.2f + %.2fi\t z2=%.2f -

%.2fi",reZ,-imZ,reZ,-imZ);

GE1 S4 Journal de C

28 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

}

}

getch();

}

Puissance : ATTENTION !!! .

En C, il n’existe pas un opérateur puissance (tel que « 2^3 » )

et si elle existe, elle va donner « 1 » au lieu de 23 = 8 !

Pour utiliser la puissance IL FAUT utiliser pow du math.h

Racine Carré (sqrt) :

IL FAUT importer math.h

Exercice 2 Proposer un programme qui permet de saisir une suite de caractères, compter et afficher les nombre des lettres et d’espaces.

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

char c;

int e=0,esp=0;

/*

- getch n'affiche rien! il faut renforcer l'affichage

- Il faut aussi envoyer le signal d'arrêt: point!

*/

while (c!='.')

{

c=getch();

switch (c)

{

case ' ':

esp++;

break;

default:

e++;

break;

}

printf("%c",c);

}

printf("\n Vous avez entre %d lettres et %d espaces!",e,esp);

getch();

}

GE1 S4 Journal de C

29 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Exercice 2++ Ajouter la fonctionnalité d’afficher le nombre des voyelles et consonnes !

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

char ch;

int e=0,esp=0,c=0,v=0;

/*

- getch n'affiche rien! il faut renforcer l'affichage

- Il faut aussi envoyer le signal d'arrêt: point!

*/

while (ch!='.' )

{

ch=getch();

switch (ch)

{

case ' ':

esp++;

break;

case 'a': case 'e': case 'i':case 'u': case 'o':case 'y':case 'A': case 'E':

case 'I': case 'U': case 'O':case 'Y':

e++;

v++;

break;

default:

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')){c++;e++;} //consonne, pas

un chiffre!

}

printf("%c",ch);

}

printf("\n Vous avez entre %d lettres et %d espaces!",e,esp);

printf("\n Ainsi %d consonnes et %d voyelles!",c,v);

getch();

}

Exercice 3 la fonction kbhit() appartient à conio.h. Elle renvoie 0 si aucune touche n’est tapée

1) Ecrire un programme qui permet d’afficher le carré des nombres 1,2,3,4, …. Jusqu’à ce aucun caractère n’a été frappé au clavier.

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

unsigned int a;

while (!kbhit())

{

printf("%u^2=%u\n",a,a*a);

a++;

}

getch();

getch();

}

GE1 S4 Journal de C

30 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

Exercice 4 Ecrire un programme qui détermine la nème valeur de Un (n étant donné) de la suite définie par comme ci-suit ainsi que leur somme

U1 = 1

U2 = 2

U3 = 3

Un = Un-1 – Un-3

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

// u <-- U1

// v <-- U2

// w <-- U3

// w va recevoir Un jusqu'a la fin du programme

int u=1,v=2,w=3,aux=0;

int n=0,i=0;

int somme = u+v+w;

//n>=1

while (n<=0) {

printf("Donner n:");

scanf("%d",&n);

}

switch(n) {

case 1:

somme =u;

w = u; //notre programme va voir w comme resultat final!

break;

case 2:

somme = u+v;

w=v;

break;

case 3:

//somme deja declare somme = u+v+w, ainsi que w=w, rien à faire!

break;

default:

//n>=4

for (i=4;i<=n;i++){

aux = w-u; //notre resultat

somme+=aux; //somme

u=v;v=w;w=aux; // permutation

}

}

printf("U(%d)=%d\nSomme = %d",n,w,somme);

getch();

}

Exercice 5 Ecrire un programme qui affiche un tableau sous la forme suivante :

A 1 2 3 4 5

A*A 1 4 9 16 25

1/A 1.0 0.5 0.33 0.25 0.2

2) Convertir ce programme vers une seule boucle

#include <stdio.h>

#include <conio.h>

GE1 S4 Journal de C

31 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

#include <math.h>

void main() {

int i;

printf("A\t");

for(i=1;i<=5;i++) printf("%d\t",i);

printf("\nA*A\t");

for(i=1;i<=5;i++) printf("%d\t",i*i);

printf("\n1/A\t");

for(i=1;i<=5;i++) printf("%.2f\t",1.0/i);

getch();

}

Une seule boucle :

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

int i;

for(i=0;i<18;i++) {

switch(i/6) {

case 0:

if (i%6==0)printf("A\t");

else printf("%d\t",i%6);

break;

case 1:

if (i%6==0)printf("\nA*A\t");

else printf("%d\t",(i%6)*(i%6));

break;

case 2:

if (i%6==0)printf("\n1/A\t");

else printf("%.2f\t",1.0/(i%6));

break;

}

}

getch();

}

Exercice 6 Ecrire un programme qui permet de calculer et afficher le minimum de 3 entiers

Solution simple:

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

int a,b,c;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

printf("Le minimum est ");

if (a<b) {

if (a<c) printf("%d",a);

else printf("%d",c);

} else {

if (b<c) printf("%d",b);

else printf("%d",c);

GE1 S4 Journal de C

32 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

}

getch();

}

Solution avec minimum de if/else :

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

int a,b,c,min;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

min = a ;

if (b<min) min = b ;

if (c<min) min = c ;

printf("Le minimum est %d",min);

getch();

}

Solution professionelle:

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main() {

int a,b,c,min;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

min = a ;

min = min > b ? b : min ;

min = min > c ? c : min ;

printf("Le minimum est %d",min);

getch();

}

Solution Mathématique:

#include <conio.h>

#include <stdio.h>

#include <math.h>

void main() {

int a,b,c,min;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

min = a ;

min = (b+min-abs(b-min))/2;

min = (c+min-abs(c-min))/2;

printf("Le minimum est %d",min);

getch();

}

Solution Booléenne:

GE1 S4 Journal de C

33 Groupe n°2 Ahmed Derbel , Ahmed Kammoun, Ahmed Yahia Kallel , Aymen Baccari, Ghazi Zouari, Mohamed Allouch, Wassef Chaaben, Zied Omrane

2013/2014 Support de cours : Mr Hafedh Trabelsi

#include <conio.h>

#include <stdio.h>

#include <math.h>

void main() {

int a,b,c,min;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

min = a ;

min = (b<min)*b + (b>=min)*min;

min = (c<min)*c + (c>=min)*min;

printf("Le minimum est %d",min);

getch();

}

Solution Booléenne, une seule ligne:

#include <conio.h>

#include <stdio.h>

#include <math.h>

void main() {

int a,b,c,min;

printf("donner a:");scanf("%d",&a);

printf("donner b:");scanf("%d",&b);

printf("donner c:");scanf("%d",&c);

min = a * (a<=b && a<=c) + b* (b<c && b<a) + c * (c<a && c<b);

printf("Le minimum est %d",min);

getch();

}