Exercice langage C: Types de Variables et caractères
Rédigé par GC Team, Publié le 24 Février 2012, Mise à jour le Mardi, 30 Novembre 1999 00:00Travail à Faire:
1. Donnez une forme équivalente à l’expressionp->champ.
2. Soit la déclaration suivante,int *tab[10]. Indiquez ce qu’esttab?
3. (*2) Que vaut la variablefleuri dans le code suivant :
char fleuri = 100;
fleuri
*= 2;
Pourquoi?
4. Soit la déclaration suivante,char tab[] = "".
Que contient le tableautab
1. (*3) La fonction strcpy permet de copier une chaine de caractères dans une autre, existante.
Voici son prototype :
char *strcpy ( char *destination, char *source) ;.
Écrivez cette fonction sans utiliser de tableaux ni d’opérateurs [] (uniquement des pointeurs et des accès pointeurs).
Réponse :
char *strcpy ( char *destination, char *source) {
while (
source != ’\0’) {
destination =
source ;
destination++ ;
source++ ;
}
destination = ’\0’ ;
}
2. Soit la déclaration suivante : char mant[] = { ’a’, ’b’ }.
Que vaut mant[2] ?
Réponse : Son contenu est indéterminé.
Le tableau mant est implicitement déclaré de taille le nombre d’éléments présent dans son initialisation, donc ici 2. Il n’y a donc pas d’élément mant[2].
mant n’est pas une chaîne de caractères, car il n’a pas été initialisé avec une chaîne
("ab").
3. Dans le code suivant :
int i=0, j=0 ;
j = ++i ;
Que vaut la variable j après l’instruction d’affectation ?
Réponse : j vaudra 1.
L’expresssion ++i se lit de gauche à droite : d’abord l’incrémentation de i, puis retour de sa valeur, pour être stockée dans j. Ainsi, j vaudra 1.
4. Que vaut la variable ille dans le code suivant ?
float ille ;
ille = 2/3*100.0 ;
5Pourquoi ?
Réponse : ille vaut 0.0.
L’expression 2/3 est évaluée dans le type int, donc vaut 0.
Note. En cas d’opérateurs de même priorité, la norme du langage C ne précise pas l’ordre d’évaluation de l’expression. Pour éviter tout problème, il faut bien indiquer les types des constantes et placer des parenthèses pour éviter l’ambiguité : 2.0/(3.0*100.0) ou
(2.0/3.0)*100.0.