Exercice 01 :
1) Valide , ptint=tab1;
Nous savons que le nom d'un tableau donne accès à l'adresse de la zone occupée par le tableau. Cette instruction est donc correcte.
2) inValide, ptint=&tab1;
tab1 est un tableau de taille fixe, réservé au moment de la compilation. L'utilisation du nom donne accès à l'adresse de la zone réservée. Demander l'adresse de cette adresse par l'emploi de l'opérateur n'a pas de sens, car cette valeur est une constante adresse.
L'utilisation de l'opérateur & n'a pas de signification. Dans ce cas, le compilateur gcc signale cette utilisation inadéquate et l'ignore. C'est pourquoi une telle instruction ne provoque pas l'arrêt de la compilation.
3)valide, ptint=&tab1[0];
Cette instruction permet d'affecter à ptint l'adresse du 1er élément du tableau.
Elle est équivalent à ptint=&tab1
.
4) valide, ptint1=tab3;
Affectation simple entre 2 pointeurs de même type.
5) invalide, ptint1=&tab3;
tab3 est un pointeur sur un entier. &tab3 est donc l'adresse d'un tableau d'entiers. Le type de cette donnée est int **. Les types des opérandes de l'affectation sont différents et aucune conversion implicite n'est possible. C'est une erreur !
6) tab1, tab2 et tab3 sont des tableaux de 6 entiers.
Valide, tab1 et tab2 sont des tableaux et, à ce titre, leurs adresses sont des constantes. tab3 est un pointeur sur un entier qui peut être modifié. Il existe une conversion implicite entre pointeur et tableau permettant d'utiliser l'opérateur [ ] sur un pointeur.
7)++tab1;
non valide, tab1 est un tableau. Le nom peut être utilisé pour l'application de l'opérateur [ ] ou dans une expression adresse. Une expression ne peut être incrémentée.
8) valide, ++tab3;
tab3 est une variable pointeur qui peut être incrémentée.
Exercice 02 :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
int i,j,ok;
printf("Donnez une chaine de caracteres:\n");
scanf("%s",s);
ok=1;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{
if(s[i]!=s[j])
{
ok=0;
break;
}
}
if(ok==1) printf("%s est palindrome.\n",s);
else printf("%s n'est pas palindrome.\n",s);
system("pause");
return 0;
}
Exercice 03 :
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p,i,pr;
printf("Donnez un entier:\n");
scanf("%d",&p);
if(p==0 || p==1) printf("%d n'est pas premier.\n",p);
else
{
pr=1;
for(i=2;i<p;i++)
{
if(p%i==0) {pr=0; break; }
}
if(pr==1) printf("%d est premier.\n",p);
else printf("%d n'est pas premier.\n",p);
}
system("pause");
return 0;
}
|
Exercice 04 :
#include <stdio.h>
Void main()
{
FILE * Fcommandes ; char cNom [80] ; char cArticle [80] ; int iNombre, iPrix ;
Fcommandes = fopen ( ̋fichier.data ̋, ̋r ̋ ) ;
if (Fcommandes==Null)
printf( ̋ Impossible d’ouvrir le fichier ̋) ;
else{
while (fscanf(Fcommandes, ̋ %s%s%d%d ̋, cNom, cArticle, &iNombre, &iPrix) !=EOF)
printf ( ̋ %s%s%d%d\n ̋, cNom, cArticle, iNombre, iPrix) ;
}
fclose (Fcommandes) ;
}