-
yassin.elhakoun authoredyassin.elhakoun authored
- Quiz
- Que fait le code suivant?
- Génération d'un exécutable
- Structures de contrôle: if{.C} .. else if{.C} .. else{.C} (1/2)
- Syntaxe
- Structures de contrôle: continue{.C}, break{.C}
- La fonction main() (1/2)
- Généralités
- La fonction main() (2/2)
- Exemple
- Entrées/sorties: printf(){.C} (1/2)
- Généralités
- Entrées/sorties: printf(){.C} (2/2)
- Exemple
- Entrées/sorties: scanf(){.C} (1/2)
- Généralités
- Entrées/sorties: scanf(){.C} (2/2)
- Exemple
- Nombres aléatoires: rand(), srand(){.C} (2/2)
- Exemple
- Le cas du nombre secret
- But du programme
- Quelles sont les étapes?
- La fin
title: "Boucles et conditions"
date: "2023-09-28"
Quiz
\footnotesize
Que fait le code suivant?
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Enter n: ");
int n = 0;
scanf("%d", &n);
int res = 0;
for (int i = 0; i <= n; ++i) {
res += i;
}
printf("For = %d, the result is %d\n", n, res);
if (res != n * (n+1) / 2) {
printf("Error: the answer is wrong.\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Génération d'un exécutable
-
Pour pouvoir être exécuté un code C doit être d'abord compilé (avec
gcc
ouclang
). -
Pour un code
prog.c
la compilation "minimale" est$ clang prog.c $ ./a.out # exécutable par défaut
-
Il existe une multitude d'options de compilation:
$ clang -std=c11 -Wall -Wextra prog.c -o prog
-
-std=c11
utilisation de C11. -
-Wall
et-Wextra
activation des warnings. -
-o
défini le fichier exécutable à produire en sortie.
-
if
{.C} .. else if
{.C} .. else
{.C} (1/2)
Structures de contrôle: \footnotesize
Syntaxe
if (expression) {
instructions;
} else if (expression) { // optionnel
// il peut y en avoir plusieurs
instructions;
} else {
instructions; // optionnel
}
if (x) { // si x s'évalue à `vrai`
printf("x s'évalue à vrai.\n");
} else if (y == 8) { // si y vaut 8
printf("y vaut 8.\n");
} else {
printf("Ni l'un ni l'autre.\n");
}
continue
{.C}, break
{.C}
Structures de contrôle: \footnotesize
-
continue
{.C} saute à la prochaine itération d'une boucle.int i = 0; while (i < 10) { if (i == 3) { i += 1; continue; } printf("%d\n", i); i += 1; }
-
break
{.C} quitte le bloc itératif courant d'une boucle.for (int i = 0; i < 10; i++) { if (i == 3) { break; } printf("%d\n", i); }
main()
(1/2)
La fonction Généralités
- Point d'entrée du programme.
- Retourne le code d'erreur du programme:
- 0: tout s'est bien passé.
- Pas zéro: problème.
- La valeur de retour peut être lue par le shell qui a exécuté le programme.
-
EXIT_SUCCESS
{.C} etEXIT_FAILURE
{.C} (destdlib.h
) sont des valeurs de retour portables de programmes C.
main()
(2/2)
La fonction Exemple
int main() {
// ...
if (error)
return EXIT_FAILURE;
else
return EXIT_SUCCESS;
}
- Le code d'erreur est lu dans le shell avec
$?
{.bash}
$ ./prog
$ echo $?
0 # tout s'est bien passé par exemple
$ if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR"; fi
ERROR # si tout s'est mal passé
printf()
{.C} (1/2)
Entrées/sorties: Généralités
-
La fonction
printf()
{.C} permet d'afficher du texte sur le terminal:int printf(const char *format, ...);
-
Nombre d'arguments variables.
-
format
{.C} est le texte, ainsi que le format (type) des variables à afficher. -
Les arguments suivants sont les expressions à afficher.
printf()
{.C} (2/2)
Entrées/sorties: Exemple
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello world.\n");
int val = 1;
// %d => int
printf("Hello world %d time.\n", val);
// %f => float
printf("%f squared is equal to %f.\n",
2.5, 2.5*2.5);
// %s => string
printf("Hello world %s.\n", "Hello world");
return EXIT_SUCCESS;
}
scanf()
{.C} (1/2)
Entrées/sorties: Généralités
-
La fonction
scanf()
{.C} permet de lire du texte formaté entré au clavier:int scanf(const char *format, ...);
-
format
{.C} est le format des variables à lire (commeprintf()
{.C}). -
Les arguments suivants sont les variables où sont stockées les valeurs lues.
scanf()
{.C} (2/2)
Entrées/sorties: Exemple
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Enter 3 numbers: \n");
int i, j, k;
scanf("%d %d %d", &i, &j, &k); // !!! &
printf("You entered: %d %d %d\n", i, j, k);
return EXIT_SUCCESS;
}
rand()
, srand()
{.C} (2/2)
Nombres aléatoires: \footnotesize
$ man 3 rand
The rand() function returns a pseudo-random integer
in the range 0 to RAND_MAX inclusive (i.e., the
mathematical range [0, RAND_MAX]).
Exemple
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(0); // every run will be identical
srand(time(NULL)); // every run will be be different
for (int i = 0; i < 50; ++i) {
printf("%d\n", rand() % 50); // à quoi sert % 50?
}
return EXIT_SUCCESS;
}
Le cas du nombre secret
But du programme
- Faire chercher un nombre aléatoire,
- Le nombre est compris entre 0 et une borne max.
Quelles sont les étapes?
- Donner une borne maximale à l'ordinateur, MAX.
. . .
- Faire tirer un nombre aléatoire à l'ordinateur entre 0 et MAX-1.
. . .
- Le·la joueur·se joue un nombre.
. . .
-
L'ordinateur vérifie la réponse:
- Si correct le jeu est fini,
- Sinon indiquer si le nombre secret est plus grand ou plus petit et revenir à 3.
La fin
- Y a-t-il des questions?
. . .
- Si oui, répondre et revenir à 1, sinon aller faire l'exercice en A432/433/406.