Exercices corrigés sur les pointeurs et fonctions – Langage C
Exercices corrigés sur les pointeurs et fonctions N°1 Langage C
Exercice 1
Écrire une fonction qui permet de rechercher dans un tableau d’entiers tab une valeur A. void chercherVal (int tab[], int n, int A, int *pos, int *nb_occ); Dans pos, la fonction sauvegarde l’indice de la dernière apparition et -1 si la valeur n’a pas été trouvée. Dans nb_occ, elle sauvegarde le nombre d’occurence de A dans tab.
Solution
#include<stdio.h>
#define N 100
void chercherVal (int tab[], int n, int A, int *pos, int *nb_occ);
// int *tab ========== int tab[]//µµµµ*******************************
void saisie(int *ptab,int *pn); //ou int tab[]
void affiche(int tab[],int n);
void main()
{
int tab[N],n,val,nb_occ=0,pos=-1;;
saisie(tab,&n);
affiche(tab,n);
printf(“\n Donner la val a chercher \n”); // SERT LORSKE unr fction A appelle B et B appelle A
scanf(“%d”,&val);
chercherVal(tab,n,val,&pos,&nb_occ);
if(nb_occ==0 )printf(“NEXISTE PAS”);
else printf(“Existe %d fois à la position %d “,nb_occ,pos);
}
void chercherVal (int tab[], int n, int A, int *pos, int *nb_occ)
{
int i=0;
while(i<n)
{
if(tab[i]==A)
{
//nb_occ=*nb_occ+1;
(*nb_occ)++;
*pos=i;
}
i++;
}
}
void saisie(int *ptab,int *pn) //ou int tab[]
{
int i;
do{
printf(“Donner la taille du tableau \n”);
scanf(“%d”,pn);
}while(*pn<=0);
for(i=0;i<*pn;i++)
{
printf(“Donner tab[%d] “,i);
scanf(“%d”,ptab+i); // OU &tab[i]
}
}
void affiche(int tab[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf(” %d | “,tab[i]);
}
}
Exercices corrigés sur les pointeurs et fonctions N°2 – Langage C
Exercice 2
On souhaite écrire une fonction qui permet de résoudre une équation du premier degré : ax+b=0. Voici le prototype de la fonction : int resoudre1(int a, int b, float *x);
la fonction retourne le nombre de solution trouvé (0: pas de solution, 1: une solution, -1: tout x est solution). Dans le cas où l’équation a une solution, la fonction retourne la solution dans x.
Solution
#include <stdio.h>
int resoudre1(int a, int b, float *x);
int main()
{
int a,b;
float x;
int res;
printf(“Donner a et b de ax+b \n”);
scanf(“%d %d”,&a,&b);
res=resoudre1(a,b,&x);
if(res==0) printf(“Pas de resultat de %d X+ %d “,a,b);
else if(res==-1) printf(“les solutions de %d X+ %d : X appartient a R”,a,b);
else (“Unique resultat de %d X+ %d est %.3f”,a,b,x);
return 0;
}
int resoudre1(int a, int b, float *x)
{
if ((a==b)&&(b!=0)) return 0;
if((a==0)&&(b==0)) return -1;
*x=-(float)b/a;
return 1;
}