Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parCoralie Lanthier Modifié depuis plus de 8 années
1
CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure d'un programme ● Bibliothèque graphique ● Tirage pseudo-aléatoire
2
CINI – Li115 2 1. Questions de cours (1/2) ● Le langage C est un langage : ● Fonctionnel ? ● Interprété ? ● Impératif ? ● Compilé ? ● Typé ? ● Incontournable ? ● Combien de types de boucles existe-t-il en C ? ● Deux, trois, quatre ? ● Le langage C permet-il de représenter la valeur π ? ● Oui – Non
3
CINI – Li115 3 1. Questions de cours (1/2) ● Le langage C est un langage : ● Fonctionnel – Non : un programme est avant tout une séquence d'instructions. C'est donc un langage impératif. ● Interprété – Non : un programme C doit être traduit en langage machine pour être exécuté. C'est donc un langage compilé. ● Typé – Oui : le compilateur vérifie les types des variables (et fait certaines conversions automatiquement). ● Combien de types de boucles existe-t-il en C ? ● Trois : for, while, do-while. if n'est pas une boucle. ● Le langage C permet-il de représenter la valeur π ? ● Non, seulement une approximation. Les éléments de type float ne sont pas des nombres réels (seulement des décimaux). Correction
4
CINI – Li115 4 1. Questions de cours (2/2) ● Dans quel cas doit-on (de préférence) utiliser une boucle for ? ● Dans quel cas doit-on (de préférence) utiliser une boucle do- while ? ● Peut-on remplacer une boucle for par une boucle while ?
5
CINI – Li115 5 1. Questions de cours (2/2) ● Dans quel cas doit-on (de préférence) utiliser une boucle for ? ● Lorsqu'on connaît à l'avance le nombre d'itérations (par exemple, pour tracer un carré dont on connaît la longueur). ● Dans quel cas doit-on (de pref.) utiliser une boucle do-while ? ● Lorsque le bloc d'instructions à répéter doit absolument être exécuté au moins une fois (par exemple, pour initialiser une variable et contrôler sa valeur). ● Peut-on remplacer une boucle for par une boucle while ? ● Oui : en C et dans les langagés dérivés (C++, Java...), le for n'est qu'une autre écriture d'une boucle while. ● Le for correspond à une structure de boucle très spécifique (répétition sur un ensemble fini de valeurs) et c'est une bonne habitude de programmation de l'utiliser dans ce cas. Cela permet de mettre en évidence les paramètres (le nombre de passages, la valeur de début, le pas d'itération...). Correction
6
CINI – Li115 6 2. Types des expressions ● Donnez le type et, le cas échéant, la valeur, de chacune des expressions suivantes : ● 'a' ● -7.1 ● "a" ● 3+2 ● 2.1+7 ● 3/-2 ● 3.0/2 ● 'A'+3 ● 2/"a" ● "a"+"b"
7
CINI – Li115 7 2. Types des expressions ● Donnez le type et la valeur des expressions suivantes : – charla lettre a ou la valeur 97 ● floatla valeur -7,1 ● stringla chaîne a ● intla valeur 5 ● floatla valeur 9,1 ● intla valeur -1 ● floatla valeur 1,5 ● charla valeur 'D' ou 68 ● rien du tout – erreur: invalid operands to binary / (have ‘char *’ and ‘int’) ● rien du tout – erreur: invalid operands to binary + (have ‘char *’ and ‘char *’) – → ça n'est pas comme cela qu'on concatène des chaînes ! Correction 'a' -7.1 "a" 3+2 2.1+7 3/-2 3.0/2 'A'+3 2/"a" "a"+"b"
8
CINI – Li115 8 3. Déclarations de variables ● Quelles sont les déclarations correctes et, le cas échéant, quelles sont les valeurs des variables ? ● int _qsd; int 'toto;int 2befree; int ALKqsdlkazA; ● int a = 3; char i; string 'm'; ● int c,d=3; ● float e = 3; int f = 3.2; float g = 3,2; ● char h = "c"; char j = 'a'; char k = 35; int l = 'a'; ● bool n = no; bool m = false; bool o = 1;
9
CINI – Li115 9 3. Déclarations de variables Correction ● Quelles sont les déclarations correctes ? ● int _qsd; int ALKqsdlkazA; ● int 'toto; ● int 2befree; ● ● int a = 3; ● char i; ● int c,d=3; ● float e = 3; ● int f = 3.2; OK (non initialisé) → attention : caractère ' de terminaison manquant → erreur: expected identifier or ‘(’ before numeric constant OK (valeur 3) OK mais non initialisé (pas 'i') OK : d vaut 3 mais c non initialisée OK (valeur 3.0) OK ! (valeur 3) arrondi implicite sans aucun message d'erreur ! => C'est MAL ! À éviter à tout prix ! int f = (int)3.2; pour l'opérateur d'arrondi explicite.
10
CINI – Li115 10 3. Déclarations de variables Correction ● Quelles sont les déclarations correctes ? ● Propositions de correction ● int _qsd = 0; int ALKqsdlkazA = 0; ● int quote_toto; ● int tobefree; ● int a = 3; ● char i = 'w'; ● string m = "toto"; ● int c = 0, d=3; ● float e = 3; ● int f = (int)3.2;
11
CINI – Li115 11 3. Déclarations de variables ● Quelles sont les déclarations correctes ? ● → error: expected identifier or '(' before numeric constant ● → attention : initialization makes integer from pointer without a cast ● ● Correction float g = 3,2; char h = "c"; char j = 'a'; char k = 35; int l = 'a'; bool n = no; bool m = false; bool o = 1; → erreur 'no' undeclared (first use in this function) OK ! (valeur false) OK ! (valeur true) => à éviter... OK ! (valeur 97) => à éviter ! OK ! (valeur '#')- code ASCII 35 => à éviter ! OK ! (valeur de 'a')
12
CINI – Li115 12 3. Déclarations de variables ● Quelles sont les déclarations correctes ? ● Propositions de correction ● float g = 3.2; ● char h = 'c'; ● char j = 'a'; ● char k = '#'; ● int l = 97; ● bool n = false; ● bool m = false; ● bool o = true; Correction
13
CINI – Li115 13 4.1. Instruction conditionnelle (1/2) ● Quelle est la valeur de la variable a après l'exécution de ce bloc d'instructions ? ● int a = 3, b = 5; ● if ((a+2)<b) { ● a = a+b; ● } else ● b = b*2; ● a = a-b; ● Et si la valeur initiale de a était 1 ? ● int a = 1, b = 5; ●...
14
CINI – Li115 14 4.1. Instruction conditionnelle (1/2) ● Quelle est la valeur de la variable a après l'exécution de ce bloc d'instructions ? ● int a = 3, b = 5;a : 3, b : 5 ● if ((a+2)<b) {5 < 5 : faux ● a = a+b; ● } else→ directement ici ● b = b*2;b : 10 ● a = a-b;a : -7 ● → a vaut -7 ● Le programme est: ● 1. MAL INDENTÉ ! ● 2. MAL PARENTHESÉ ! Correction
15
CINI – Li115 15 4.1. Instruction conditionnelle (1/2) ● Et si la valeur initiale de a était 1 ? ● int a = 1, b = 5;a : 1, b : 5 ● if ((a+2)<b) {3 < 5 : vrai ● a = a+b;a : 6 ● } elseon passe le else … ● b = b*2;… qui ne contient ● qu'une instruction ! ● a = a-b;a : 1 ● → a vaut 1 ! ● → Attention aux accolades oubliées ! ● (qui se détectent simplement en indentant le programme) Correction
16
CINI – Li115 16 4.1. Instruction conditionnelle (2/2) ● À l'aide d'instructions conditionnelles, écrivez un programme qui calcule dans une variable resultat le plus petit entier non négatif entre deux entiers donnés a et b. ● resultat = -1 si les deux valeurs sont négatives : ● #include ● int main() { ● int resultat; ● int a = 7, b = -5; ● … (à vous) … ● return 0; ● }
17
CINI – Li115 17 4.1. Instruction conditionnelle (2/2) ● Un programme qui calcule la plus petite valeur non-négative : ● if ((a<0)&&(b<0)) { ● resultat = -1; ● } else { ● if (a>b) { ● if (b<0) { ● resultat = a; ● } else { ● resultat = b; ● } ● } else { ● if (a<0) { ● resultat = b; ● } else { ● resultat = a; ● } Correction Il existe d'autres solutions (plus compactes)
18
CINI – Li115 18 4.2. Boucles (1/2) ● Quels morceaux de programmes affichent toutes les lettres minuscules de l'alphabet ? char b; for (b='a';b<'z';b++) { CINI_print_char(b); } char b = 'a'; while (b<='z') { CINI_print_char(b); b++; } char b = 'a'; do { CINI_print_char(b); b++; while (b<='z'); char b = 'a'; while (b<='z') CINI_print_char(b); b++; char b; for(b='a';b<='z';b++) { CINI_print_char(b); b++; } char b; for(b='a';b<='z';b++) CINI_print_char(b);
19
CINI – Li115 19 4.2. Boucles (1/2) ● Quels morceaux de programmes affichent toutes les lettres minuscules de l'alphabet ? char b; for (b='a';b<'z';b++) { CINI_print_char(b); } char b = 'a'; while (b<='z') { CINI_print_char(b); b++; } char b = 'a'; do { CINI_print_char(b); b++; while (b<='z'); char b = 'a'; while (b<='z') CINI_print_char(b); b++; char b; for(b='a';b<='z';b++) { CINI_print_char(b); b++; } char b; for(b='a';b<='z';b++) CINI_print_char(b); Correction Erreur de syntaxe : il Manque une accolade Erreur sur la condition de sortie Pas d'accolade → boucle infinie ! On ne modifie JAMAIS la variable de contrôle dans la boucle for !
20
CINI – Li115 20 5. Structure d'un programme ● Complétez le programme suivant : ● ______________ ● _____ main ________ { ● int a = N; ● CINI_print_int(a+2); /* affiche 5 */ ● CINI_newline(); ● ______________ ● }
21
CINI – Li115 21 5. Structure d'un programme ● Complétez le programme suivant : ● #include ● #define N 3 ● int main() { ● int a = N; ● CINI_print_int(a+2); /* affiche 5 */ ● CINI_newline(); ● return 0; ● } Correction
22
CINI – Li115 22 6. Bibliothèque graphique ● Écrivez un programme qui trace une ligne horizontale de L=100 pixels de long à partir du point A=(X0,Y0) X0X0 + L Y0
23
CINI – Li115 23 6. Bibliothèque graphique ● Écrivez un programme qui trace une ligne horizontale de L pixels de long à partir du point A=(X0,Y0) ● Ici, A=(10,10) et L=100 ● #include ● #define X0 10 ● #define Y0 10 ● #define L 100 ● int main() { ● CINI_open_fullscreen(); /* ou window... */ ● CINI_draw_line(X0,X0,X0+L,Y0,"black"); ● CINI_loop(); /* laisser voir... */ ● return 0; ● } Correction
24
CINI – Li115 24 6. Bibliothèque graphique ● Écrivez un programme qui dessine un triangle rectangle plein, de sommets A = (10,10), B = (10,200) et C = (100,200) ● Indice: pour « remplir » le triangle, on utilisera des tracés de lignes horizontales, verticales ou obliques (au choix) A B C
25
CINI – Li115 25 6. Bibliothèque graphique ● Écrivez un programme qui dessine un triangle rectangle plein, de sommets A = (10,10), B = (10,200) et C = (100,200) 1. Partie « primitives de préprogrammation » (début du programme) ● #include ● #define XA 10et on rajoute même: ● #define YA 10 #define MARGE 10 ● #define XB 10 ● #define YB 200 ● #define XC 100 ● #define YC 200 Correction
26
CINI – Li115 26 6. Bibliothèque graphique ● Écrivez un programme qui dessine un triangle rectangle plein, de sommets A = (10,10), B = (10,200) et C = (100,200) 2. La fonction main ● int main() { ● int i; ● CINI_open_window(XC-XA+MARGE*2,YC-YA+MARGE*2,"fenetre"); ● for(i=YA;i<=YB;i++) { ● CINI_draw_line(XA, i, ● XA+((i-YA)*(XC-XB)/(YB-YA)), i ● "blue"); ● } ● CINI_loop(); ● return 0; ● } Correction Théorème de Thalès : A BC MN AM AB MN BC =
27
CINI – Li115 27 7. Tirage pseudo-aléatoire ● Complétez le programme suivant qui doit afficher deux nombres entre 1 et 6. ● #include ● int main() { ● ___________________ ● CINI_print_int(___________________); ● CINI_print_string(" et "); ● CINI_print_int(___________________); ● CINI_newline(); ● return 0; ● }
28
CINI – Li115 28 7. Tirage pseudo-aléatoire ● Complétez le programme suivant qui doit afficher deux nombres entre 1 et 6. ● #include ● int main() { ● CINI_print_int(CINI_random(1,6)); ● CINI_print_string(" et "); ● CINI_print_int(CINI_random(1,6)); ● CINI_newline(); ● return 0; ● } Correction
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.