EXAMEN EN LANGAGE C ( PROGRAMMATION C ) TEST  04 /XX 2022

EXAMEN + CORRIGE EN LANGAGE C

Exercice 01 : 8pts

Soit le code suivant :

void test(){

  int *ptint;

  int tab1[]={1, 2, 3, 4, 5, 6};

  int tab2[6]={23, 20, 900, 4, 5, 26};

  int *ptint1;

  int *tab3=(int *)calloc(6,sizeof(int));

  for (int p=0 ; p<=6 ; ++p) tab3[p]=p*3;

  return ;

}

Validez les instructions ou affirmations correctes et celles incorrectes avec justifications a l'appuie :

  1. ptint=tab1;
  2. ptint=&tab1;
  3. ptint=&tab1[0];
  4. ptint1=tab3;
  5. ptint1=&tab3;
  6. tab1, tab2 et tab3 sont des tableaux de 6 entiers.
  7. ++tab1;
  8. ++tab3;

Exercice 02 : 04pts

Ecrire un programme C qui lit une chaîne de caractères et vérifie si elle est palindrome ou non. On rappelle qu'une chaîne de caractères est dite palindrome, si elle se lit de la même manière dans les deux sens. Exemple: non, touot et 1234321 sont toutes des chaînes de caractères palindromes.

Exercice 03 : 03pts

Ecrire un programme C qui lit un entier puis détermine s'il est premier ou non. On rappelle qu'un entier est dit premier s'il a exactement deux diviseurs différents; 1 et lui-même.

Ex: 2, 3, 7, 17, 101 sont tous premiers, et 4, 10, 27 ne le sont pas.

Exercice 04 : 05pt

Soit un fichier nommé « c:\fichier.data » de données structuré en suite de lignes contenant
chacune un nom de personne, un nom d’article, un nombre, et un prix. Exemple :
Nkenfack Bob 17 1000
Salhi Alice 30 567
Ecrire un programme C qui permet de lire le fichier ligne par ligne et affiche sur l’écran le contenu de chaque ligne.

Correction :

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) ;
}

  • 1 vote. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam