Exercice langage C: Programmes différents

1.

(*2) Donnez l’expression C permettant de calculeri=i?2n.

2.

Soit la déclaration suivante :char les[] = "ab".

Que vautles[2]?

3.

Soitge, un tableau de 10 caractères. Donnez l’instruction permettant de saisir au clavier une chaîne de caractères, sans utiliser le caractère’&’.

4.

(*2) Soit le code suivant :

int i=0, tab[10], n=27;

do {

tab[i++] = n % 10;

} while ((n /= 10) > 10);

Que contient le tableautab en ?n de programme?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
9. (*2) Soit le code suivant :
void g(int *p) {
*p = 12 ;
}
int main() {
int *p ;
g(p) ;
printf("%d\n", *p) ;
}
Qu’est ce qui s’af?che ?
Réponse : L’af?chage est indéterminé ou erreur d’exécution.
Le pointeur p dé?ni dans la fonction main n’est pas initialisé. Comme il s’agit d’une
variable locale, son contenu est indéterminé.
L’expression g(p), puis, dans la fonction g, pp = 12, sont donc erronées. Avec de la
chance, il y aura une erreur à l’exécution (segmentation error), ou pire, un écrasement
mémoire.
10. Que vaut la variable j à la ?n de la fonction f ?
void f(int i) {
int j ;
j = i ;
}
Réponse : Son contenu est indéterminé.
j est un pointeur, qui n’est pas initialisé. Comme il s’agit d’une variable locale, son contenu est indéterminé.
L’expression j est donc erronée. Avec de la chance, il y aura une erreur à l’exécution
(segmentation error), ou pire, un écrasement mémoire.
11. (*2) Que vaut la variable fleuri dans le code suivant :
char fleuri = 100 ;
fleuri *= 2 ;
Pourquoi ?
Réponse : fleuri vaut -56.
Le type char est signé. Sa plage de valeurs est de -128 à 127 (de 2
n1
à 2
n1  1),
n est le nombre de bits du type, ici 8. Concernant les nombres signés, pour un nombre
ositif donné, nous avons la formule suivante : a  2
n = (a). Ici, pour fleuri égal à
200, le nombre négatif correspondant est donc -56.