Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Par le professeur
Sabri My Abdelouahed
abdelouahed.sabri@usmba.ac.ma
TD Algorithmique et programmation C SMA S3
Exercice 2 :
Ecrire un programme C qui affiche la moyenne de quatre entiers entrés au clavier et qui
affiche leur moyenne en utilisant :
a. 5 variables.
b. 2 variables.
Exercice 4 :
Ecrire un programme qui demande à l’utilisateur d’entrer le prix hors taxes (PHT) d’un
article, le nombre d’articles (NA) et le taux de la taxe sur la valeur ajoutée (TTVA), puis qui
calcule et affiche le prix total toutes taxes comprises (PTTC). Avec :
PTTC=NA*PHT*(1+TTVA)
Exercice 5 :
Quel est le résultat d’exécution du programme C suivant :
#include "stdio.h"
void main()
{
int i,j;
i=0;
j=i++;
printf("1) i = %d \t j = %d \n", i, j);
j*=++i;
printf("2) i = %d \t j = %d \n", i, j);
i=i-(++i);
j=j-(j++);
printf("3) i = %d \t j = %d \n", i, j);
}
Exercice 2 :
Soit les programmes C suivant :
Exercice 4 :
Ecrire un programme C qui affiche 5 fois « J’apprends à programmer en "C" » utilisant :
1- for
2- while
3- do-while
Exercice 5 :
Ecrire un programme qui demande à l’utilisateur d’entrer un nombre n, de calculer et
d’afficher :
- la somme des entiers de 1 à n : ∑𝑛𝑘=1 𝐾
- le factoriel de ce nombre
Exercice 6 :
Ecrire un algorithme qui demande à l’utilisateur d’entrer un nombre n, et ensuite d’afficher
la table de multiplication de ce nombre,
Exemple : dans le cas où l'utilisateur entre le nombre 8, la table de multiplication de 8 est:
8x1=8
8 x 2 = 16
…
8 x 10 = 80
Exercice 1 :
Donner le résultat d’exécution des programmes suivants :
#include <stdio.h> #include <stdio.h>
main() main()
{ {
short a=51, b=-78, *ptr; float A=51, B, *P;
ptr=&a; P=&A;
printf("%d\t", *ptr); B = *P+1;
b=*ptr; *P = *P+10 ;
printf ("%d\t", b); *P += 2 ;
*ptr=0; ++*P ;
printf ("%d\t%d",b, a); (*P)++;
} printf("%.2f\t", *P);
}
Exercice 2 :
Modifier les programmes de l’exercice précédent pour permettre le même fonctionnement
mais sans utilisation de pointeurs
Exercice 3 :
Compléter le tableau suivant :
A B C P1 P2
Initialisation 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C
*P1=(*P2)++
P1=P2
P2=&B
*P1-=*P2
++*P2
*P1*=*P2
A=++*P2**P1
P1=&A
Exercice 4 :
Ecrire un programme, utilisant les pointeurs, qui permet de vérifier si un caractère saisi par
l’utilisateur est une consonne ou voyelle
Exercice 1 : (2pts)
#include <stdio.h>
void fct (int *A, int *B, int *C) ;
int x=3;
void main()
{
int x=6, y=-5, z=8;
printf("x=%d, y=%d et z=%d\n",x,y,z);
fct (&x, &y, &z);
printf("x=%d, y=%d et z=%d\n",x,y,z);
}
void fct (int *A, int *B, int *C)
{
int t;
t = *B;
x=55;
*B = *A;
*A=*C;
}
Exercice 2 : (4pts)
A B P1 P2
Initialisation 1 5 / /
P1=&A 1 5 &A /
P2=&B
*P1=++(*P2)
P1=P2
A= (*P2) - (*P1)++
Exercice 3 : (2pts)
Ecrire un programme C qui affiche la moyenne de cinq entiers saisis au clavier. Il faut utiliser
seulement deux variables.
Exercice 4 : (4pts)
1) Une fonction de prototype void saisie(float *aa, float *bb) pour demander à
l’utilisateur de saisir les valeurs de a et b,
2) Une fonction de prototype void calcul(float aa, float bb) pour résoudre l’équation et
ainsi afficher les résultats,
3) La fonction main() va faire appel aux fonctions saisie(&a, &b) et calcul(a, b).
A noter que a, b sont des variables locales à main().
Exercice 5 : (4pts)
Ecrire un programme C qui demande à l’utilisateur de saisir une ligne de texte (ne dépassant
pas 128 caractères) et la mémorise dans une variable « ligne » et ainsi affiche:
Questions de cours :
1. On peut classer les langages informatiques en trois catégories : langages interprétés,
langages compilés et langages intermédiaires. Donner brièvement la différence entre
ces trois catégories.
2. Donner, avec exemple, la différence entre conversion explicite et conversion implicite.
Exercice 1 :
Donner le résultat d’exécution du programme C suivant :
#include "stdio.h"
void main()
{
int i,j=6;
i=-5;
j=i++;
printf("1) i = %d \t j = %d \n", i++, j--);
i=i-(++i);
j=j-(j++);
printf("2) i = %d \t j = %d \n", i, j);
}
Exercice 2 :
Ecrire un programme C qui simule une calculatrice de 3 opérations *, +, -. À l’exécution,
l’utilisateur sera invité à saisir deux nombres ainsi que le type d’opération : + pour addition, -
pour soustraction et * pour multiplication et après lui afficher le résultat.
Remarque : Il faut utiliser la structure de contrôle switch-case
Exercice 3 :
Compléter le tableau suivant :
c A B C P1 P2
Initialisation 15 20 128 / /
P1=P2=&A
(*P2)++
P2=&C
P2=&B+C
*P2=*P1-16
P2=P2 – 128
*P2=++(*P1)-
17
Exercice 4 :
Ecrire un programme C qui affiche la « Table de multiplication » d’un nombre saisi au
clavier. Pour le faire il faut créer :
1) Une fonction pour demander à l’utilisateur de saisir un nombre et le stocker dans la
variable passée en argument
2) Une fonction pour afficher la table de multiplication d‘un nombre passé en argument
3) La fonction principale qui va faire appel aux deux fonctions
Exercice 5 :
Ecrire un programme C qui demande à l’utilisateur de saisir une ligne de texte (ne dépassant
pas 40 caractères) et la mémorise dans une variable « ligne » et affiche:
1) La longueur (taille) du texte en utilisant la fonction « strlen »,
2) Le nombre de consonnes contenues dans le texte.
Utiliser un tableau de voyelles.
3) Le texte à l’envers
Bonne chance
Informatique 3
Contrôle de fin de semestre (session normale) :
(Durée : 1h 30)
NB : Les documents ne sont pas autorisés
Exercice 1 : (2pts)
Exercice 2 : (6pts)
Variable A B P Q
Adresse Mémoire 7628 7624 7616 7608
A B P Q &P &Q
Initialisation 5 -14 / / 7616 7608
P=&A
Q=&B
*P = ++(*Q) -
(*Q)--
P-- ;
Q++ ;
(*P) -= (-14) ;
Exercice 4 : (4pts)
Déclarer un tableau de caractères et l’initialiser avec : 't', 'f', 'a', 'g','e', 'y', 'r'
Compter et afficher le nombre de caractères
Trier et afficher les caractères du plus petit au plus grand (ordre alphabétique)
Afficher les caractères dans l’ordre inverse
Exercice 5 : (2pts)
Ecrire un programme C qui demande à l’utilisateur de saisir une chaine caractères (de taille
maximale 255) et qui affiche ce texte en majuscule.
Exercice 1 :
#include "stdio.h"
void main()
{
int a,b,c,temp;
printf("Donner 3 variables\n");
scanf ("%d %d %d",&a,&b,&c);
printf("Les variables avant permutation: a=%d, b=%d et c=%d\n", a, b ,c);
temp=a;
a=c;
c=b;
b=temp;
printf ("Les variables après permutation: a=%d, b=%d et c=%d\n", a ,b ,c);
}
Exercice 2 :
a- Avec 5 variables
#include "stdio.h"
void main()
{ int a,b,c,d,moy;
printf("Donner 4 entiers \n");
scanf ("%d %d %d %d",&a,&b,&c, &d);
moy=(a+b+c+d)/4;
printf ("La moyenne est: %d", moy);
}
b- Avec 2 variables
#include "stdio.h"
void main()
{ int a,moy;
printf("Donner 4 entiers \n");
scanf ("%d",&a);
moy=a;
scanf ("%d",&a);
moy=moy+a;
scanf ("%d",&a);
moy=moy+a;
scanf ("%d",&a);
moy=moy+a;
printf ("La moyenne est: %d", moy/4);
}
Exercice 3 :
#include "stdio.h"
void main()
{
int NA;
float PTTC,PHT,TTVA;
printf ("Entrer le prix HT:");
scanf("%f",&PHT);
Exercice 4 :
Après exécution, on aura sur la console :
1) i = 1 j=0
2) i = 2 j=2
3) i = 0 j=1
Exercice 1 :
#include "stdio.h"
void main()
{
int a,b;
printf("Entrer deux valeurs:\n");
scanf("%d",&a);
scanf("%d",&b);
printf("La plus petite des valeurs saisies est:");
if (a<b)
printf("%d",a);
else
printf("%d",b);
}
Exercice 2 :
i= 0 i= 1 i= 0
i= 1 i= 2 i= 2
i= 2 i= 3 i= 4
i= 3 i= 4 i egale a 6
i= 4 i= 5
i= 5 i egale a 6
i égale à 6
Exercice 3 :
1- for
#include <stdio.h>
void main ()
{
int i=0;
//1- Utilisant la boucle for
for (i=0; i<5; i++)
{
printf ("J'apprends à programmer en C\n");
}
}
2- while
#include <stdio.h>
void main ()
{
int i=0;
while (i<5)
{
printf ("J'apprends à programmer en C\n");
i++;
}}
Exercice 4 :
1- la somme des n premiers éléments
#include <stdio.h>
void main ()
{
int i,n,S=0;
printf("Entrer un nombre:");
scanf("%d",&n);
for (i=0;i<=n;i++)
S=S+i;
printf ("La somme des %d premiers éléments est: %d\n",n,S);
}
2- Le factoriel d’un nombre
#include <stdio.h>
void main ()
{
int i,n,F=1;
printf("Entrer un nombre:");
scanf("%d",&n);
for (i=1;i<=n;i++)
F=F*i;
printf ("Le factoriel de %d est %d\n",n,F);
}
Exercice 5 :
#include <stdio.h>
void main ()
{
int i,n;
printf("Entrer un nombre:");
scanf("%d",&n);
//a- le factoriel
for (i=1;i<=10;i++)
printf("%d x %i = %d\n", n, i, n*i);
}
for (i=0; i<l;i++) // les indices commencent par o et se terminent par l-1
{
printf("Tableaux[%d]=%d\n",i,tbl[i]);
}
}
Exercice 2:
#include <stdio.h>
main()
{
int tbl[255]; // on choisit une taille maximale
int i, l; // l sera la taille réelle que l'utilisateur va saisir
int temp;
printf ("Entre le nombre d'élément du tableau: ");
scanf("%d",&l); // ne pas oublier l'adresse
for (i=0; i<l;i++) // les indices commencent par o et se terminent par l-1
{
printf("Entrer l'élément num: %d= ", i+1);
scanf("%d",&tbl[i]);
}
// Tri par ordre croissant
for (i=0; i<l; i++)
{
for (int j=i+1; j<l; j++)
{
if (tbl[i]>tbl[j])
{
temp=tbl[i];
tbl[i]=tbl[j];
tbl[j]=temp;
}
}
}
printf("Affichage dans un ordre décroissant\n");
for (i=0; i<l;i++)
{
printf("Tableaux[%d]=%d\n",i,tbl[i]);
}
Exercice 4 :
#include <stdio.h>
void main ()
{
int i, j , N, compt=0, t[]= {1,25, 87, -85, 80, 80, 25, 25, 87, 1, 85}, tIndice[11];
printf("Entrer la valeur a chercher: \n");
scanf("%d",&N);
for (i=0; i<11; i++)
{
if (t[i]==N)
{
tIndice[compt]=i;
compt++;
}
}
if (compt>0)
{
printf ("Le chiffre %d apparait %d fois aux indices: ", N,compt);
for (j=0;j<compt;j++) printf("%d\t", tIndice[j]);
}
else printf("Aucune occurrence n'est trouvée pour %d\n", N);
}
Exercice 5 :
void main()
{
/* Déclarations */
int I, J, T[3][2]={5, 8, -22, 33, 55,0}; /* tableau donné */
void affiche()
{
for (int i=0; i<10; i++)
{
printf("Elément numéro %d: %d et son adresse: %d\n", i, tab[i], &tab[i]);
}
}
void saisir()
{
for (int i=0; i<10; i++)
{
printf("Elément l'élément d'indice %d: ", i);
scanf("%d",&tab[i]);
}
}
int indice()
{
int ind;
for (int i=0; i<9; i++)
}
void tri()
{
int I,IndiceMin, J, temp;
for (I=0; I<(sizeof(tab)/sizeof(int)) -1; I++)
{
Exercice 1 :
char b[12] = "un deux trois"; est incorrecte car la taille de la chaine , qui est 13, est supérieure
à la taille réservée pour la variable b
char c[] = 'abcdefg' et char d[1] = 'x';
Sont des déclarations incorrectes ; car les chaines sont déclarées entre ""
Exercice 2 :
#include <stdio.h>
main()
{
/* Déclarations */
char ligne[201]; /* chaîne donnée */
int i,j, compt; /* indices courants */
int L; /* longueur de la chaîne */
int C; /* compteur des lettres 'e' */
/* Saisie des données */
printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(ligne); /* L'utilisation de scanf est impossible pour */
/* lire une phrase contenant un nombre variable de mots. */
Exercice3 :
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{
char NOM[40];
Exercice 4:
#include <stdio.h>
main()
{
/* Déclarations */
int a;
char JOURS[7][9] = {"lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi","dimanche"};
/* Saisie du nombre */
printf("Entrez un nombre entre 1 et 7 : ");
scanf("%d", &a);
/* Affichage du résultat */
if (a>0 && a<8)
printf("Le %d jour de la semaine est %s.\n",a, JOURS[a]);
else
printf("entrer un nombre entre 1 et 7 :\n");
return 0;
}
Exercice 5:
#include <stdio.h>
#include <string.h>
void MajJour (char *);
main()
{
/* Déclarations */
int a; /* nombre entré */
char JOURS[7][9] = {"lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi","dimanche"};
/* Saisie du nombre */
printf("Entrez un nombre entre 1 et 7 : ");
scanf("%d", &a);
/* Affichage du résultat*/
if (a>0 && a<8)
{
MajJour(JOURS[a-1]); // ici un passage par référence est utilisé
printf("Le %d jour de la semaine est %s.\n",a, JOURS[a-1]);
}
else
Exercice 6:
#include <stdio.h>
#include <string.h>
main()
{
char txt1[255], txt2[255];
int i, j, l1,l2;
printf("entrer la 1ére chaine \n");
gets(txt1);
printf("entrer la 2éme chaine \n");
gets(txt2);
// a) sans strcat
l1=strlen(txt1);
l2=strlen(txt2);
for (i=l1,j=0; i<l1+l2+1;i++, j++)
txt1[i]=txt2[j];
puts(txt1);
// Avec strcat
printf("entrer la 1ére chaine \n");
gets(txt1);
printf("entrer la 2éme chaine \n");
gets(txt2);
strcat (txt1,txt2);
puts(txt1);
}
Exercice 7:
#include <stdio.h>
#include <string.h>
#include "ctype.h"
void MajJourChaine (char * texte)
{
int i;
// Mettre chaque caractère en majuscule de la chaine passée
for (i=0; i<strlen(texte); i++)
texte[i]=toupper(texte[i]);
}
main()
{
char txt1[255], txt2[255];
int i, j, l1,l2;
printf("entrer la 1ére chaine \n");
Initialisation 15 20 128 / /
}
void saisir (int *a)
{
printf("Entrer un nombre: ");
scanf("%d", a);
}
void afficheTableMultiplication(int b)
{
for (int i=0; i<=9; i++)
printf("%d x %d = %d\n", b, i, b*i);
}
Exercice 5 :
#include <stdio.h>
#include "string.h""
main()
{
char ligne[40], ligneEnvers[40];
char voy[]={'a','e', 'i', 'o', 'u', 'y'};
int l,compt=0;
puts("Entrer le texte:");
gets(ligne);
l=strlen(ligne);
printf("la taille du texte saisi est: %d\n", l);
for (int i=0; i<l ;i++)
{
for (int j=0; j<6; j++)
{
if (ligne[i]==voy[j])
compt++;
}
}
printf ("Le nombre de voyelles est: %d\n", compt);
// Texte à l'envers
for (int i=0; i<l; i++)
{
ligneEnvers[i]= ligne[l-i-1];
}
ligneEnvers[l]='\0'; // caractère de fin de texte
puts(ligneEnvers);
}
Questions de cours :
Voir le support de cours.
Exercice 1 :
#include "stdio.h"
int main()
{
float a, b ,c;
printf("entrer 3 nbres:\n");
scanf("%f%f%f", &a,&b,&c);
printf("la moyenne est %f", (a+b+c)/3);
return 0;
}
Exercice 2 :
Soit la déclaration des variables suivantes :
int A, B, *P, *Q.
Le tableau suivant représente les cases mémoires des variables :
Variable A B P Q
Adresse Mémoire 7628 7624 7616 7608
A B P Q &P &Q
Initialisation 5 -14 / / 7616 7608
P=&A 5 -14 7628 / 7616 7608
Q=&B 5 -14 7628 7624 7616 7608
*P = ++(*Q) -
0 -14 7628 7624 7616 7608
(*Q)--
P-- ;
Q++ ; 0 0 7624 7628 7616 7608
(*P) -= (-14) ;
P pointe sur la case mémoire dont l’adresse est 7628 (Case A) P—implique que P va
pointer sur la case juste à côté : 7624 (Case B)
De même pour Q qui ponté sur la case 7624 : Q++ implique que Q va pointer sur la case 7628
(*P) -= (-14) (*P) = (*P) – (14) P pointe sur B alors B=B+14= (-14) + 14 =0
Exercice 3 :
#include "stdio.h"