François Trahay & Gaël Thomas

Objectifs du module:
Modalités:
Partie Programmation
Partie Système
Evaluation
Le module est évalué par * un projet * but: que les étudiants
programment * risque: certains étudiants peuvent “être aidés” (par un
camarade/une IA) * évaluation par un oral/revue de code de 5-10 minutes.
* Exemple de questions: * Comment as-tu implémenté la fonction
foo ? * Que se passe-t-il si la fonction
bar(int n) est appelée avec n<0 ? * un
examen sur papier * but: évaluer la capacité des étudiants à résoudre un
problème en C
Système de classe inversée. Pour chaque séance :
Avant la séance
Pendant la séance:
Attention ! Cela ne fonctionne que si vous travaillez sérieusement avant la séance.
Hypothèse: les étudiants suivant ce cours sont des adultes responsables.
Pour vous aider, vous avez à votre disposition:
s pour afficher les
commentairesman 2 <fonction> ou
man 3 <fonction>)1 B. Parker, Amazing Fantasy, 1962
Pour les types simples, déclaration identique à Java:
int var1;
int var2, var3, var4;
int var5 = 42;
Types disponibles:
int, short,
long, long longfloat, doublechar
La liste des opérateurs disponibles est à peu près la même qu’en Java:
+, -, *,
/, %=, +=, -=,
*=, /=, %=++, --<, <=,
>, >=, ==,
!=!, &&,
||Mais également:
sizeof n: donne le nombre d’octets qui constitue une
variable/un type nPossibilité de travailler sur des champs de bits.
<<, >>|, AND :&, XOR : ^,
NOT : ~<<=, >>=,
|=, &=, ^=,
~=Comme en Java:
for(i=0; i<n; i++) { ... }while(cond) {... }do { ... } while(cond);if (cond) { ... } else { ... }break pour sortir d’une boucle
printf("%d exemple de %f format \n", v1, v2);scanf("%d-%f", &v1, &v2);Déclaration:
char, short, int,
long long (signés par défaut, non signés si préfixés de
unsigned)float (4 octets), double (8 octets)Une structure est une définition d’un nouveau type de données
Remarque: les sous-types d’une structure s’appellent des champs
Définition d’une nouvelle structure avec :
Par convention, les noms de structures commencent par une minuscule en C
n du tableau tab se
fait avec tab[n]On ne peut pas accéder à la taille d’un tableau
Lors d’un accès en dehors des bornes du tableau, l’erreur est silencieuse :
c’est une erreur, mais elle n’est pas signalée immédiatement
=> parmi les erreurs les plus fréquentes (et les plus difficiles à repérer) en C
Par exemple:
int x[6] = { 1, 2, 3, 4, 5, 6 };
Comme pour les structures, on peut partiellement initialiser un tableau
int x[6] = { 1, 1, 1 };Une chaîne de caractère est simplement un tableau de caractères
terminé par le caractère '\0' (c’est à dire le nombre
zéro)
est équivalent à
Passage par valeur : l’argument est copiée de l’appelé vers l’appelant
=> l’argument et sa copie sont deux variables différentes
Passage par référence : une référence vers l’argument de l’appelant est donné à l’appelé
=> l’appelant et l’appelé partagent la même donnée
type nom[], sans la taille/* le x de f et le x du main sont deux variables distinctes */
/* le fait qu'elles aient le même nom est anecdotique */
void f(int x) {
x = 666;
printf("f : x = %d\n", x); /* f : x = 666 */
}
int main() {
int x = 42;
f(x); /* x est copié dans f */
/* => le x de main n'est donc pas modifié par f */
printf("g : x = %d\n", x); /* g : x = 42 */
return 0;
}