Exercices Corrigés Langage C


Exercice 1:


adr1 et adr2 sont des pointeurs pointant sur des réels. Le contenu de adr1 vaut -45,78; le contenu de adr2 vaut 678,89.
Écrire un programme qui affiche les valeurs de adr1, adr2 et de leur contenu.


Exercice 2 :


pi est un pointeur sur un entier; pi vaut 0x5000 et son contenu vaut 300.
Ecrire le programme correspondant (programme dangereux sous WONDOWS).
L'opérateur de "cast", permet d'autre part, à des pointeurs de types différent de pointer sur la même adresse.
Exemple :


char *pc;/* pc pointe sur un objet de type caractère */ 
int *pi;/* pi pointe sur un objet de type entier */ 
pi = (int*)malloc(4) ; /* allocation dynamique pour i */ 
pc = (char*)i;/* c et i pointent sur la même adresse, c sur un caractère */


Exercice 3 :


adr_i est un pointeur de type entier; son contenu i vaut 0x12345678. A l'aide d'une conversion de type de pointeur, Ècrire un programme montrant le rangement des 4 octets en mémoire.


Exercice 4 :


Saisir un texte. Ranger les caractères en mémoire. Lire le contenu de la mémoire et y compter le nombre d'espaces et de lettres e .


Exercice 5 :


Saisir 6 entiers et les ranger à partir de l'adresse adr_deb. Rechercher le maximum, l'afficher ainsi que son adresse.
-------------------------------------------------------------------------------------------------------
Correction
-------------------------------------------------------------------------------------------------------



Exercice 1 :


#include 
#include 
#include 
void main() 

float *adr1,*adr2; 
adr1 = (float*)malloc(4); 
adr2 = (float*)malloc(4); 
*adr1 = -45.78; 
*adr2 = 678.89; 
printf("adr1 = %p adr2 = %p r1 = %f r2 = %f\n",adr1,adr2,*adr1,*adr2); 
free(adr1); 
free(adr2); 
printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE "); 
getch(); 
}
Exercice 2 :


#include 
#include 
#include 
void main() 

int *i; 
i = (int*)malloc(4); 
*i = 300; 
printf(" adresse = %p variable = %d\n",i,*i); 
free(i); 
printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE "); 
getch(); 
}
Exercice 3 :


#include 
#include 
#include 
void main() 

char *adr_c; 
int *adr_i,i=0x12345678; 
adr_i = &i; 
adr_c = (char*)adr_i; 
printf("ADRESSE: %p CONTENU: %x\n",adr_c,*adr_c); 
printf("ADRESSE: %p CONTENU: %x\n",adr_c+1,*(adr_c+1)); 
printf("ADRESSE: %p CONTENU: %x\n",adr_c+2,*(adr_c+2)); 
printf("ADRESSE: %p CONTENU: %x\n",adr_c+3,*(adr_c+3)); 
getch(); 
}


L'analyse de l'exécution en BORLANC C++, montre que les microprocesseurs INTEL rangent en mémoire d'abord les poids faibles d'une variable.
Exercice 4 :


#include 
#include 
#include 
void main() 

char *adr_deb,c; 
int i,imax,compt_e = 0,compt_sp = 0; 
adr_deb = (char*)malloc(30);/* texte d'au plus 30 caracteres */ 
/* saisie et rangement du texte */ 
printf("\nADRESSE DU TEXTE: %p (ATTRIBUEE PAR LE COMPILATEUR)",adr_deb); 
printf("\nENTRER UN TEXTE: "); 
for (i=0;((c=getchar())!='\n');i++) *(adr_deb + i) = c; 
imax = i;/* borne superieure */ 
/* lecture de la memoire et tri */ 
for (i=0;i { 
c = *(adr_deb+i); 
printf("\nCARACTERE: %c ADRESSE: %p",c,adr_deb+i); 
if (c= ='e') compt_e++; 
if (c= =' ') compt_sp++; 

/* resultats */ 
printf("\nNOMBRE DE e: %2d NOMBRE d'espaces: %2d\n",compt_e,compt_sp); 
free(adr_deb); 
printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE "); 
getch(); 
}
Exercice 5 :


#include 
#include 
#include 
void main() 

int *adr_deb,*adr_max,i,imax=6,max; 
adr_deb=(int*)malloc(4*6); 
printf("\nADRESSE DE BASE: %p (CHOISIE PAR LE PROGRAMMEUR)\n",adr_deb); 
/* saisie des nombres */ 
printf("SAISIE DES NOMBRES: \n"); 
for(i=0;i{ 
printf("ENTRER UN NOMBRE: "); 
scanf("%d",adr_deb+i); 

/* tri */ 
max = *adr_deb; 
adr_max = (int*)adr_deb; 
for(i=0;i{ 
if(*(adr_deb+i)>max) 

max = *(adr_deb+i); 
adr_max = adr_deb+i; 


/* resultats */ 
printf("LE MAXIMUM:%d SON ADRESSE:%p\n",max,adr_max); 
free(adr_deb); 
printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE"); 
getch(); 
}


    Aucun commentaire:

    Enregistrer un commentaire

    commenatires

    Les Outils Important