Vous êtes sur la page 1sur 9

243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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.

a) void ajout(int *nombre); : Je déclare une

b) char *valeur; : Je déclare une

c) int * calcul (int chiffre); : Je déclare une

d) double *coord[10]; : Je déclare un

e) char (*mot)[6]; : Je déclare un

2) Nommez deux façons de passer des paramètres à une fonction.

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.

Code binaire du nombre : 0x42a4C000

André Touchette Page 1/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

5) J’ai un tableau à 2 dimensions déclaré comme suit : int transport[3][10];

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.

c) Écrivez l’instruction en langage C qui placera l’adresse du 6e élément du 2e tableau du tableau


« transport » dans le pointeur « ptr ».

6) Quel est le résultat à l’écran suite à l’exécution du programme


#include <stdio.h>
#include <stdlib.h>

void decodage(char *code_source,char *code_rep);

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++;
}
}
//-----------------------------------------------------------------------

Réponse des printf dans l’encadré :

André Touchette Page 2/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

7) Analysez attentivement le programme et complétez les questions suivantes.


#include <stdio.h>
#include <stdlib.h>

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.

b) Inscrivez maintenant le résultat de l’impression du printf() suite à l’exécution 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 :

André Touchette Page 3/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

9) Suite à l'exécution du programme suivant, que verra-t-on s’afficher exactement à l’écran ?

#include <stdio.h>
#include <stdlib.h>

void conversion(int *tab, int taille);


void main(void){
int longueur, i=0 ;
int valeur[] = {-25,60,120,-403,540,321,46};

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++;
}
}

10) Inscrivez V (vrai) ou F (faux) à gauche de chaque affirmation

a) Un pointeur sur un float occupe 4 octets en mémoire.

b) Un tableau de 4 pointeurs sur des char occupe 32 octets en mémoire.

c) L’instruction de pré-compilation #define permet de déclarer des constantes dans le programme


qui pourront être modifiées plus loin dans le programme.

d) Une fonction peut retourner un pointeur.

e) Dans une « union » on peut y définir des éléments ayant des types différents

f) Une struct se définie de la même manière qu’une union

André Touchette Page 4/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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;

printf("Le text est : %s\n\n",plettre);

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);
}

André Touchette Page 5/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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;

union Donnees *tab[3] = {&Test,&Autre,&Divers};


union Donnees *ptr;

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);
}
}

André Touchette Page 6/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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(){

int rep1[] = {12,35,64,120,150,10,200};


int *ptr;
int i = 3;

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);
}

André Touchette Page 7/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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;
};

void impression_four(struct Fournisseurs *cie);

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("% ", );

printf("De quelle ville : ");

scanf("% ", );

printf("Combien leur devez-vous : ");

scanf("% ", );
}

impression_four( );

return 0;
}

/******************************************************************/
void impression_four(struct Fournisseurs *cie){

printf("\n\n Le fournisseur : % ", );

printf("\n De:% " , );

printf("\n Vous doit un montant de: % $" , );

}
/******************************************************************/

a) Pour la ligne suivante : struct Fournisseurs Supplier[3];


Dites ce que fait cette instruction.

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.

André Touchette Page 8/9


243-616-EM Intégration de systèmes Cégep Édouard-Montpetit

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.

d) Dans la fonction d'impression impression_four( ); il y a


3 instructions qui affichent à l'écran les infos concernant le fournisseur sélectionné. Complétez chaque
printf afin d'obtenir le contenu de chaque élément du fournisseur. Écrivez votre réponse sur le
programme. Attention sur chaque ligne il y a 2 réponses à donner. De plus pour le 3e printf, je veux que
le montant qui est dû s’affiche avec seulement 2 chiffres après le point.

André Touchette Page 9/9

Vous aimerez peut-être aussi