Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale...
-
Upload
evonne-pollet -
Category
Documents
-
view
109 -
download
0
Transcript of Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale...
![Page 2: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/2.jpg)
Objectifs
Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent déjà coder : retournez
dormir :-)
![Page 3: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/3.jpg)
Syntaxe basique
Les instructions se terminent par un ' ; ' Les instructions peuvent se regroupper avec
des accollades : { .... } Les commentaires entre /* et */
![Page 4: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/4.jpg)
Premier programme
Source ExécutableCompilation
Compréhensible par un humain (un peu entrainé)
Non utilisable par la machine
Incompréhensible par un humain (ou alors vraiment très entrainé !)
Utilisable par la machine
![Page 5: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/5.jpg)
Premier programme (2)
int main(void) {
fputs(“hello world\n”);
}
implémentation
![Page 6: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/6.jpg)
Premier programme (3)
int main(void) {puts("hello world\n");
}compilation
implémentation
$ gcc -out hello hello.c
![Page 7: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/7.jpg)
Premier programme (4)
int main(void) {puts("hello world\n");
}compilation
implémentation
$ gcc -out hello hello.cexécution
$ ./hellohello world$
![Page 8: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/8.jpg)
Les variables
Se déclarent avant les instructions
Ont un type Entier (int, short, ...) éventuellement “unsigned” Caractère (char) décimaux (float, double, ...)
Se convertissent
int i;float f;char c;
![Page 9: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/9.jpg)
Utilisation de variablesint main( void ) {
int i;i = 0;if( i == 0 ) {
puts("i est nul\n"); }i=5;if( i == 0 ) {
puts("i est encore nul\n"); }
}
$ ./programme2i est nul$
![Page 10: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/10.jpg)
Instructions conditionnelles
utilisation de « if »
pas de point-virgule après if ou else bonne habitude : toujours grouper les
instructions avec ' {' et '}' comparaisons
(a==b) (a!=b) (a<b) (a>b) (a) ...
if( condition ) {instructions;
} else {autres_instructions;
}
![Page 11: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/11.jpg)
Boucles utilisation de « for »
exemple
for( initialisation; condition; iteration ) {instructions;
}
int main( void ) {int i;for( i=0; i<3; i++ ) {
printf("i vaut %d\n", i);}
}
$ ./programme_boucle_fori vaut 0i vaut 1i vaut 2$
![Page 12: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/12.jpg)
Boucles (2)
while( condition ) {instructions;
}
int main( void ) {int i = 3;while( i < 6 ) {
puts("proj\n");i++;
}}
utilisation de « while »
exemple
$ ./programme_boucle_whileprojprojproj$
![Page 13: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/13.jpg)
Boucles (3)
do {instructions;
} while( condition ) ;
autre utilisation de « while »
différence : le bloc « instructions » est toujours exécuté au moins une fois
A l'utilisation d'une boucle, toujours penser aux conditions d'entrée et de sortie.
![Page 14: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/14.jpg)
Boucles : pratique
Pour un nombre de fois determiné :for( i=0; i<nb; i++ ) { instructions; }
Tant qu'une condition est vraiewhile( condition ) { instructions; }
Au moins une fois, et tant qu'une condition est vraie do { instructions } while ( condition );
En utilisant while, il faut que condition ait une chance de changer !!
![Page 15: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/15.jpg)
Tests et conditions
sur les nombres : == != < > <= >= implicitement : '!=0'
opérateurs logiques (!cond) (cond1)&&(cond2) (cond1)||(cond2) importance des parenthèses
if( i ) {puts("i non nul");
}
int i=12;if( ((i%2)&&(i<6))|| (i>10) ) { ... } /*vrai*/if( (i%2) && ((i<6))||(i>10)) ) { ... } /*faux*/
![Page 16: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/16.jpg)
Trucs et astuces
dans le doute, mettre des parenthèses et des accollades
les opérateurs unitaires ++ et - - pratiques à utiliser de préférence seuls
i++if( i ) { ... }/* plus lisible que */
if( ++i ) { ... }
![Page 17: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/17.jpg)
Les fonctions Don't repeat yourself : factoriser le code
gain de place et de lisibilité code maintenable travail distribuable dans une équipe
int main(void) {int i=0;
i++;
i++;
i++;
}
printf("i vaut %d, et i-1 vaut %d",i,i-1);
printf("i vaut %d, et i-1 vaut %d",i,i-1);
printf("i vaut %d, et i-1 vaut %d",i,i-1);
int main(void) {int i=0;
affiche( i );i++;
affiche( i );i++;
affiche( i );i++;
}
void affiche( int v ) {printf("v vaut %d et v-1 vaut %d\n",v,
v-1);}
![Page 18: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/18.jpg)
Les fonctions
ont un type de retour, ou void ne s'utilisent qu'après
avoir été implémentées avoir été déclarées .... et notre premier programme ?
$ gcc -Wall -out hello hello.chello.c: In function `main´:hello.c: warning: implicit declaration of function `puts´hello.c: warning: control reaches end of non-void function
![Page 19: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/19.jpg)
Retour à hello.c
directive #include valeur de retour
#include <stdio.h>
int main(void) {fputs(“hello world\n”);return 0;
}
![Page 20: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/20.jpg)
Pointeurs
c'est une variable qui contient une adresse memoire
il est typé : « pointeur vers un int », « pointeur vers un unsigned short », ...
« double sens » de la déclaration
a est un « int * » *a est un « int »
int *a;
![Page 21: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/21.jpg)
Pointeurs accès à l'adresse d'une variable : par
l'opérateur & accès à la variable depuis le pointeur : par
l'opérateur *#include <stdio.h>int main( void ) {
int i = 0;int *p;p = &i;printf( "i=%d p=%p\n",i,p);i=5;printf( "i=%d p=%p\n",i,p);*p = 12;printf( "i=%d p=%p\n",i,p);
}
![Page 22: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/22.jpg)
Tableaux
tableaux et pointeurs sont très proches déclaration:
p pointe vers le premier entier du tableau (p+1) pointe vers le second entier du tableau accès direct : p[0], p[1], ... plus rapide que (*(p+1))...
affectation à la déclaration :
int p[12];
int p[3] = { 2, 12, 42 };
![Page 23: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/23.jpg)
Tableaux#include <stdio.h>
int main() { int foo [ ] = { 2, 12, 42 } ; int *p = foo; /* p vaut foo, donc &(foo[0]) */
printf("%d %d %d\n", foo[0], foo[1], foo[2]); printf("%d %d %d\n", p[0], p[1], p[2]); printf("%d %d %d\n", *foo, *(foo+1), *(foo+2));}
$ ./programme_tableau2 12 422 12 422 12 42$
![Page 24: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/24.jpg)
Chaines de caractères
En C, pas de type spécifique On utilise des tableaux de char Qui se termine par un caractère nul : '\0'
char string1[] = { 'c','o','m','p','l','i','q','u','é',0};char string2[] = "plus simple";/* et même, pour les char* uniquement */char * string3 = "à la déclaration";
dernier caractère p[5] = 0 p[5] = '\0'
![Page 25: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/25.jpg)
« Hands on » !
Et n'oubliez pas ! Identez Faites des fonctions Privilégiez la lisibilité
Et en pratique Compilez avec « -Wall » Lisez les messages d'erreur !
![Page 26: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/26.jpg)
Exercice 1
déclarer un tableau et le remplir d'entiers de 1 à 30 à l'aide d'une boucle
afficher son contenu afficher son contenu en ordre inverse
printf("la case %d vaut %d\n", indice, valeur );
![Page 27: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/27.jpg)
Exercice 2
Lire une ligne tapée au clavier L'afficher Recommencer jusqu'à ce qu'on tape une ligne
vide (juste <entrée>)
fgets( ) ..... stdin
scanf(« %s » ......
![Page 28: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/28.jpg)
Exercice 3
Même chose en affichant la ligne à l'envers.
![Page 29: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/29.jpg)
Exercice 4
Lire plusieurs lignes au clavier jusqu'à l'entrée d'une ligne vide
Les afficher dans l'ordre inverse de saisie
![Page 30: Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.](https://reader034.fdocuments.net/reader034/viewer/2022051515/551d9d7f497959293b8b77ec/html5/thumbnails/30.jpg)
Pour les rapides
Ecrire une fonction qui inverse deux variables