TP Avec Corrections - Langage C Filière STPI Pr. Rachid MALEK
TP Avec Corrections - Langage C Filière STPI Pr. Rachid MALEK
TP Avec Corrections - Langage C Filière STPI Pr. Rachid MALEK
Exemple 1
// Directives au pré-processeur - Ceci est un commentaire
#include <stdio.h>
#include <math.h>
{
// Déclaration des variables - Ceci est un commentaire
int i ;
float x ;
float racx ;
printf ("Calcul de 5 racines carrées\n") ; // Affichage sur l'écran - Ceci est un commentaire
printf ("\n") ; // Retour à la ligne - Ceci est un commentaire
Exemple 2
#include <stdio.h>
main ( )
{
char op ;
int n1, n2 ;
L’objectif du TP2 : Manipuler les types de base (int, short int, long int, float, double, long double, char)
Exercice 1
Ecrire un programme qui affiche le nombre d’octets réservés sur votre machine pour les
types :
Utiliser la fonction sizeof ( ) dans un printf ( ). Exemple : printf ("La taille en octets d'un
entier (int) est : %d \n", sizeof (int)) ;
Exercice 2
Soient les déclarations suivantes :
int i; short int j ; long int k ; float x ; double y ; long double z; char c ;
Ecrire un programme qui lit au clavier toutes ces variables et affiche leur adresse ainsi que
leur valeur respective. Quel est l’ordre de placement de ces variables en mémoire ?
Pour afficher l’adresse d’une variable var, utilisez &var dans un printf ( ). Exemple pour
float x : printf ("La valeur de x est : %f et son adresse est : %d \n", x, &x);
Exercice 3
Ecrire un programme qui lit un caractère au clavier et affiche le caractère ainsi que son code
numérique (code ASCII).
Exercice 4
Ecrire un programme qui lit au clavier les valeurs de trois résistances et de trois capacités et
calcule leur résistance et leur capacité équivalente, respectivement, dans les deux cas :
Les résultats doivent être affichés dans chaque cas. Toutes les variables utilisées dans ce
programme doivent être déclarées avec le type double.
Exercice 5
Soient les déclarations suivantes : int i ; float f ; char c ;
Exercice 2
printf("L’adresse de la variable i est : %d\n", &i);
Même chose pour les autres variables.
Exercice 3
#include <stdio.h>
main()
{
double R1, R2, R3, Rs, Rp;
printf("Introduisez les valeurs pour R1, R2 et R3 : ");
scanf("%lf %lf %lf", &R1, &R2, &R3);
Rs = R1+R2+R3;
printf("Résistance résultante en série : %f\n", Rs);
Rp = (R1*R2*R3)/(R1*R2+R1*R3+R2*R3);
printf("Résistance résultante en parallèle : %f\n", Rp);
return 0;
}
Exercice 4
#include <stdio.h>
#include <conio.h>
main()
{
int c;
printf("Introduire un caractère \n");
c = getch();
printf("Le caractère %c a le code ASCII %d\n", c, c);
Exercice 5
// conversion entier vers char.
c=98; // implicite : c prend le code ASCII 98 c-à-d ’b'
c = (char) 98; // explicite plus propre
Les objectifs du TP3 : Manipuler les différents opérateurs et les expressions en langage C.
Exercice 1
Evaluer les expressions suivantes en supposant : A=20 B=5 C=-10 D=2 X=12 Y=15
(1) (5*X)+2*((3*B)+4)
(2) (5*(X+2)*3)*(B+4)
(3) A == (B=5)
(4) A += (X+5)
(5) A != (C *= (-D))
(6) A *= C+(X-D)
(7) A %= D++
(8) A %= ++D
(9) (X++)*(A+C)
(10) A = X*(B<C)+Y*!(B<C)
Exercice 2
Ecrire un programme qui permute les valeurs de trois variables entières A, B et C.
A prendra la valeur de C, B celle de A et C celle de B. Afficher le résultat final.
Exercice 3
Ecrire un programme qui calcule la distance entre deux points A et B du plan Oxy.
Le programme doit lire les coordonnées de A et B. Afficher le résultat final.
Exercice 4
Ecrire un programme qui lit trois nombres entiers A, B et C et affiche leur valeur maximale.
Utiliser les trois méthodes suivantes :
Exercice 5
Ecrire un programme qui lit trois nombres entiers A, B et C et effectue un tri par ordre décroissant de
ces derniers en échangeant leur valeur. Introduire une variable AIDE.
Exercice 6
Ecrire un programme qui calcule les solutions réelles d’une équation du second degré.
On supposera que les coefficients a, b et c sont des nombres entiers.
Exercice 7
Ecrire un programme qui affiche le signe du produit de deux entiers A et B sans faire la multiplication.
Exercice 2
#include <stdio.h>
main()
{
int A, B, C, AIDE;
printf("Introduisez trois nombres (A, B, C) : ");
scanf("%d %d %d", &A, &B, &C);
/* Affichage à l'aide de tabulations */
printf("A = %d\tB = %d\tC = %d\n", A, B, C);
AIDE=A;
A=C;
C=B;
B=AIDE;
printf("A = %d\tB = %d\tC = %d\n", A, B, C);
return 0;
}
Exercice 3
#include <stdio.h>
#include <math.h>
main()
{
int XA, YA, XB, YB;
double DIST;
/* Attention: La chaîne de format que nous utilisons */
/* s'attend à ce que les données soient séparées par */
/* une virgule lors de l'entrée. */
printf("Entrez les coordonnées du point A : XA,YA ");
scanf("%d,%d", &XA, &YA);
printf("Entrez les coordonnées du point B : XB,YB ");
scanf("%d,%d", &XB, &YB);
DIST=sqrt(pow(XA-XB,2)+pow(YA-YB,2));
printf("La distance entre A(%d,%d) et B(%d, %d) est %.2f\n",
XA, YA, XB, YB, DIST);
return 0;
}
Exercice 4
a) if - else et une variable d'aide MAX
#include <stdio.h>
main()
Exercice 5
#include <stdio.h>
main()
{
/* Tri par ordre décroissant de trois entiers
en échangeant les valeurs
*/
int A, B, C, AIDE;
printf("Introduisez trois nombres entiers :");
scanf("%d %d %d", &A, &B, &C);
printf("Avant le tri : \tA = %d\tB = %d\tC = %d\n", A, B, C);
/* Valeur maximale -> A */
if (A<B)
{
AIDE = A;
A = B;
B = AIDE;
}
if (A<C)
{
AIDE = A;
A = C;
C = AIDE;
}
/* trier B et C */
if (B<C)
Exercice 6
#include <stdio.h>
#include <math.h>
main()
{
/* Calcul des solutions réelles d'une équation du second degré */
int A, B, C;
double D; /* Discriminant */
printf("Calcul des solutions réelles d'une équation du second \n");
printf("degré de la forme ax^2 + bx + c = 0 \n\n");
printf("Introduisez les valeurs pour a, b, et c : ");
scanf("%d %d %d", &A, &B, &C);
Exercice 7
#include <stdio.h>
main()
{
/* Afficher le signe du produit de deux entiers sans
faire la multiplication
*/
int A, B;
printf("Introduisez deux nombres entiers :");
Exercice 1
Soit le programme suivant :
#include <stdio.h>
main ( )
{
int i, n, som ;
som = 0 ;
for (i=0 ; i<4 ; i++) {
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
som += n ;
}
printf ("Somme : %d\n", som) ;
}
Écrire un programme réalisant exactement la même chose, en employant, à la place de l’instruction for une
instruction while et une instruction do... while.
Exercice 2
Calculer la moyenne de notes fournies au clavier avec un dialogue de ce type :
note 1 : 12
note 2 : 15.25
note 3 : 13.5
note 4 : 8.75
note 5 : -1
La moyenne de ces 4 notes est : 12.37
Le nombre de notes n’est pas connu a priori et l’utilisateur peut en fournir autant qu’il le désire. Pour signaler
qu’il a terminé, on convient qu’il fournira une note fictive négative. Celle-ci ne devra naturellement pas être
prise en compte dans le calcul de la moyenne.
Exercice 3
Écrire un programme qui détermine la n-ième valeur un (n étant fourni en donnée) de la suite de Fibonacci
définie comme suit :
u1 = 1
u2 = 1
un = un-1 + un-2 pour n>2
Exercice 4
Ecrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau d'entiers A. Afficher
ensuite la valeur et la position du maximum et du minimum. Si le tableau contient plusieurs maxima ou minima,
le programme retiendra la position du premier maximum ou minimum rencontré.
Exercice 5
Rechercher dans un tableau d'entiers A une valeur VAL entrée au clavier. Afficher la position de VAL si elle se
trouve dans le tableau, sinon afficher un message correspondant. La valeur POS qui est utilisée pour mémoriser
la position de la valeur dans le tableau, aura la valeur -1 aussi longtemps que VAL n'a pas été trouvée.
a) La recherche séquentielle
Comparer successivement les valeurs du tableau avec la valeur donnée.
Ecrire le programme dans le cas où le tableau A est trié par ordre croissant.
Exercice 1
a)
#include <stdio.h>
main()
{ int i, n, som ;
som = 0 ;
i = 0 ; /* ne pas oublier cette "initialisation" */
while (i<4)
{ printf ("donnez un entier ") ;
scanf ("%d", &n) ;
som += n ;
i++ ; /* ni cette "incrémentation" */
}
b)
#include <stdio.h>
main()
{ int i, n, som ;
som = 0 ;
i = 0 ; /* ne pas oublier cette "initialisation" */
do
{ printf ("donnez un entier ") ;
scanf ("%d", &n) ;
som += n ;
i++ ; /* ni cette "incrémentation" */
} while (i<4) ; /* attention, ici, toujours <4 */
Exercice 2
#include <stdio.h>
main()
if (num>0)
{ moy = som/num ;
printf ("moyenne de ces %d notes : %f", num, moy) ;
} else printf ("--- aucune note fournie ---") ;
}
Exercice 3
main()
{
int u1, u2, u3 ; /* pour "parcourir" la suite */
int n ; /* rang du terme demandé */
int i ; /* compteur */
Exercice 4
#include <stdio.h>
main()
{
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
Exercice 5
a) La recherche séquentielle
Comparer successivement les valeurs du tableau avec la valeur donnée.
#include <stdio.h>
/* Affichage du tableau */
printf("Tableau donné : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
/* Edition du résultat */
if (POS==-1)
printf("La valeur recherchée ne se trouve pas dans le tableau.\n");
else
printf("La valeur %d se trouve à la position %d. \n", VAL, POS);
return 0;
}
/* Affichage du tableau */
printf("Tableau donné : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
Exercice 1
Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension maximale : 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Calculer et
afficher ensuite la somme des éléments du tableau.
Exercice 2
Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension maximale : 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Effacer ensuite
toutes les occurrences de la valeur 0 dans le tableau T et tasser les éléments restants. Afficher le
tableau résultant.
Exercice 3
Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension maximale : 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Ranger ensuite
les éléments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide. Afficher le tableau
résultant.
Idée : Echanger les éléments du tableau à l'aide de deux indices qui parcourent le tableau en
commençant respectivement au début et à la fin du tableau et qui se rencontrent en son milieu.
Exercice 4
Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension maximale : 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Copiez ensuite
toutes les composantes strictement positives dans un deuxième tableau TPOS et toutes les valeurs
strictement négatives dans un troisième tableau TNEG. Afficher les tableaux TPOS et TNEG.
Exercice 5
Soit P un pointeur qui "pointe" sur un tableau A :
int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
a- *P+2
b- *(P+2)
c- &P+1
d- &A[4]-3
e- A+3
f- &A[7]-P
g- P+(*P-10)
h- *(P+*(P+8)-A[7])
Exercice 6
Écrire un programme qui lit un entier X et un tableau A de type entier au clavier et élimine toutes les
occurrences de X dans A en tassant les éléments restants. Le programme utilisera deux pointeurs P1 et
P2 pour parcourir le tableau.
Exercice 2
#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */
int N; /* dimension */
int I,J; /* indices courants */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
Exercice 3
#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */
int N; /* dimension */
int I,J; /* indices courants */
int AIDE; /* pour l'échange */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné : \n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Inverser le tableau */
for (I=0, J=N-1 ; I<J ; I++,J--)
/* Echange de T[I] et T[J] */
{
AIDE = T[I];
T[I] = T[J];
Exercice 4
#include <stdio.h>
main()
{
/* Déclarations */
/* Les tableaux et leurs dimensions */
int T[50], TPOS[50], TNEG[50];
int N, NPOS, NNEG;
int I; /* indice courant */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Initialisation des dimensions de TPOS et TNEG */
NPOS=0;
NNEG=0;
/* Transfer des données */
for (I=0; I<N; I++)
{ if (T[I]>0) {
TPOS[NPOS]=T[I];
NPOS++;
}
if (T[I]<0) {
TNEG[NNEG]=T[I];
NNEG++;
}
}
/* Edition du résultat */
printf("Tableau TPOS :\n");
for (I=0; I<NPOS; I++)
printf("%d ", TPOS[I]);
Exercice 5
Exercice 6
#include<stdio.h>
#include<conio.h>
main()
{
int *p1,*p2,j;
int x,t[10],n;
p1=t;
for(p1=t;p1<t+n;p1++)
{
printf("donner la valeur de t[%d]",p1-t);
scanf("%d",p1);
}
printf("dooner la valeur");
scanf("%d",&x);
j=0;
p1=t;
for(p1=t;p1<t+n;p1++)
p1=t;
for(p1=t;p1<t+j;p1++) printf(" %d \t",*p1);
getch();
} // fin main
Exercice 1
Écrire un programme qui range les éléments d'un tableau A de type entier dans l'ordre inverse. Le
programme utilisera deux pointeurs P1 et P2 et une variable numérique AIDE pour la permutation des
éléments.
Exercice 2
Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension maximale : 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Calculer et
afficher ensuite la somme des éléments du tableau. Utiliser le formalisme pointeur.
Exercice 3
Écrire un programme qui implémente une méthode de recherche de l'indice de la valeur minimale d'un
intervalle d'un tableau d'entiers compris entre les indices deb et fin inclus. Utiliser le formalisme
pointeur.
Exercice 4
Soit T un tableau de dimension N de type entier (dimension maximale : 10). Remplir le tableau par des
valeurs entrées au clavier et afficher le tableau. Donner un code pour Trier les données de T à l’aide du
pointeur. Utiliser le formalisme pointeur.
Exercice 5
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int
(dimensions maximales : 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au
clavier et afficher le tableau ainsi que la somme de tous ses éléments.
Exercice 6
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du
type int (dimensions maximales : 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées
au clavier et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en n'utilisant
qu'une variable d’aide pour la somme.
Exercice 7
Ecrire un programme qui transfère un tableau M à deux dimensions L et C (dimensions maximales :
10 lignes et 10 colonnes) dans un tableau V à une dimension L*C.
Exemple :
/ \
|abcd| / \
| e f g h | ==> | a b c d e f g h i j k l |
|i jkl | \ /
\ /
Exercice1:
#include<stdio.h>
#include<conio.h>
main()
{
int t[10],*p1,*p2,n,aide,i;
p1=t;
for(i=0;i<n;i++)
{
printf("donnez les valeurs t[%d]=",i);
scanf("%d",p1+i);
}
p2=t+n-1;
while (p1<p2)
{
aide=*p1;
*p1=*p2;
*p2=aide;
p1++;
p2--;
}
for(i=0;i<n;i++) printf("t[%d]=%d",i,t[i]);
getch();
} // fin main
Exercice2:
#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */
int N; /* dimension */
int I; /* indice courant */
long SOM; /* somme des éléments - type long à cause */
/* de la grandeur prévisible du résultat. */
int *p ; // pointeur pour manipuler le tableau T
Exercice3:
#include<stdio.h>
#include<conio.h>
main()
{
int t[10],*p,deb,fin,val,a,b;
p=t;
for(p=t;p<t+a;p++)
{
printf("donnez les valeurs t[%d]=",p-t+1);
scanf("%d",p); }
printf("donnez le début");
scanf("%d",&deb);
printf("donnez la fin");
scanf("%d",&fin);
for(p=t+deb;p<=t+fin;p++)
getch();
} // fin main
Exercice 4:
#include<stdio.h>
#include<conio.h>
main()
{
int t[10],aide,*p,*k,a;
p=t;
for(p=t;p<t+a;p++)
{
printf("donner la valeuer de t[%d]=",p-t+1);
scanf("%d",p);
}
for(p=t;p<t+a;p++)
{
for(k=p+1;k<t+a;k++)
{
if(*p>*k)
{
aide=*p;
*p=*k;
*k=aide;
}
}
}
for(p=t;p<t+a;p++) printf("%d\t",*p);
getch();
Exercice 5
#include <stdio.h>
main()
{
/* Déclarations */
int T[50][50]; /* tableau donné */
int L, C; /* dimensions */
int I, J; /* indices courants */
long SOM; /* somme des éléments - type long à cause */
/* de la grandeur prévisible du résultat. */
/* Saisie des données */
printf("Nombre de lignes (max.50) : ");
scanf("%d", &L );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &T[I][J]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", T[I][J]);
printf("\n");
}
/* Calcul de la somme */
for (SOM=0, I=0; I<L; I++)
for (J=0; J<C; J++)
SOM += T[I][J];
/* Edition du résultat */
printf("Somme des éléments : %ld\n", SOM);
return 0;
}
Exercice 6
#include <stdio.h>
main()
{
/* Déclarations */
int T[50][50]; /* tableau donné */
int L, C; /* dimensions */
int I, J; /* indices courants */
long SOM; /* somme des éléments - type long à cause */
/* de la grandeur prévisible des résultats. */
Exercice 7
#include <stdio.h>
main()
{
/* Déclarations */
int M[10][10]; /* tableau à 2 dimensions */
int V[100]; /* tableau à 1 dimension */
int L, C; /* dimensions */
int I, J; /* indices courants */
/* Saisie des données */
printf("Nombre de lignes (max.10) : ");
scanf("%d", &L );
printf("Nombre de colonnes (max.10) : ");
scanf("%d", &C );
Exercice 1
Lesquelles des chaînes suivantes sont initialisées correctement ? Corrigez les déclarations fausses et indiquez
pour chaque chaîne de caractères le nombre d'octets qui sera réservé en mémoire.
a) char a [ ] = "un\ndeux\ntrois\n";
b) char b [12] = "un deux trois";
c) char c [ ] = 'abcdefg';
d) char d [10] = 'x';
e) char e [5] = "cinq";
f) char f [ ] = "Cette " "phrase" "est coupée";
g) char g [2] = {'a', '\0'};
h) char h [4] = {'a', 'b', 'c'};
i) char i [4] = "'o'";
Exercice 2
Ecrire un programme qui lit 5 mots, séparés par des espaces et qui les affiche ensuite dans une ligne, mais dans
l'ordre inverse. Les mots sont mémorisés dans 5 variables M1, ..., M5.
Exercice 3
Ecrire un programme qui lit une ligne de texte (ne dépassant pas 200 caractères) la mémorise dans une variable
TXT et affiche ensuite :
a) la longueur L de la chaîne.
b) le nombre de 'e' contenus dans le texte.
c) toute la phrase à rebours, sans changer le contenu de la
variable TXT.
d) toute la phrase à rebours, après avoir inversé l'ordre des
caractères dans TXT. Exemple :
voici une petite phrase !
! esarhp etitep enu iciov
Exercice 4
Ecrire un programme qui lit un texte TXT (de moins de 200 caractères) et qui enlève toutes les apparitions du
caractère 'e' en tassant les éléments restants. Les modifications se feront dans la même variable TXT. Exemple :
Exercice 5
Ecrire un programme qui demande l'introduction du nom et du prénom de l'utilisateur et qui affiche alors la
longueur totale du nom sans compter les espaces. Employer la fonction strlen.
Exercice 6
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2, les compare lexicographiquement et affiche
le résultat. Exemple :
Exercice 1
a) char a[] = "un\ndeux\ntrois\n";
Déclaration correcte
Espace: 15 octets
Exercice 2
#include <stdio.h>
main()
{
char M1[30], M2[30], M3[30], M4[30], M5[30];
printf("Entrez 5 mots, séparés par des espaces :\n");
scanf ("%s %s %s %s %s", M1, M2, M3, M4, M5);
printf("%s %s %s %s %s\n",M5, M4, M3, M2, M1);
return 0;
}
Exercice4
#include <stdio.h>
main()
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */
int I,J; /* indices courants */
Exercice5
#include <stdio.h>
#include <string.h>
main()
{
char NOM[40], PRENOM[40];
printf("Introduisez votre nom et votre prénom: \n");
scanf("%s %s", NOM, PRENOM);
printf("\nBonjour %s %s !\n", NOM, PRENOM);
printf("Votre nom est composé de %d lettres.\n",
strlen(NOM) + strlen(PRENOM));
/* ou bien
printf("Votre nom est composé de %d lettres.\n",
strlen(strcat(NOM,PRENOM)));
*/
return 0;
}
Exercice 6
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations */
char CH1[200], CH2[200]; /* chaînes entrées */
int RES; /* résultat de la fonction strcmp */
Exercice 7
a) Utiliser les fonctions spéciales de <string>.
#include <stdio.h>
#include <string.h>
/* Traitements */
strncpy(CH3, CH1, strlen(CH1)/2);
strncat(CH3, CH2, strlen(CH2)/2);
/* Affichage du résultat */
printf("Un demi \"%s\" plus un demi \"%s\" donne \"%s\"\n",
CH1, CH2, CH3);
return 0;
}
b) Utiliser uniquement les fonctions gets et puts.
#include <stdio.h>
main()
{
/* Déclarations */
char CH1[100], CH2[100]; /* chaînes données */
char CH3[100]=""; /* chaîne résultat */
int L1,L2; /* longueurs de CH1 et CH2 */
int I; /* indice courant dans CH1 et CH2 */
int J; /* indice courant dans CH3 */
/* Affichage du résultat */
puts("Chaîne résultat : ");
puts(CH3);
return 0;
}
Exercice 1
Écrire un programme qui implémente une fonction qui retourne la somme des entiers pairs
inférieurs ou égaux à un entier n donné (passé en argument). Le programme principal doit
afficher le résultat final.
Exercice 2
Écrire un programme qui implémente une fonction qui lit les données relatives à un étudiant
appartenant à une institution universitaire telles que son nom, son prénom, son CNE ainsi que
les notes obtenues dans 12 modules. Le programme principal doit afficher toutes ces données
lues par la fonction ainsi que la moyenne des notes.
Exercice 3
Écrire une fonction qui ne renvoie aucune valeur et qui détermine la valeur maximale et la
valeur minimale d’un tableau d’entiers (à un indice) de taille quelconque. Il faudra donc
prévoir 4 arguments : le tableau, sa dimension, le maximum et le minimum. Écrire un
programme d’essai.
Exercice 4
Écrire une fonction permettant de trier par ordre croissant les valeurs entières d’un tableau de
taille quelconque (transmise en argument). Le tri pourra se faire par réarrangement des
valeurs au sein du tableau lui-même.
Exercice 5
Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entière N (positive ou
négative) du type long comme paramètre et qui fournit le nombre de chiffres de N comme
résultat. Ecrire un programme qui teste la fonction NCHIFFRES.
Exemple :
Introduire un nombre entier : 6457392
Le nombre 6457392 contient 7 chiffres.
Exercice 6
Écrire une fonction calculant la somme de deux matrices dont les éléments sont de type
double. Les adresses des trois matrices et leurs dimensions (communes) seront transmises en
argument.
Exercice 7
Soit T un tableau de N éléments de type entier. Écrire un programme qui implémente une
fonction fct3 ( ) qui calcule le nombre d’éléments pairs np, le nombre d’éléments impairs
nimp et le nombre d’éléments égaux à 0 nbz, du tableau T. Le programme principal doit
afficher le résultat final.
Exercice 8
Ecrire un programme qui implémente une fonction qui effectue la multiplication de deux
matrices d’entiers A de dimensions (N, M) et B de dimensions (M, P). Le résultat de la
multiplication sera mémorisé dans une troisième matrice C qui sera ensuite affichée.
Exercice 1
# include <stdio.h>
int i, somme = 0;
return somme;
main ( ) {
int Som, N;
printf (“Entrer N : ”) ;
scanf(“%d”,&N);
getch();
Exercice 2
#include <stdio.h>
#include <string.h>
void fct2 (char *nom ,char *pnom, int *age , float t[50], int n ){
int i;
scanf("%f",&t[i]);
}
main ( )
{
int i, N, Age;
float Moy = 0.0, T[50];
char Nom[50], Pnom[50];
printf("nom : %s\n",Nom);
printf("prenom : %s\n",Pnom);
printf("age = %d\n",Age);
printf("\n");
getch();
Exercice 3
void maxmin (int t[], int n, int * admax, int * admin)
{ int i, max, min ;
max = t[0] ;
min = t[0] ;
for (i=1 ; i<n ; i++)
{ if (t[i] > max) max = t[i] ;
if (t[i] < min) min = t[i] ;
}
*admax = max ;
*admin = min ;
Exercice4
void tri (unsigned char c[] , int nc)
{ int i,j ;
char ct ;
for (i=0 ; i<nc-1 ; i++)
for (j=i+1 ; j<nc ; j++)
if ( c[i]>c[j] )
{ ct = c[i] ;
c[i] = c[j] ;
c[j] = ct ;
}
}
Exercice5
#include <stdio.h>
main()
{
/* Prototypes des fonctions appelées */
int NCHIFFRES (long N);
/* Variables locales */
long A;
/* Traitements */
printf("Introduire un nombre entier : ");
scanf("%ld", &A);
printf("Le nombre %ld a %d chiffres.\n",A ,NCHIFFRES (A));
return 0;
}
Exercice6
void sommat (double * a, double * b, double * c, int n, int p)
{ int i ;
for (i=0 ; i<n*p ; i++)
*(c+i) = *(a+i) + *(b+i) ;
}
Exercice7
#include <stdio.h>
void fct3 (int t[50], int n, int *np, int *nimp, int *nbz) {
int i;
for(i=0; i<n; i++){
if(t[i]==0) *nbz=*nbz+1;
else if(t[i]%2==0) *np=*np+1;
else *nimp=*nimp+1;
}
}
main() {
int N, i;
int NP=0,NIMP=0,NBZ=0;
int T[50];
getch();
Exercice8
#include <stdio.h>
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée */
int B[50][50]; /* matrice donnée */
int C[50][50]; /* matrice résultat */
int N, M, P; /* dimensions des matrices */
int I, J, K; /* indices courants */
/* Edition du résultat */
printf("Matrice résultat C :\n");
for (I=0; I<N; I++)
{
for (J=0; J<P; J++)
printf("%7d", C[I][J]);
printf("\n");
}
getch();
void prod_mat (int a[50][50], int n, int m, int b[50][50], int p, int c[50][50]) {
int i, j, k ;
Exercice 2
Définir une structure date contenant trois champs de type entier pour identifier le jour, le mois et
l’année. Initialiser une variable de type structure date. Afficher cette structure à l’aide de la variable et
à l’aide d’un pointeur.
Exercice 3
On reprend la structure date de l’exercice 2.
1) Définir un tableau de structures date.
2) Définir un pointeur sur ce tableau.
3) Initialiser ce tableau.
4) Afficher le contenu du tableau.
Exercice 4
Définir une structure de données Heure permettant de représenter une heure au format hh/mm/ss, puis
écrire les fonctions suivantes :
Exercice 5
Définir une structure Etudiant contenant les champs CNE (entier long), nom (chaine), prenom
(chaine), date (structure), adresse (structure), email (chaine), phone (chaine) et site_web (chaine).
Ecrire un programme qui lit et affiche les données relatives à 100 étudiants en utilisant un tableau de
structure appelé Contact.
Exercice 6
Écrire un programme qui lit au clavier des informations dans un tableau de structures du type point
défini comme suit : struct point { int num ; float x ; float y ; } ;
Le nombre d’éléments du tableau sera fixé par une instruction #define et le programme doit afficher
l’ensemble des informations précédentes.
Réaliser le même traitement en utilisant cette fois-ci une fonction pour la lecture des informations et
une autre pour l’affichage.
Exercice 7
On considère la structure suivante : typedef struct {
char *nom;
int age ;
float taille ;
}Personne ;
Donner le code des fonctions suivantes :
Personne * Creer_personne ( char *nom, int age, float taille ).
void Affiche_personne ( Personne *w).
void Detruire_personne ( Personne *w).
struct Point {
float x;
float y ;
};
struct Cercle {
float xc;
float yc ;
float rayon;
};
struct Rectangle {
float L;
float l ;
};
int main ( )
{
printf ( "\n") ;
printf ( "Entrer les champs du point 2 : \n") ;
scanf ( "%f %f",&p2.x,&p2.y) ;
printf ( "Afficher les champs du point p2 : %f %f\n", p2.x, p2.y) ;
printf ( "\n") ;
printf ( "Entrer les champs du cercle c1 : \n") ;
scanf ( "%f %f %f",&c1.xc,&c1.yc,&c1.rayon) ;
printf ( "Afficher les champs du cercle c1 : %f %f %f\n", c1.xc, c1.yc,c1.rayon) ;
printf ( "\n") ;
printf ( "Entrer les champs du cercle c2 : \n") ;
scanf ( "%f %f %f",&c2.xc,&c2.yc,&c2.rayon) ;
printf ( "Afficher les champs du cercle c1 : %f %f %f\n", c2.xc, c2.yc,c2.rayon) ;
printf ( "\n") ;
printf ( "Entrer les champs du rectangle R2 : \n") ;
scanf ( "%f %f",&R2.L,&R2.l) ;
printf ( "Afficher les champs du rectangle R2 : %f %f\n", R2.L, R2.l) ;
getch();
return 0 ;
}
Exercice 2
#include <stdio.h>
int main ()
{
struct date dat, ∗ptdate = &dat;
/∗ saisie de la date ∗/
printf ("␣Entrez␣une␣date␣(␣jj␣mm␣aaaa␣)␣:");
scanf ("%d␣%d␣%d", &dat.jour, &dat.mois, &dat.annee);
/∗ impression de la date ∗/
printf ("␣La␣date␣est␣:␣%d\t%d\t%d\n", dat.jour, dat.mois, dat.annee);
/∗ impression de la date avec le pointeur ∗/
printf ("La␣date␣est␣:␣%d\t%d\t%d\n", ptdate−>jour, ptdate−>mois, ptdate−>annee);
return 0;
}
Exercice 3
#include <stdio.h>
int main ()
{
Langage C – CP2 R. MALEK
struct date dat[5], ∗ptdate=dat;
int i = 0;
/∗ remplissage du tableau ∗/
printf ("Entrez␣5␣dates␣au␣format␣(␣jj␣mm␣aaaa␣)\n");
while (i < 5){
scanf ("%d␣%d␣%d", &dat[i].jour, &dat[i].mois, &dat[i].annee);
i++;
}
/∗ impression du tableau ∗/
for (i = 0; i < 5; i++, ptdate++) {
/∗ sans pointeur ∗/
printf ("Date␣numero %d:%d\t%d\t%d\n", i + 1, dat[i].jour, dat[i].mois, dat[i].annee);
/∗ avec pointeur ∗/
printf ("Date␣numero%d:%d\t%d\t%d\n", i + 1, ptdate−>jour, ptdate−>mois, ptdate−>annee
);
}
return 0;
}
Exercice4
typedef struct {
int hh;
int mm;
int ss;
} Heure;
int HeureEnSecondes(Heure h) {
return (h.hh*3600 + h.mm*60 + h.ss);
}
Heure h3;
h3.hh=h1.hh+h2.hh;
h3.mm=h1.mm+h2.mm;
h3.ss=h1.ss+h2.ss;
return h3;
Exercice5
struct date {
int jour ;
char mois [10] ;
int annee ;
};
struct adresse {
int no_rue ;
char rue [100] ;
int code_postal ;
char ville [30] ;
char pays [30] ;
};
struct Etudiant {
long CNE;
char nom [30] ;
char prenom [30] ;
struct date date_naiss ;
struct adresse ads ;
char email [30] ;
char phone [14] ;
char site_web [30] ;
};
struct Etudiant Contact [100] ;
main()
{ struct point { int num ;
float x ;
float y ;
};
struct point courbe[NPOINTS] ;
int i ;
for (i=0 ; i<NPOINTS ; i++)
{ printf ("numéro : ") ; scanf ("%d", &courbe[i].num) ;
printf ("x : ") ; scanf ("%f", &courbe[i].x) ;
printf ("y : ") ; scanf ("%f", &courbe[i].y) ;
}
printf (" **** structure fournie ****\n") ;
for (i=0 ; i<NPOINTS ; i++)
printf ("numéro : %d x : %f y : %f\n",
courbe[i].num, courbe[i].x, courbe[i].y) ;
}
#include <stdio.h>
#define NPOINTS 5
struct point { int num ;
float x ;
float y ;
};
void lit (struct point []) ; /* ou void lit (struct point *) */
void affiche (struct point []) ; /* ou void lit (struct point *) */
main()
{
struct point courbe[NPOINTS] ;
lit (courbe) ;
affiche (courbe) ;
}
void lit (struct point courbe []) /* ou void lit (struct point * courbe) */
{
int i ;
for (i=0 ; i<NPOINTS ; i++)
{ printf ("numéro : ") ; scanf ("%d", &courbe[i].num) ;
printf ("x : ") ; scanf ("%f", &courbe[i].x) ;
printf ("y : ") ; scanf ("%f", &courbe[i].y) ;
}
}
void affiche (struct point courbe []) /* ou void affiche
(struct point * courbe) */
Exercice 7
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct {
char *nom;
int age ;
float taille ;
}Personne ;
Personne * w;
w = (Personne *)malloc(sizeof(Personne));
return w;
free(w);
printf ("\n");
printf ("\n");
mounir->age += 10 ;
Afficher_personne (mounir ) ;
printf ("\n");
badr->age += 20;
Afficher_personne ( badr ) ;
printf ("\n");
Detruire_personne (mounir ) ;
Detruire_personne ( badr ) ;
getch();
return 0 ;
}
Exercice 1
Définir une structure Etudiant contenant les champs CNE (entier long), nom (chaine), prenom
(chaine), date (structure), adresse (structure), email (chaine), phone (chaine) et site_web
(chaine). Ecrire un programme qui enregistre dans un fichier « Annuaire » les données
relatives à 100 étudiants en utilisant un tableau de structure appelé Contact. On utilisera la
fonction fprintf ( ) pour la sauvegarde des données.
Exercice 2
Ecrire un programme qui implémente une fonction qui effectue la transposition tA d'une
matrice A d’entiers de dimensions L et C en une matrice de dimensions C et L qui sera
ensuite sauvegardée dans fichier. La matrice A sera transposée par permutation de ses
éléments (Dans le programme, on n’utilisera qu’une seule matrice : la matrice A). On
utilisera la fonction fprintf ( ) pour la sauvegarde des données.
Exercice 3
Ecrire un programme qui implémente une fonction qui effectue la multiplication de deux
matrices d’entiers A de dimensions (M, N) et B de dimensions (N, P). Le résultat de la
multiplication sera mémorisé dans une troisième matrice C et sauvegardé dans un fichier.
On utilisera la fonction fprintf ( ) pour la sauvegarde des données.
Exercice5
FILE *fp ;
….
fp = fopen (« Annuaire », « a ») ;
…..
Dans boucle for : fprintf (fp, « …… », …..) ;
…..
fclose (fp) ;
….
struct date {
int jour ;
char mois [10] ;
int annee ;
};
struct adresse {
int no_rue ;
char rue [100] ;
int code_postal ;
char ville [30] ;
char pays [30] ;
};
struct Etudiant {
long CNE;
char nom [30] ;
char prenom [30] ;
struct date date_naiss ;
struct adresse ads ;
char email [30] ;
char phone [14] ;
char site_web [30] ;
};
Exercice6
…..
FILE *fp ;
….
fp = fopen (« fichier », « a ») ;
…..
fprintf (fp, « …… », …..) ;
…..
fclose (fp) ;
….
Exercice7
…..
FILE *fp ;
….
fp = fopen (« fichier », « a ») ;
…..
fprintf (fp, « …… », …..) ;
…..
fclose (fp) ;
….
Problème de synthèse
On souhaite gérer une base de données d'inscriptions pour l'organisation d'un congrès qui dure
une journée. Les organisateurs proposent aux participants de s'inscrire pour des repas, ainsi
que pour l'hébergement en hôtel. Un participant peut s'inscrire indépendamment aux 2 repas
proposés : déjeuner (150 dhs) et/ou dîner (350 dhs) ou aucun. Il n'est pas obligé de prendre un
hôtel. S'il en prend un, il peut choisir parmi 2 types d'hôtels différents : 2 étoiles (250 dhs) ou
3 étoiles (400 dhs). Un participant peut venir accompagné de son conjoint. Dans ce cas, la
réservation d'hôtel est identique mais lorsqu'un repas est sélectionné alors il faut en compter 2.
1) Créer un nouveau type Participant qui inclut son nom (chaîne de caractères : tableau de 20
caractères), son prénom (chaîne de caractères : tableau de 30 caractères), ainsi que toutes les
autres informations nécessaires à son inscription selon les critères définis ci-dessus. On
privilégiera une structure contenant un nombre minimal de champs.
2) Créer un nouveau type TabPart qui est un tableau de 100 éléments de type Participant.
3) Créer une fonction Nb2Etoiles qui, pour un argument de type TabPart donné, affiche le
nom et le prénom des personnes qui ont choisi de réserver un hôtel 2 étoiles. On pourra
utiliser la fonction printf avec pour format %s pour l'affichage des chaînes de caractères nom
et prénom.
4) Créer une fonction NbDej qui, pour un argument de type TabPart donné, retourne le
nombre de déjeuners à prévoir.
5) Créer une fonction Montant qui calcule, pour un Participant donné en argument, le montant
de sa facture.
typedef struct
{
char nom [20];
char prenom [30];
int dejeuner; // 0=non, 1=oui
int diner; // 0=non, 1=oui
int hotel; // 1=pas d'hotel, 2=2etoiles, 3=3etoiles
int seul; // 0=non, 1=oui
} Participant;
return nb;
}
int Montant(Participant p)
{
int total=0;
if (p.dejeuner==1)
total += 150;
if (p.seul==0)
total *= 2;
if (p.hotel==2)
total += 250;
if (p.hotel==3)
total += 400;
return total;
}