Ecole Nationale des Sciences Appliquées, Campus Universitaire, B.P 242, Kénitra-Maroc
Tél : (+212) 5 37 32 92 46 Fax : (+212) 5 37 32 92 47
Série N° 1
Module : langage de programmation C
Exercice 1 :
Ecrire un programme qui permet de saisir 3 notes d'un étudiant dans 3 matières, étant donnés
les coefficients respectifs 3, 2 et 1, et de calculer sa moyenne générale.
Exercice 2 :
Ecrire un programme qui permet de permuter les valeurs de A et B sans utiliser de variable
auxiliaire.
Exercice 3 :
Ecrire un programme qui permet de saisir un nombre réel puis de déterminer s'il appartient à
un intervalle donné, sachant que les extrémités de l'intervalle sont fixées par l'utilisateur.
Exercice 4 :
Exercice 5 :
Ecrire un programme qui permet de saisir les trois paramètres d'une équation de second degré,
et de discuter les solutions selon les valeurs de a, b et c.
Exercice 6 :
Ecrire un programme qui lit un nombre N entier et qui affiche la somme et le produit de 1 à
N:
1. En utilisant while,
3. En utilisant for.
//********* Solution exercice 1 série 1************
//un programme qui calcule la moyenne générale d'un étudiant
// déclaration des préprocesseurs
#include<stdio.h>
#include<conio.h>
#define C_math 3
#define C_physique 2
#define C_francais 1
// programme principal
main()
{
float math,physique,francais, moyenne;
printf("donner la note de l'etudiant en Math:\n");
scanf("%f",&math);
printf("donner la note de l'etudiant en Physique:\n");
scanf("%f",&physique);
printf("donner la note de l'etudiant en Francais:\n");
scanf("%f",&francais);
// calcul de la moyenne
moyenne=
(math*C_math+physique*C_physique+francais*C_francais)/(C_math+C_physique+C_franca
is);
printf("la moyenne de l'etudiant est %f",moyenne);
getch();
}
#include<stdio.h>
#include<conio.h>
// programme principal
main()
{
int A,B;
printf(" donnez la valeur de A:\n");
scanf("%d",&A);
printf(" donnez la valeur de B:\n");
scanf("%d",&B);
printf(" Avant permutation A=%d et B=%d\n",A,B);
// traitement de permutation
A=A+B;
B=A-B;
A=A-B;
printf(" apres permutation A=%d et B=%d\n",A,B);
getch();
}
#include<stdio.h>
#include<conio.h>
// programme principal
main()
{
float A,max,min;
printf(" donnez la borne superieure de votre intervalle:\n");
scanf("%f",&max);
printf(" donnez la borne inferieure de votre intervalle :\n");
scanf("%f",&min);
printf(" l'intervalle choisi est: [%f,%f]\n",min,max);
printf("donnez un nombre reel:\n");
scanf("%f",&A);
if(A>=min && A<=max)
printf(" le nombre reel %f appartient a l'intervalle [%f,%f]\n",A,min,max);
else
printf(" le nombre reel %f n'appartient pas a l'intervalle [%f,%f]\n",A,min,max);
getch();
}
// programme principal
main()
{
int x;
printf(" donnez le numéro de la couleur de l'arc-en-ciel que vous voulez afficher:\n");
scanf("%d",&x);
switch(x)
{
case 1 : printf("\n le numero saisi correspond a la couleur Rouge.");break;
case 2 : printf("\n le numero saisi correspond a la couleur Orange.");break;
case 3 : printf("\n le numero saisi correspond a la couleur Jaune.");//break;
case 4 : printf("\n le numero saisi correspond a la couleur Vert.");//break;
case 5 : printf("\n le numero saisi correspond a la couleur Bleu.");//break;
case 6 : printf("\n le numero saisi correspond a la couleur Indigo.");//break;
case 7 : printf("\n le numero saisi correspond a la couleur Violet.");//break;
default:printf("\n le numero saisi ne correspond a aucune couleur.");
}
getch();
}
#include<stdio.h>
#include<conio.h>
#include<math.h>
// programme principal
main()
{
int a,b,c;
float sol,sol1,sol2,delta,rac_delta;
printf(" ce programme va vous permettre de discuter les solution d'une equation de second
degre\n");
printf(" \n a*x^2+b*x+c \n");
printf("\n donnez la valeur de a:");
scanf("%d",&a);
printf("\n donnez la valeur de b:");
scanf("%d",&b);
printf("\n donnez la valeur de c:");
scanf("%d",&c);
printf(" \n l'equation a resoudre est: %d*x^2+%d*x+%d\n",a,b,c);
Ecrire un programme qui lit la dimension N d'un tableau T du type entier, remplit le tableau
par des valeurs entrées au clavier. Copiez ensuite toutes les valeurs strictement positives dans
un deuxième tableau et toutes les valeurs négatives dans un troisième tableau. Afficher les
trois tableaux.
Exercice 2 :
Ecrire un programme qui transforme un nombre décimal saisi au clavier en binaire. Exemple
(10)10= (1010)2.
Exercice 3 :
Ecrire un programme qui lit la dimension N d'un tableau T du type entier, remplit le tableau
par des valeurs entrées au clavier.
Exercice 4 :
Ecrire un programme qui met à zéro les éléments de la diagonale principale d'une matrice
carrée A.
Exercice 5 :
Exercice 6 :
main()
{
int i=0, T[100],N,j;
printf("donnez le nombre a transformer en binaire:\n");
scanf("%d",&N);
while (N!=0)
{
T[i]=N%2;
N=N/2;
i++;
}
printf("la transformation de %d en binaire est:\n",N);
for(j=i-1;j>=0;j--)
printf("%d\t",T[j]);
getch();
}
//********* Solution exercice 3 série 2************
#include"stdio.h"
#include"conio.h"
main()
{
int T[100],N,X,i,j,P;
char C;
printf("donnez le nombre des elements du tableau:\n");
scanf("%d",&N);
printf("saisis les elements du tableau:\n");
for(j=0;j<N;j++)
scanf("%d",&T[j]);
printf("affichage des elements du tableau avant le tri:\n");
for(j=0;j<N;j++)
printf("%d\t",T[j]);
printf("\n");
// tri a bulle
i=N;
while (i>=0)
{
for(j=0;j<i;j++)
{
if (T[j]>T[j+1])
{
P=T[j];
T[j]=T[j+1];
T[j+1]=P;
}
}
i--;
}
printf("affichage des elements du tableau apres le tri:\n");
for(j=0;j<N;j++)
printf("%d\t",T[j]);
// recherche d'une valeur dans le tableau
printf("\n voulez-vous rechercher une valeur dans le tableau:\n");
printf("oui: tapez O\t non:tapez N \n");
getchar();
scanf("%C",&C);
//C=getch();
printf("C=%c",C);
if( C=='O')
{
printf("\n donnez la valeur rechercher:");
scanf("%d",&X);
i=0;
while(X!=T[i] && i<N)
{
i++;
}
if(i>=N)
printf("la valeur de %d ne se trouve pas dans ce tableau\n",X);
else
printf("la valeur de %d se trouve a la position %d\n",X,i+1);
}
else
printf(" au revoir\n");
getch();
}
//********* Solution exercice 4 série 2************
#include<stdio.h>
#include<conio.h>
main()
{
int A[10][10],i,j,L,C;
printf("donnez le nombre de ligne:");
scanf("%d",&L);
printf("donnez le nombre de colonne:");
scanf("%d",&C);
printf("saisis les elements de la matrice A:\n");
for(i=0;i<L;i++)
for(j=0;j<C;j++)
scanf("%d",&A[i][j]);
printf(" avant traitement la matrice A est:\n");
for(i=0;i<L;i++)
{
for(j=0;j<C;j++)
printf("%d\t",A[i][j]);
printf("\n");
}
// Le programme qui met a zero les elements de la diagonale
for(i=0;i<L;i++)
for(j=0;j<C;j++)
if(i==j)
A[i][j]=0;
printf(" apres traitement la matrice A est:\n");
for(i=0;i<L;i++)
{
for(j=0;j<C;j++)
printf("%d\t",A[i][j]);
printf("\n");
}
getch();
}
//********* Solution exercice 5 série 2************
#include<stdio.h>
#include<conio.h>
main()
{
int A[10][10],B[10][10],R[10][10];
int i,j,L,C,N,P,k;
printf("donnez le nombre de ligne de la matrice A:");
scanf("%d",&L);
printf("donnez le nombre de colonne de la matrice A:");
scanf("%d",&C);
printf("saisis les elements de la matrice A:\n");
for(i=0;i<L;i++)
for(j=0;j<C;j++)
scanf("%d",&A[i][j]);
printf(" avant traitement la matrice A est:\n");
for(i=0;i<L;i++)
{
for(j=0;j<C;j++)
printf("%d\t",A[i][j]);
printf("\n");
}
//______________________________________
printf("donnez le nombre de ligne de la matrice B:");
scanf("%d",&N);
printf("donnez le nombre de colonne de la matrice B:");
scanf("%d",&P);
printf("saisis les elements de la matrice B:\n");
for(i=0;i<N;i++)
for(j=0;j<P;j++)
scanf("%d",&B[i][j]);
printf(" avant traitement la matrice B est:\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
printf("%d\t",B[i][j]);
printf("\n");
}
// Le programme qui calcule le produit de deux matrice
if(C==N)
{
for(i=0;i<L;i++)
for(j=0;j<C;j++)
{
R[i][j]=0;
for(k=0;k<C;k++)
R[i][j]+=A[i][k]*B[k][j] ;
}
Exercice 1 :
Ecrire un programme qui lit la dimension N d'un tableau T du type entier, remplit le tableau
par des valeurs entières triées par ordre croissant entrées au clavier. Ensuite, insérer une
valeur donnée au clavier dans le tableau T de manière à obtenir un tableau de valeurs triées.
Utiliser le formalisme pointeur.
Exercice 2 :
Ecrire un programme qui lit la dimension N d'un tableau T du type entier, remplit le tableau
par des valeurs entrées au clavier. Ensuite, effacer une valeur donnée au clavier dans le
tableau T et tasser les éléments restants. Utiliser le formalisme pointeur.
Exercice 3 :
Ecrire un programme qui lit Les notes de N élèves d'une classe dans un devoir et les
mémorise dans un tableau. Puis, en utilisant le formalisme pointeur, rechercher et afficher:
La note maximale,
La note minimale,
Exercice 4 :
Ecrire un programme qui construit et affiche une matrice carrée unitaire de dimensions
entrées au clavier. Utiliser le formalisme pointeur.
Exercice 5 :
getch();
}
//********* Solution exercice 4 série 3************
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int **T,i,j,N,M;
printf("donnez le nombre de ligne:\n");
scanf("%d",&N);
printf("donnez le nombre de colonne:\n");
scanf("%d",&M);
// allocation dynamique de la mémoire
T=(int**)malloc(N*sizeof(int*));
// gestion d'erreur
if(T==0)
printf("pas d'espace mémoire\n");
for(i=0;i<N;i++)
{
T[i]=(int*)malloc(M*sizeof(int));
if(T[i]==0)
printf("pas d'espace mémoire\n");
}
// construction de la matrice carre unitaire
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
if(i==j)
*((int*)T+i*M+j)=1;
else
*((int*)T+i*M+j)=0;
}
// affichage de la matrice unitaire
printf("la matrice unitaire de dimensions %d et %d est:\n",N,M);
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%d\t",*((int*)T+i*M+j));
printf("\n");
getch();
}
//********* Solution exercice 5 série 3************
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int i,j,k,l,c;
int **a,*b,*v;
v=(int*)malloc(c*sizeof(int));
for(i=0;i<l;i++)
{
*(v+i)=0;
for(j=0;j<c;j++)
*(v+i)+=(*(int*)a+i*c+j)*(*(b+j));
}
printf("les elements du vecteur v sont:\n");
for(i=0;i<c;i++)
printf("%d\t",*(v+i));
getch();
}
Série N° 4
Module : langage de programmation C
Exercice 1 :
Ecrire un programme qui lit une chaîne de caractères CH et qui convertit toutes les majuscules
dans des minuscules et vice-versa. Le résultat sera mémorisé dans la même variable CH et
affiché après la conversion.
1. Utiliser le formalisme tableau de caractères.
2. Utiliser le formalisme pointeur.
Exercice 2 :
Ecrire un programme qui lit un texte TXT et qui enlève toutes les apparitions d'un caractère
entré au clavier en tassant les éléments restants. Les modifications se feront dans la même
variable TXT.
1. Utiliser le formalisme tableau de caractères.
2. Utiliser le formalisme pointeur.
Exercice 3 :
Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la
conjugaison au présent de l'indicatif de ce verbe. Contrôlez s'il s'agit bien d'un verbe en "er"
avant de conjuguer.
1. Utiliser le formalisme tableau de caractères.
2. Utiliser le formalisme pointeur.
3. Utiliser les fonctions strcpy, strlen.
Exercice 4 :
Ecrire un programme qui lit 10 mots et les mémorise dans un tableau de chaînes de caractères.
Trier les 10 mots lexicographiquement en utilisant les fonctions strcmp et strcpy. Afficher le
tableau trié. Utilisez la méthode de tri par sélection.
//********* Solution exercice 1 série 4************
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
main()
{
char *ch;
int i,n,cpt;
printf("donnez le nombre de caractere maximal:\n");
scanf("%d",&n);
printf("saisis une chaine de caractere:\n");
ch=(char*)malloc(n*sizeof(char));
if(ch==0)
printf("pas d espace \n");
getchar();
gets(ch);
printf("la chaine saisie avant conversion est:\n");
puts(ch);
for(i=0,cpt=0;*(ch+i)!='\0';i++)
cpt++;
printf("cpt=%d",cpt);
// conversion
for(i=0;i<=cpt;i++)
{
if(*(ch+i)>='a' && *(ch+i)<='z')
*(ch+i)=*(ch+i)-'a'+'A';
else
if(*(ch+i)>='A' && *(ch+i)<='Z')
*(ch+i)=*(ch+i)-'A'+'a';
}
main()
{
char *ch1[6]={"je","tu","il","nous","vous","ils"};
char *ch2[6]={"e","es","e","ons","ez","ent"};
char ch[10];
int i,cpt;
printf("saisis le verbe a conjuger:\n");
gets(ch);
for(i=0,cpt=0;ch[i]!='\0';i++)
cpt++;
printf("cpt=%d\n",cpt);
// conjugaison
if(ch[cpt-1]=='r' && ch[cpt-2]=='e')
{
*(ch+cpt-2)='\0';
for(i=0;i<6;i++)
printf("%s\t%s%s\n",ch1[i],ch,ch2[i]);
}
else
printf("saisis svp un verbre du 1er groupe\n");
getch();
}
//********* Solution exercice 4 série 4************
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
main()
{
char **mots;
char ch[20];
int i,k,N;
printf("donnez le nombre de nom:\n");
scanf("%d",&N);
getchar();
// allocation dynamique
mots=(char**)malloc(N*sizeof(char*));
for(i=0;i<N;i++)
{
printf("saisis le %d mot\n",i+1);
gets(ch);
mots[i]=(char*)malloc((strlen(ch)+1)*sizeof(char));
strcpy(mots[i],ch);
}
printf("la liste des mots saisient est:\n");
for(i=0;i<N;i++)
puts(mots[i]);
// le tri par insertion
i=N-1;
while(i>=0)
{
for(k=0;k<i;k++)
if(strcmp(mots[k],mots[k+1])>0)
{
strcpy(ch,mots[k]);
strcpy(mots[k],mots[k+1]);
strcpy(mots[k+1],ch);
}
i--;
}
Exercice 1 :
Ecrire un programme qui permet d'effectuer les opérations suivantes : (On n'utilisera que les
fonctions)
Saisir les éléments d'un tableau T d'entiers
Trier le tableau
Afficher le tableau trié.
Afficher la position dans le tableau, d'une valeur saisie au clavier si elle appartient au
tableau T, sinon afficher que l'élément n'existe pas.
N.B. :
Le programme doit définir au moins les fonctions citées ci-dessous. Vous les définissez
dans un fichier appelés "malib.h" . Dans votre programme principal "prog.c", inclure le
fichier "malib.h"
Exercice 2 :
Ecrire un programme qui permet d'effectuer le produit de deux matrices carées :(On n'utilisera
que les fonctions)
Saisir les éléments de la matrice A et B d'entiers
Afficher les trois matrices A et B et C.
Exercice 3 :
Ecrire un programme qui lit 10 mots et les mémorise dans un tableau de chaînes de caractères:
on n’utilisera que les fonctions)
Saisir les mots dans un tableau de chaînes de caractères
Afficher les mots avant le tri
Trier les mots lexicographiquement.
Afficher le tableau trié.
//********* Solution exercice 1 série 5************
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include"malib.h"
// programme parincipal
main()
{
int *Tab,n,i,x;
printf("donnez le nombre des elements du tableau:\n");
scanf("%d",&n);
Tab=allocation(Tab,n);
printf("saisis les elements du tableau:\n");
saisie(Tab,n);
printf("affichage des elements du tableau avant le tri:\n");
affich(Tab,n);
tri(Tab,n);
printf("affichage des elements du tableau apres le tri:\n");
affich(Tab,n);
printf("donnez la valeur de x:\n");
scanf("%d",&x);
recherche(Tab,n,x);
getch();
}
{
for(i=0;i<L;i++)
{
for(j=0;j<C;j++)
printf("%d\t",*(T[i]+j));
printf("\n");
}
}
//________________________________
int** produit(int **T,int ** S, int **R,int L,int C )
{
int k;
for(i=0;i<L;i++)
for(j=0;j<C;j++)
{
*(R[i]+j)=0;
for(k=0;k<C;k++)
*(R[i]+j)+=*(T[i]+k)*(*(S[k]+j)) ;
}
return(R);
}
Série N° 6
Module : langage de programmation C
Exercice 1 :
La liste des étudiants est représentée par un tableau de structures qu'on va allouer
dynamiquement.
Un étudiant est représenté par un enregistrement composé des champs suivant :
Nom : chaîne de caractères représentant le nom de l'étudiant,
NI : entier représentant le numéro de l'étudiant,
Groupe : caractère représentant le groupe auquel appartient cet étudiant.
// déclaration de la sturucture
struct etudiant
{
char nom[30];
char groupe;
int NI;
};
// programme principal
main()
{
struct etudiant *liste;
int n;
char ch[30];
printf("donnez le nombre des etudiants:\n");
scanf("%d",&n);
liste=allocation(liste,n);
getchar();
printf("saisis la liste des etudiants:\n");
saisie(liste,n);
printf("voici la liste des etudiants avant le tri:\n");
affich(liste,n);
tri(liste,n);
printf("voici la liste des etudiants apres le tri:\n");
affich(liste,n);
printf("saisis le nom rechercher:\n");
gets(ch);
recherche(liste,n,ch);
getch();
}
}
//------------------------------------------------------
void saisie(struct etudiant *T,int N)
{
int i;
for(i=0;i<N;i++)
{
printf("saisis le nom de l'etudiant %d:\n",i+1);
gets(T[i].nom);
printf("saisis le numumero d'inscription:\n");
scanf("%d",&T[i].NI);
getchar();
printf("saisis le groupe de l'etudaint:\n");
scanf("%c",&T[i].groupe);
getchar();
}
}
//-------------------------------------------------------
void affich(struct etudiant *T,int N)
{
int i;
printf(" Nom Num_Iscr groupe\n");
for(i=0;i<N;i++)
printf("%s %d %c\n",T[i].nom,T[i].NI,T[i].groupe);
}
//--------------------------------------------------------
void tri(struct etudiant *T,int N)
{
int i,j;
struct etudiant temp;
i=N-1;
while(i>=0)
{
for(j=0;j<i;j++)
{
if(strcmp(T[j].nom,T[j+1].nom)>0)
{
temp=*(T+j);
*(T+j)=*(T+j+1);
*(T+j+1)=temp;
}
}
i--;
}
}
//----------------------------------------------------------
void recherche(struct etudiant *T,int N,char ch[30])
{
int i;
i=0;
while( strcmp(ch,T[i].nom)!=0 && i<N)
i++;
if(i>=N)
printf("ce nom n existe pas dans la liste:\n");
else
printf(" le nom rechercher est %s %d %c\n",T[i].nom,T[i].NI,T[i].groupe);
}