ARNAUD Gabriel DEL NERO Alexis rapport T. GRANDPIERRE 07
Transcription
ARNAUD Gabriel DEL NERO Alexis rapport T. GRANDPIERRE 07
ARNAUD Gabriel DEL NERO Alexis TPC1 rapport T. GRANDPIERRE 07-12-2012 Exercice 1 : Premier programme Le programme bonjour.c doit afficher « Bonjour à tous » quand il est exécuté. Code source : #include <stdio.h> int main(){ printf(« Bonjour à tous \n») ; return 0 ; } Question 1 : La commande -Wall active les avertissements si le code comporte des choix discutables, « à risque » (ex : stockage d'un chart dans un int), et peut donc contenir des erreurs facilement repérables. Exécution du code : Exercice 2: Les types de base Le programme AfficheTaille.c doit • déclarer des variables de chacun des types du C • initilaliser ces variables avec des valeurs arbitraires (≠0) • afficher le contenu de chacune de ces variables • afficher la taille en octet de chaque variable Code source : #include <stdio.h> int main(){ int a = 10000; short b = 2; long c = 450523; long long d = 875857874; float e = 3.14; double f = 1.3256789; char g = 65; printf("a = %d, b = %d, c = %ld, d = %Ld, e = %f, f = %lf, g = %c\n a = %d octets, b = %d octets, c = %d octets, d = %d octets, e = %d octets, f = %d octets, g = %d octets\n ", a, b, c, d, e, f, g, sizeof(a), sizeof(b), sizeof(c), sizeof(d), sizeof(e), sizeof(f), sizeof(g)); return 0; } Exécution du code : Question 2-a : Les variables déclarées avant la fonction main seront globales, utilisables dans tout le code, contrairement aux variables locales, déclarées dans une méthode. Question 2-b : Tailles des différents types: Type Taille (bits) char Valeurs extrêmes min/max signed unsigned 8 -127 / +127 0 / 255 int & short 16 -32 767 / +32 767 0 / 65 535 long 32 -2 147 483 647 / +2 147 483 647 0 / 4 294 967 295 long long 64 -9 223 372 036 854 775 807 / + 9 223 372 036 854 775 807 0/ 18 446 744 073 709 551 615 Exercice 3: Tableaux et chaînes de caractères Le programme chainecarac.c doit • créer une variable flottante égale à 12345.6789 • créer un tableau de 8 entiers codé sur un octet sans l'initialiser, puis stocker le code ASCII des caractères 'B','o','n','j','o','u','r',' !' dans chaque case une à une (tab[0]= …) • ensuite, pour chaque case, afficher la valeur entière qu'elle contient sous la forme décimale et sous forme d'un caractère ASCII • essayer d'afficher tout le tableau comme une chaîne de caractères Code source : #include <stdio.h> int main(){ double a = 12345.6789; char tab[8]; tab[0] = 'B'; tab[1] = 'o'; tab[2] = 'n'; tab[3] = 'j'; tab[4] = 'o'; tab[5] = 'u'; tab[6] = 'r'; tab[7] = '!'; int i; for (i = 0; i<8 ; i++) { printf("tab%d = %d & tab%d = %c\n", i, tab[i], i, tab[i]); } printf("tab = %s\n", tab); return 0; } Exécution du code : Question 3-a : Diagramme d'allocation mémoire : i 0 tab[7] '!' tab[6] 'r' tab[5] 'u' tab[4] 'o' tab[3] 'j' tab[2] 'n' tab1[] 'o' tab[0] 'B' a 12345.67 89 Question 3-b : La fonction%s lit le tableau à partir de tab[0], mais continue de lire les autres cases mémoires après. Il faut rajouter ''\0'' en fin de tableau pour arrêter le traitement des cases mémoires par %s. Question 3-c : Code du nouveau programme fonctionnel : #include <stdio.h> int main(){ double a = 12345.6789; char tab[] = "Bonjour\0"; printf("tab = %s & tab = %d\n", tab, sizeof(tab)); return 0; } Exécution du code: Exercice 4: Opérateur bit à bit Le programme bitabit.c doit • créer une variable entière x non signée, codée sur 16 bits, initialisée avec la valeur binaire 0000 1110 0010 1100 = 0x0E2C • créer une variable entière masque1 non signée codée sur 16 bits, initialisée avec la valeur binaire 1111111100000000 = 0xFF00. Elle servira à extraire la partie de poids faible de x • créer une variable entière masque2 initialisée de façon à ce qu'elle permette d'extraire les 8 bits de poids faible de x. On l'initialisera donc à 0x00FF • Dans une variable poidsfort, stocker la partie haute de x. • Dans une variable poidsfaible, stocker la partie basse de x. • Afficher poidsfort et poidsfaible à la fois sous forme décimale et hexadécimale. Code source : #include <stdio.h> int main(){ unsigned int x = 0x0E2C; unsigned int masque1 = 0xFF00; unsigned int masque2 = 0x00FF; unsigned int poidsfort = masque1 & x; unsigned int poidsfaible = masque2 & x; printf("poidfort = %d, poidfort hexa = %x, poidfaible = %d, poidfaible hexa = %x\n", poidsfort, poidsfort, poidsfaible, poidsfaible); return 0; } Exécution du code : Question 4 : Il n'est pas possible d'afficher le contenu d'une variable sous forme binaire directement avec printf. Exercice 5: Factorielle Le programme factorielle.c calcule la factorielle d'une variable entière x puis l'affiche. On essaie avec x variant de 0 à 4 :