Séance du 25 octobre.
This commit is contained in:
parent
5abd592b3d
commit
e69d497f95
15
C10.1.c
Normal file
15
C10.1.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
int main()
|
||||||
|
{
|
||||||
|
// Le mot `register` est réservé par C est ne doit pas être utilisé comme nom de variable.
|
||||||
|
int my_account, register_v = 1, amount = 0, dest, succeed = 0;
|
||||||
|
// On peut imaginer qu'ici il faut demander son compte à l'utilisateur ou le récupéréer dans un fichier de config du programme.
|
||||||
|
if(my_account == dest)
|
||||||
|
{
|
||||||
|
amount+=register_v;
|
||||||
|
succeed = 1;
|
||||||
|
}
|
||||||
|
//Values of succeed + amount
|
||||||
|
// succeed undefined (car on n'est pas rentré dans le if)
|
||||||
|
// amount 0 (car non modifié)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
28
C10.10.c
Normal file
28
C10.10.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
int x = 0;
|
||||||
|
|
||||||
|
int g()
|
||||||
|
{
|
||||||
|
return ++x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int h()
|
||||||
|
{
|
||||||
|
return x++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int f(int a, int b)
|
||||||
|
{
|
||||||
|
if(a+b == 2)
|
||||||
|
return a+x;
|
||||||
|
else
|
||||||
|
return b+x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int v = f(g(), h());
|
||||||
|
//Value of v
|
||||||
|
// v=4
|
||||||
|
// Je ne sais pas ce que le développeur voulait faire avec ce code ...
|
||||||
|
}
|
||||||
12
C10.2.c
Normal file
12
C10.2.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a = 1,b;
|
||||||
|
// L'opérateur `=` est un opérateur d'assignation (qui renvoie la valeur assigné, donc ici, 1)
|
||||||
|
// L'opérateur d'égalité est `==`
|
||||||
|
if(a==1)
|
||||||
|
b = 10;
|
||||||
|
else
|
||||||
|
b = 5;
|
||||||
|
//Value of a + b = 11 car a==1.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
12
C10.3.c
Normal file
12
C10.3.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// On ne peut nommer des variable en commencant par un chiffre.
|
||||||
|
int _x=5,y=0, _1tmp = 3;
|
||||||
|
_x++;
|
||||||
|
y = _x++;
|
||||||
|
y = ++_x; // Oubli du point-virgule
|
||||||
|
_1tmp = (y > _x);
|
||||||
|
//Value of _x, y and 1tmp
|
||||||
|
// 8, 8 et 0 (_x est incrémenté trois fois, y prend la valeur de _x après son troiséme incrémentation et 1tmp est «faux» car x==y)
|
||||||
|
}
|
||||||
18
C10.4.c
Normal file
18
C10.4.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i , j = 2, k, l = 1;
|
||||||
|
for(i = 0; i< 100; ++i)// Le point-virgule qui était ici «annule» le for.
|
||||||
|
{
|
||||||
|
int j = 0;
|
||||||
|
for(k=2*i; k > 0; k=k-2, l += 8)
|
||||||
|
{
|
||||||
|
k++;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Valeur de i, j, k, l
|
||||||
|
// i=100 car incrémenté jusqu'à ce que i<100 soit faux
|
||||||
|
// j=2 car n'a pas été modifié (c'est un autre j à l'interieur de la boucle)
|
||||||
|
// k=0 a pris sa valeur à la dernière boucle (i=99), initialisé à 198 et décrémenté de un (-2 +1) jusqu'à se que k>0 soit faux.
|
||||||
|
// l = 79201 car incrémenté de huit dès que la boucle interne faisait une itération. soit l= 1 +sum(i=0..99, 2i)*8 = 16*99*50 +1
|
||||||
|
}
|
||||||
12
C10.5.c
Normal file
12
C10.5.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
// Il manquait la directive afin de définir printf
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
while(i < 100){ // Si le bloc contient plusieurs lignes, il faut utiliser des crochets, l'indentation est «inutile» car inexistance du point de vue du compilateur.
|
||||||
|
printf("%i", i);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
//Valeur de i
|
||||||
|
// i = 100, première valeur de i telle que (i<100) soit faux.
|
||||||
|
}
|
||||||
17
C10.6.c
Normal file
17
C10.6.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
int main()
|
||||||
|
{
|
||||||
|
//new version of the code
|
||||||
|
int a=0, b= 1;
|
||||||
|
/* We modify a */
|
||||||
|
a += a+b;
|
||||||
|
|
||||||
|
//old version of the code (now commented)
|
||||||
|
/*
|
||||||
|
int a=0, b= 1;
|
||||||
|
// We modify a
|
||||||
|
a = a+b;*/
|
||||||
|
// Il n'est pas possible de faire des commentaires en bloc imbriqués, puisque la pause du préprocesseur s'arrêtera au premier */ croisé.
|
||||||
|
|
||||||
|
//Valeur de a
|
||||||
|
//a=1 (car 0 + (0+1) = 1)
|
||||||
|
}
|
||||||
18
C10.7.c
Normal file
18
C10.7.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
int x = 0;
|
||||||
|
|
||||||
|
int f(int* x)
|
||||||
|
{
|
||||||
|
return (*x)++; // Ne sert pas à grand chose, int x est passé en valeur. Il faut utiliser la référence ici.
|
||||||
|
}
|
||||||
|
|
||||||
|
void g(int b)
|
||||||
|
{
|
||||||
|
x = x+1; // Ici pas de problème puisqu'on utilise la variable globale.
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
g(f(&x));
|
||||||
|
//Value of x
|
||||||
|
// x=2 car incrémenté deux fois.
|
||||||
|
}
|
||||||
12
C10.8.c
Normal file
12
C10.8.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//Polymorphic mul
|
||||||
|
// Les noms de macro sont sensibles à la casse, donc il faut respecter une convension (ici, j'ai choisi les minuscules).
|
||||||
|
// Attention aussi, une macro, c'est idiot, il faut mieux isoler les paramètre dans des parenthèses.
|
||||||
|
#define mul(a,b) (a)*(b)
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// Ici, la macro créait la séquence «3+4*4+3» étant mal compris à cause de la précédence plus élevée du *.
|
||||||
|
int x = mul(3+4, 4+3);
|
||||||
|
//Value of x
|
||||||
|
// x=49 (des maths: (3+4)*(4+3) = 49)
|
||||||
|
}
|
||||||
28
C10.9.c
Normal file
28
C10.9.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
//Error codes
|
||||||
|
#define DIV_0 1
|
||||||
|
#define OVERFLOW 2
|
||||||
|
#define NO_ERROR 0
|
||||||
|
#define MAXI_ERROR 10
|
||||||
|
#define INTERMEDIATE_ERROR 5
|
||||||
|
|
||||||
|
int check_error(int a, /*Il faut préciser le type de chaque paramètre */ int b)
|
||||||
|
{
|
||||||
|
if(b == 0)
|
||||||
|
return DIV_0;
|
||||||
|
if(a > 100000 && b > 100000) // Double esperluette pour le et logique
|
||||||
|
return OVERFLOW;
|
||||||
|
else
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
if(check_error(1000000, 1000000) && check_error(5, 0)) // double esperluette pour le et logique
|
||||||
|
return MAXI_ERROR;
|
||||||
|
else if(check_error(1000000, 1000000))
|
||||||
|
return INTERMEDIATE_ERROR;
|
||||||
|
return NO_ERROR;
|
||||||
|
//Value returned by main
|
||||||
|
// 10 = MAXI_ERROR car les deux condition créent une erreur.
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user