Exercice langage C: Types de Variables et caractères

Travail à 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.

Article publié le 24 Février 2012 par GC Team