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 :

Documents pareils