Académique Documents
Professionnel Documents
Culture Documents
Exercices
(Vous pouvez faire plusieurs questions, d’autres une fois la matière vue)
1) Pour chaque déclaration ou instructions suivantes, écrivez avec précision et clarté comment elles doivent
être lues pour bien les interpréter. Donc je vous demande d’écrire ce qu’elles signifient comme si vous les
lisiez à voix haute.
Par et Par
3) Vous avez le nombre suivant en virgule flottante 843.875 donnez-moi sa représentation sous la norme IEEE
754 en simple précision sur 32 bits. Exprimez le résultat en hexadécimal. Élaborez votre calcul le plus
clairement possible.
4) Vous avez le code hexadécimal sur 32 bits (0x42a4C000) représentant un nombre en virgule flottante.
Donnez-moi sa représentation en virgule flottante en suivant la norme IEEE 754 en simple précision.
Élaborez votre calcul le plus clairement possible.
a) Écrivez l’instruction en langage C qui fera en sorte de mettre la valeur 456 dans le 8e élément du 3e
tableau de « transport ».
b) Écrivez l’instruction en langage C qui permettra de déclarer un pointeur nommé « ptr » qui pointera
sur ce type de tableau.
int main(){
char code_secret[8] = {"9tkmwnv"};
char code_reel[8]={0};
int i;
decodage(code_secret,code_reel);
printf("Le code secret est : %s\n",code_secret);
printf("Le code reel est : %s\n",code_reel);
return 0;
}
//-----------------------------------------------------------------------
void decodage(char *code_source,char *code_rep){
while(*(code_source+2)){
*code_rep = *code_source + *(code_source+1) - *(code_source+2);
code_rep++;
code_source++;
}
}
//-----------------------------------------------------------------------
main(void){
int volt[] = {170,-347,820,340,400};
int *nombre;
double rep;
nombre = &volt[2];
rep = traduction(nombre);
printf("La reponse est : %.1f volts\n",rep);
}
/*----------------------------------------------------------------------*/
/* fonction « traduction » qui effectue un calcul */
/*----------------------------------------------------------------------*/
_________ traduction(______________________ ){
return *valeur/1.4142;
}
/*----------------------------------------------------------------------*/
a) En vous référant à ce qui est écrit dans le programme, complétez les espaces soulignés afin que la
déclaration de la fonction « traduction » soit cohérente avec le fonctionnement du programme.
8) Je vous présente une « struct » et une « union » ayant les mêmes éléments. Dites quel espace mémoire en
octets vont occuper chacune d’elles (vous êtes sur un PC). Donnez une brève explication de vos réponses
avec vos calculs.
struct Donnees{ union Donnees{
unsigned int tab[7]; unsigned int tab[6];
struct{ struct{
unsigned int trigger; unsigned int trigger;
unsigned int frequence; unsigned int frequence;
unsigned char seuil; unsigned char seuil;
unsigned char offset; unsigned char offset;
float periode; float periode;
}signal; }signal;
}; };
Rep : Rep :
#include <stdio.h>
#include <stdlib.h>
longueur = sizeof(valeur)/sizeof(int);
conversion(valeur,longueur);
while(longueur--){
printf("Le nombre %d est : %d\n",i+1,valeur[i]);
i++;
}
}
/*-----------------------------------------------------------------*/
void conversion(int *tab,int taille){
int i=0;
int modif[]= {10,45,-18,32};
while(taille--){
*tab += modif[i++ % 4];
tab++;
}
}
e) Dans une « union » on peut y définir des éléments ayant des types différents
11) En vous référant à ce petit programme, qu’est-ce qui apparaîtra à l’écran suite à son exécution. Respectez
rigoureusement ce que les printf() vont imprimer, espace, changement de ligne etc…
#include <stdio.h>
#include <stdlib.h>
int main(){
char text[22] = {"AVE ANDRE TOUCHETTE "};
char nouveau[22] = {0};
char chiffre[] = {9,9,-17,12,3,-4,-7,3,-2,1,-7,11,6,-3,1,4,-9,-8,1,1};
char *plettre;
char *temp;
char *new_text;
plettre = text;
new_text = nouveau;
temp = chiffre;
while(*plettre){
*(new_text += *temp++) = *plettre++;
}
new_text = nouveau;
printf("Le nouveau text est : %s\n",new_text);
return 0;
}
12) Montrez exactement ce que les printf afficheront suite à l’exécution du programme :
#include <stdio.h>
#include <stdlib.h>
main(){
char nom[4][8] = {{"NYQUIST"},{"NEWTON"},{"SHANNON"},{"EULER"}};
char (*ptr)[8];
ptr = &nom[2];
printf("La lettre mystere est :%c \n",(*ptr)[2]);
printf("Les lettres mysteres sont :%s \n",ptr[1]);
ptr = &nom[1][3];
printf("La lettre mystere est :%c \n",(*ptr)[0]);
ptr = &nom[0][2];
printf("Les lettres mysteres sont :%s",ptr);
}
13) Suite à l'exécution du programme suivant, que verra-t-on s’afficher exactement à l’écran ?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
union Donnees{
unsigned int complet :32;
struct{
unsigned int trigger :6;
unsigned int secteur :12;
unsigned int balise :5;
unsigned int position :9
}Participant;
};
void main(){
char i;
union Donnees Test,Autre,Divers;
ptr = tab[0];
ptr->complet = 0x87654321;
ptr = tab[1];
ptr->complet = 0x54879865;
ptr = tab[2];
ptr->complet = 0x32659887;
for(i=0;i<3;i++){
ptr = tab[i];
printf("complet : %x\n",ptr->complet);
printf("trigger : %x\n",ptr->Participant.trigger);
printf("secteur : %x\n",ptr->Participant.secteur);
printf("balise : %x\n",ptr->Participant.balise);
printf("position : %x\n\n",ptr->Participant.position);
}
}
14) Ce programme utilise un pointeur sur un tableau de « int », analysez son fonctionnement et dites ce qui
sera alors imprimé à l’écran. Supposez que l’adresse du tableau rep1 est 292468.
#include <stdio.h>
#include <stdlib.h>
void main(){
ptr = rep1;
printf("Le pointeur ptr pointe a l'adresse : %d\n",ptr);
ptr += i;
printf("Le pointeur ptr pointe maintenant a l'adresse : %d\n",ptr);
printf("Le reponse est : %d\n",*ptr);
ptr = &rep1[4];
printf("Le pointeur ptr vaut : %d\n",ptr);
printf("Le reponse est : %d\n",*ptr);
ptr = rep1;
printf("Le reponse est : %d\n",*(ptr+2));
printf("Le reponse est : %d\n",(*ptr)+10);
}
15) Le programme suivant vous demande d'entrer les informations concernant vos fournisseurs. Sur certaines
lignes les instructions sont incomplètes. Selon les questions placées à la suite du programme, complétez ce
qui manque.
struct Fournisseurs {
char nom[30];
char ville[40];
float emprunt;
};
int main(){
int i;
struct Fournisseurs Supplier[3];
for(i=0;i<3;i++){
printf("\nQuel est le nom du fournisseur %d : " ,i+1);
scanf("% ", );
scanf("% ", );
scanf("% ", );
}
impression_four( );
return 0;
}
/******************************************************************/
void impression_four(struct Fournisseurs *cie){
}
/******************************************************************/
b) Dans la boucle " for" du programme, il y a 3 scanf qui sont incomplets. Inscrivez ce qui manque sur les
lignes en pointillé afin que la réponse à la question posée par le printf associé soit mise dans le bon
élément de la structure visée. Écrivez votre réponse sur le programme pour chaque scanf. Attention sur
chaque ligne il y a 2 réponses à donner.
c) La ligne impression_four( );
Fait appel à la fonction d'impression d'un fournisseur, supposons que je désire faire imprimer les infos
en rapport avec le fournisseur numéro 2 (le 2e en ordre réel), complétez correctement le paramètre qui
manque afin de transmettre ce que la fonction s'attend d'avoir. Écrivez votre réponse dans le
programme à cette même ligne.