Informatique et Programmation Examen N°1
8 avril 2008 18h30-20h30
Nom : Prénom :
Nom de la machine : Répertoire de travail : Remarques :
Exercice 1 :
Donnez les résultats des codes suivants :
1) int a=1,b=2 ; printf("resultat1 : %d\n",a/b);
2) printf("resultat2 : %d\n",3*5+2);
3) int a=0,i; for(i=0; i<3; ++i) a=a+i; printf("resultat3 :
%d\n",a);
Exercice 2 :
Ecrire une fonction qui calcule la somme des N premiers nombres impairs. Testez-la au sein d'un petit programme.
Exercice 3 :
Ecrire un programme qui :
1) Demande un numéro de téléphone En posant une question à l’utilisateur.
2) Teste la saisie correcte du numéro
On supposera qu’une saisie correcte est une suite de chiffres suivi d'un retour à la ligne, sans autres caractères comme par exemple : 0326811665↵ mais aussi : 644674↵
3) Teste la validité du numéro
Le numéro doit être constitué de 10 chiffres et le premier chiffre doit être un 0.
4) Affiche le numéro correctement formaté.
C'est-à-dire par groupe de 2 chiffres séparés par 1 espace comme dans l’exemple suivant : 03 26 81 16 65
.
Conseils : récupérez les chiffres saisis sous forme de caractères et rangez les dans un tableau.
Remarque : En cas de mauvaise saisie ou d'invalidité du numéro, le programme devra l’indiquer à l’utilisateur et demander une nouvelle saisie.
Exercice 3 :
Le programme suivant est destiné à trier les éléments d'un tableau dans l'ordre croissant. Il ne fonctionne pas correctement. Corrigez-le.
/*************************************
Programme tri.c
*************************************/
#include <stdio.h>
#define DIM 7 int main() {
int tab[DIM]={1,5,2,7,8,7,4},i,j,min,tmp;
for(i=0; i<DIM; ++i)
printf("%d ",tab[i]); printf("\n");
for(i=0; i<DIM; ++i) { min=i;
for(j=i+1; j<DIM; ++j)
if(tab[j]<tab[min]) min=j;
tmp=tab[min];
tab[i]=tmp;
tab[min]=tab[i];
}
for(i=0; i<DIM; ++i)
printf("%d ",tab[i]); printf("\n");
}
Correction
Exercice 1 :
Voici les résultats : resultat1 : 0 resultat2 : 17 resultat3 : 3
Exercice 2 :
/*************************************
Programme impair.c
*************************************/
#include <stdio.h>
int impair(int n);
int main() { int N;
printf("Donnez la valeur de N : ");
scanf("%d",&N);
printf("La somme des %d premiers nombres impairs est %d\n",N,impair(N));
}
int impair(int n) { int i,res=0;
for(i=0; i<n; ++i) res+=2*i+1;
return res;
}
Exercice 3 :
/*************************************
Programme telephone.c
*************************************/
#include <stdio.h>
#define DIM 10 int main() {
char tab[DIM],i,j,ok;
char c;
printf("Veuillez saisir le numero de telephone : ");
do { ok=1;
i=0;
while ((c=getchar())!='\n') { if (i<DIM) tab[i]=c;
i=i+1;
}
if (i!=DIM) { ok=0;
printf("Saisie incorrecte. Le numero doit etre constitue de 10 chiffres. Recommencez.\n");
} else {
for (i=0; i<DIM; ++i)
if (tab[i]<'0' || tab[i]>'9') ok=0;
if (ok!=1)
printf("Saisie incorrecte. Le numero doit etre constitue uniquement de chiffres Recommencez.\n");
else if (tab[0]!='0') {
printf("Saisie incorrecte. Le premier chiffre doit etre un 0. Recommencez.\n");
ok=0;
} }
} while (ok!=1);
for (i=0; i<DIM; i=i+2)
printf("%c%c ",tab[i],tab[i+1]);
printf("\n");
}
Exercice 4 :
Voici le programme corrigé. Il fallait simplement inverser l'ordre des instructions : tab[i]=tmp;
tab[min]=tab[i];
/*************************************
Programme tri.c
*************************************/
#include <stdio.h>
#define DIM 7 int main() {
int tab[DIM]={1,5,2,7,8,7,4},i,j,min,tmp;
for(i=0; i<DIM; ++i)
printf("%d ",tab[i]); printf("\n");
for(i=0; i<DIM; ++i) { min=i;
for(j=i+1; j<DIM; ++j)
if(tab[j]<tab[min]) min=j;
tmp=tab[min];
tab[min]=tab[i];
tab[i]=tmp;
}
for(i=0; i<DIM; ++i)
printf("%d ",tab[i]); printf("\n");
}