From d8aa555d0d4a935bfe9d1d781b5008da11726bd4 Mon Sep 17 00:00:00 2001 From: Mysaa Date: Wed, 10 Nov 2021 15:30:27 +0100 Subject: [PATCH] Allez, plus qu'un peu de C ... --- C11.1.c | 11 ++++++ C11.5.c | 18 +++++++++ C11.md | 43 +++++++++++++++++++++ C12.c | 71 ++++++++++++++++++++++++++++++++++ C12.md | 23 +++++++++++ CP12.1.c | 35 +++++++++++++++++ CP12.8.c | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ CP12.md | 37 ++++++++++++++++++ 8 files changed, 354 insertions(+) create mode 100644 C11.1.c create mode 100644 C11.5.c create mode 100644 C11.md create mode 100644 C12.c create mode 100644 C12.md create mode 100644 CP12.1.c create mode 100644 CP12.8.c create mode 100644 CP12.md diff --git a/C11.1.c b/C11.1.c new file mode 100644 index 0000000..5dc7ff3 --- /dev/null +++ b/C11.1.c @@ -0,0 +1,11 @@ +#include + +int main(){ + + int x = 42; + + // Le cast déclenche un warning, et effectivement, un poiteur vers un entier et un entier représentent deux choses différentes. + printf("La variable dénotée 'x' contient la valeur %d stoquée à l'adresse %d\n",x,(int)&x); + + return 0; +} diff --git a/C11.5.c b/C11.5.c new file mode 100644 index 0000000..1d964b9 --- /dev/null +++ b/C11.5.c @@ -0,0 +1,18 @@ +#include +#include + +void swap(int* a, int* b){ + + int c = *a; + *a = *b; + *b = c; + +} + +int main(){ + int a, b, olda, oldb; + scanf("%i %i", &a, &b); + olda = a; oldb = b; + swap(&a, &b); + assert(a == oldb && b == olda); +} diff --git a/C11.md b/C11.md new file mode 100644 index 0000000..0d8bf63 --- /dev/null +++ b/C11.md @@ -0,0 +1,43 @@ +#C 11 + +### Exercice 2 +Description ligne par ligne du programme: + +1. la case mémoire 'a' prend la valeur 3 +2. la case mémoire 'p1' prend en valeur l'adresse de la case mémoire 'a' +3. la case mémoire 'b' prend la valeur stoquée dans 'a' (donc 3) +4. la case mémoire 'p2' prend en valeur l'adresse de la case mémoire 'b' (différente de celle de 'a') +5. la case mémoire 'a' prend la valeur 5 +6. la valeur stoquée dans la case mémoire dont l'adresse est stoquée en case 'p1' (donc 'a') est incrémentée (passe de 5 à 6) +7. la case mémoire 'b' prend la valeur 8 +8. la case mémoire dont l'adresse est stoquée en 'p2' (donc 'b') prend la valeur 12. +9. la case mémoire 'p1' prend pour valeur l'adresse stoquée dans la case mémoire 'p2' (donc l'adresse de 'b') +10. la case mémoire dont l'adresse est stoquée en 'p1' (donc 'b' maintenant) prend la valeur 15. + +État final: p1=p2=&b et a=6 et b=15 + +### Exercice 3 +Ce programme produit des *warnings* à la compilation sur des erreurs de cast. En effet, un pointeur vers un flottant (&x) essaye de rentrer dans un pointeur vers un flottant, ce qui a techinquement la même taille, mais qui exprime souvent une erreur de conception. + +Sinon, le programme affiche l'entier représenté par la suite de bits corerspondant à la représentaton en binaire du flotant 2.4. En l'ocurence `1075419546`. + +### Exercice 4 + +Description ligne par ligne du programme: + +1. Une case 'a' est réservée à un entier. +2. L'adresse de 'a' est stoquée dans une autre case mémoire 'addr' +3. Une nouvelle case memoire est créee pour y stoquer le resultat de l'appel à la fonction + +f +0. Le paramètre est passée en valeur. Ce qui signifie que x contient la valeur qui lui a été donnée en paramètre, donc l'adresse de la case mémoire 'a'. +1. La valeur contenue dans la case mémoire dont l'adresse est stoquée dans la case mémoire 'x' est définie à 0. +2. La case mémoire 'x' est définie à 0 (ne pointe plus vers aucune case mémoire) (le pointeur NULL). +3. Renvoie la valeur présente dans la case mémoire 'x'. + +Donc a=0, addr=&a, addr2=NULL. + +### Exercice 6 + +`scanf` prend des pointeurs afin de pouvoir «retourner» plusieurs valeurs. Avec des valeurs, on aurait accès qu'à la valeur de retour de scanf, pas très utile. + diff --git a/C12.c b/C12.c new file mode 100644 index 0000000..e9e9cc3 --- /dev/null +++ b/C12.c @@ -0,0 +1,71 @@ + +#include +#include +#include + +#define N 5 +#define NumLength (10+4+1) +#define IntLength (8) + +typedef struct personne personne; +struct personne{ + int age; + char* initiales; + char* num; +}; + +void description(personne* p){ + + printf("%s, agé de %d ans est joignable au %s \n",p->initiales, p->age, p->num); + +} + +void demander(personne* p){ + + int age; + char initiales[IntLength]; + char num[NumLength]; + + printf("Création d'une nouvelle personne : \n"); + printf("Initiales : "); + scanf("%s", initiales); + printf("Âge : "); + scanf("%d", &age); + printf("Numéro de téléphone : "); + scanf("%s", num); + + p->initiales = initiales; + p->age = age; + p->num = num; + +} + +int lesmeme(personne* p1, personne* p2){ + + return (p1->age==p2->age) && (strcmp(p1->initiales, p2->initiales)==0) && (strcmp(p1->num, p2->num)==0); + +} + + +int main(){ + + personne persos[N]; + + for(int i=0;i +#include + + +int main(){ + + int n; + + printf("Nombre de valeurs : "); + scanf("%d", &n); + + int* vals = (int*)malloc(n*sizeof(int)); + + for(int i=0;i +#include + +int** zerosMat(int h, int w){ + int** arr = (int**)malloc(h*sizeof(int*)+1); + if(arr==NULL)return NULL; + + for(int i=0;i