Vous êtes sur la page 1sur 9

Atelier Programmation II

Module : Atelier Programmation II


Correction du TP 1 : Les pointeurs, Les fonctions, Les chaînes de caractères

Exercice 1
A B C p1 p2
Init 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C 1 2 3 &A &C
p1=p2 1 2 3 &C &C
p2=&B 1 2 3 &C &B
*p1=*p2 1 2 2 &C &B
(*p1)++ 1 2 3 &C &B
*p1*=*p2 1 2 6 &C &B
*p2=*p1/=*p2 1 3 3 &C &B
A=++*p2**p1 12 4 3 &C &B

Exercice 2
#include <stdio.h>
#include <conio.h>

void lecture(int *x,int *y,int *z)


{
printf("donner le premier entier:");
scanf("%d",x);
printf("donner le deuxième entier:");
scanf("%d",y);
printf("donner le troisième entier:");
scanf("%d",z);
}
int somme(int x,int y,int z)
{
int s;
s=x+y+z;
return s;
}
void affiche(int s)
{
printf("la somme est %d\n",s);
}
void main()
{
int x,y,z,s;
clrscr();
lecture(&x,&y,&z);
s=somme(x,y,z);
affiche(s);
getch();
}

Licence 1 STICL1C 1 2021-2022


Atelier Programmation II

Exercice 3

a) *p+2  affiche la valeur 14


b) *(p+2)  affiche la valeur 34
c) &p+1  affiche l’adresse de p+1
d) &T[4]-3  affiche l’adresse du premier élément du tableau
e) T+3  affiche l’adresse du troisième élément du tableau
f) &T[7]-p  affiche la valeur 7
g) p+(*p-10)  affiche l’adresse du deuxième élément du tableau
h) *(p+*(p+8)-T[7])  affiche la valeur du premier élément du tableau

Exercice 4
#include<stdio.h>
#include<conio.h>
void remplir(int *t,int *n)
{
int i;
do
{
printf("donner la taille du tableau:");
scanf("%d",n);
}
while(*n>50);
for(i=0;i<*n;i++)
{
printf("donner un entier t[%d]:",i);
scanf("%d",&t[i]);
}
}
void permuter(int *x,int *y)
{
int AIDE;
AIDE=*x;
*x=*y;
*y=AIDE;
}
void inverser(int *t,int n)
{
int *p1,*p2;
for(p1=&t[0],p2=&t[n-1];p1<=p2;p1++,p2--)
permuter(p1,p2);
}
void afficher(int *t,int n)
{
int *p,i;
p=t;
printf("les ‚l‚ments du tableau en ordre inverse sont:\n");
for(i=0;i<n;i++)
printf("%d\t",*(p+i));
}

Licence 1 STICL1C 2 2021-2022


Atelier Programmation II

void main()
{
int t[50],n;
clrscr();
remplir(t,&n);
inverser(t,n);
afficher(t,n);
getch();
}

Exercice 5
#include <stdio.h>
#include <conio.h>
void lecture(int *t,int *n)
{
int i;
do
{
printf("donner la valeur de n:");
scanf("%d",n);
}
while((*n)>50);
for(i=0;i<(*n);i++)
{
printf("donner un entier:");
scanf("%d",t+i);
}
}
void affiche(int t[],int n)
{
int i;
for(i=0;i<n;i++)
printf("\t%d",t[i]);
}
void supprime(int *t,int *n,int x)
{
int i,j;
for(i=0;i<(*n)-1;)
{
if(t[i]==x)
{
for(j=i;j<*n;j++)
t[j]=t[j+1];
(*n)--;
}
else
i++;
}
if(t[i]==x)
(*n)--;

Licence 1 STICL1C 3 2021-2022


Atelier Programmation II

}
void main()
{
int t[50],n,x;
clrscr();
lecture(t,&n);
printf("\nle tableau initial est:\n");
affiche(t,n);
printf("\ndonner la valeur … supprimer");
scanf("%d",&x);
supprime(t,&n,x);
printf("\nle tableau aprŠs suppression de %d est:\n",x);
affiche(t,n);
getch();
}

Exercice 6
#include <stdio.h>
#include <conio.h>
void lecture(int *t,int *n)
{
int i;
do
{
printf("donner la valeur de n:");
scanf("%d",n);
}
while((*n)>50);
for(i=0;i<(*n);i++)
{
printf("donner un entier:");
scanf("%d",t+i);
}
}
void affiche(int t[],int n)
{
int i;
for(i=0;i<n;i++)
printf("\t%d",t[i]);
}
int existe(int *t,int n,int i,int x)
{
while(i<n&&t[i]!=x)
i++;
if(i==n)
return 0;
else
return 1;
}

Licence 1 STICL1C 4 2021-2022


Atelier Programmation II

void main()
{
int t[50],n,x;
clrscr();
lecture(t,&n);
printf("\nle tableau initial est:\n");
affiche(t,n);
printf("\ndonner la valeur … chercher:");
scanf("%d",&x);
if(existe(t,n,0,x)==1)
printf("\nl'‚l‚ment %d existe\n",x);
else
printf("\nl'‚l‚ment %d n'existe pas\n",x);
getch();
}

Exercice 7
#include <stdio.h>
#include <conio.h>
void lecture(int *t,int *n)
{
int i;
do
{
printf("donner la valeur de n:");
scanf("%d",n);
}
while((*n)>50);
for(i=0;i<(*n);i++)
{
printf("donner un entier:");
scanf("%d",t+i);
}
}
void affiche(int t[],int n)
{
int i;
for(i=0;i<n;i++)
printf("\t%d",t[i]);
}
void permuter(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}

Licence 1 STICL1C 5 2021-2022


Atelier Programmation II

void tri_sel(int *t,int n)


{
int i,j,ind_min;
for(i=0;i<n-1;i++)
{
ind_min=i;
for(j=i+1;j<n;j++)
if(t[ind_min]>t[j])
ind_min=j;
if(ind_min!=i)
permuter(t+ind_min,t+i);
}
}
void main()
{
int t[50],n;
clrscr();
lecture(t,&n);
printf("\nle tableau initial est:\n");
affiche(t,n);
tri_sel(t,n);
printf("\nle tableau tri‚ est:\n");
affiche(t,n);
getch();
}

Exercice 8
#include<stdio.h>
#include<conio.h>
void lecture1(char *ch1,char *ch2)
{
printf("donner une première chaine:");
scanf("%s",ch1);
printf("donner une deuxième chaine:");
scanf("%s",ch2);
}
void lecture2(char *ch1,char *ch2)
{
printf("donner une première chaine:");
gets(ch1);
printf("donner une deuxième chaine:");
gets(ch2);
}

void affiche1(char *ch1,char *ch2)


{
printf("chaine1=%s\n",ch1);
puts(ch2);
}

Licence 1 STICL1C 6 2021-2022


Atelier Programmation II

int compare(char *ch1,char *ch2)


{
return(strcmp(ch1,ch2));
}
void main()
{
char ch1[20],ch2[20],*ch3,ch4[20];int r;
ch3=(char*)malloc(20*sizeof(char));
clrscr();
//lecture1(ch1,ch2);
//affiche1(ch1,ch2);
//lecture2(ch1,ch2);
//affiche2(ch1,ch2);
printf("donner une chaine:");
scanf("%s",ch3);
//printf("la taille est: %d\n",strlen(ch3));
/*r=compare(ch1,ch2);
if(r==0)
printf("les deux chaines sont identiques\n");
else if(r<0)
printf("chaine1<chaine2\n");
else
printf("chaine1>chaine2\n");*/
/*printf("la concatenation est: %s\n",strcat(ch1,ch2));*/
strcpy(ch4,ch3);
printf("ch4=%s\n",ch4);
printf("la chaine inversee est : %s\n »,strrev(ch4)) ;
getch();
}

Exercice 9
#include <stdio.h>
#include <conio.h>
void lecture(char *ch)
{
printf("donner une chaine de caractŠres:");
scanf("%s",ch);
}
int palin(char ch[])
{
char copie[10];
strcpy(copie,ch);
strrev(copie); /*inverse la chaine copie*/
if(strcmp(ch,copie)==0)
return 1;
return 0;
}

Licence 1 STICL1C 7 2021-2022


Atelier Programmation II

void main()
{
char ch[10];int res;
clrscr();
lecture(ch);
res=palin(ch);
if(res==1)
printf("la chaine %s est palindrome\n",ch);
else
printf("la chaine %s n'est pas palindrome\n",ch);
getch();
}

Exercice 10
#include <stdio.h>
#include <conio.h>
void lecture(char *t,int *n)
{
int i;
do
{
printf("donner la valeur de n:");
scanf("%d",n);
}
while((*n)>=5);
for(i=0;i<(*n);i++)
{
printf("donner un caractŠre:");
scanf(" %c",t+i); /*noter l’espace avant %c qui permet de vider le tampon*/
}
}
void affiche(char t[],int n)
{
int i;
printf("\nle tableau initial est:\n");
for(i=0;i<n;i++)
printf("\t%c",t[i]);
}
int verif(char *t,int n)
{
int i=0;
while(i<n&&isdigit(t[i])) /*isdigit(c) est une fonction standard qui permet de tester est ce
que le caractère c est un chiffre ou non*/
i++;
if(i==n)
return 1;
return 0;
}

Licence 1 STICL1C 8 2021-2022


Atelier Programmation II

int trans(char *t,int n)


{
int i,s=0;
for(i=n-1;i>=0;i--)
s=s+(t[i]-'0');
return s;
}
void main()
{
char t[4];int n,res;
clrscr();
lecture(t,&n);
affiche(t,n);
res=verif(t,n);
if(res==1)
{
printf("\nle tableau est valide\n");
printf("la transformation en entier est: %d\n",trans(t,n));
}
else
printf("\nle tableau n'est pas valide,transformation impossible\n");
getch();
}

Licence 1 STICL1C 9 2021-2022

Vous aimerez peut-être aussi