Langage c

fadoua -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,


#include<stdio.h>
#include<conio.h>
main () 
int max(int a,int b);
int n1,n2,n3;
printf("entrez le 1er nombre");
scanf("%d",&n1);
printf("entrez le 2eme nombre");
scanf("%d",&n2);
printf("entrez le 3eme nombre");
scanf("%d",&n3);
printf(" le max de ces 3 nombre est  %d " : MAX( MAX(n1,n2), MAX(n3)) );
int MAX(int a, double b)
{
 if (a>b)
     return a;
 else
     return b;
}


la question est : ecrire une fonction qui affiche le max de 3 nombre
mais cette fonction n'aarive pas à l'afficher
A voir également:

3 réponses

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour,
Il y a quelques erreurs : dans la fonction MAX vous comparez un int et un double le double ne doit pas être nécessaire vu que vous utilisez des int en entrée et que le prototype dans le main utilise des int.
Il faut mettre le prototype de la fonction en dehors du main et faire attention à la casse la distinction est faite entre minuscules et majuscules. Et dans le printf il y a un MAX(n3), MAX(int a, int b) prend deux paramètres
#include <stdio.h> 
#include <conio.h> 

int MAX(int a,int b); 

int main () 
{ 
   ... 
   return 0; 
} 
int MAX(int a, int b) 
{ 
 if (a>b) 
     return a; 
 else 
     return b; 
}

Le max de trois nombre dans le même principe :
int MAX(int a, int b, int c) 
{ 
/* si a>b (et si) a>c */ 
  if(a>=b && a>=c) 
     return a; 
  else if(b>=a && b>=c) 
     return b; 
  else 
     return c; 
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
@Hxyp,
Ton fonction MAX n'est pas correcte.
Par exemple, pour 5, 5, 3. Ca retournera 3 ;-))).
0
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Oops tout à fait là y a une grosse erreur j'ai oublié les égalités! j'ajoute la modification, merci fiddy !
0
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Une autre possibilité que je viens de découvrir en testant le "?:" https://en.wikipedia.org/wiki/%3F:#C d'une manière imbriquée :
int MAX(int a, int b,int c)
{
return (a>=b)&&(a>=c)?a:(b>=a)&&(b>=c)?b:c;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ah le fameux opérateur ternaire.
Et après on s'étonne que les codes sont illisibles. ^^
0
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Ahahah c'est vrai, mais ça reste sympa je trouve
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
l'idée du max entre le max de deux nombres et le troisième nombre était pas mal, pour le cas des trois nombres.

mais pourquoi faire max(b) ?

ça ne sert à rien, et en plus c'est impossible, d'après la déclaration de la fonction on ne peut prendre le max que entre deux nombres.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
ensuite fais attention aux majuscules / minuscules, et au type des variables qui, comme l'a dit Hxyp, ne sont pas cohérents dans ton code.
0
kiradu69190
 
C'est vrai que
printf(" le max de ces 3 nombre est %d " : MAX( MAX(n1,n2),n3) );
aurait sûrement mieux passé que
printf(" le max de ces 3 nombre est %d " : MAX( MAX(n1,n2), MAX(n3)) );
^^
0
Houssamnet Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
tu peux utilisé un tableau comme celui-là :

#include<stdio.h>
#include<conio.h>
main();
{float note[3],max;
int i;
clrscr();
for(i=0;i<3;i++){
printf("\n saisir la note N %d :",i+1);
scanf("%f",¬e[i]);}
max=note[0];
for(i=1;i<3;i++)
if(note[i]>max)
max=note[i];
printf("le maximum est : %f",max);
getch();
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Sauf que ton code contient des erreurs...
main();
main() renvoie un int. Donc : int main (void)
De plus, pas de point virgule après la définition d'une fonction.
clrscr();
Absolument pas portable. Ce n'est ni ansi ni posix.
getch();
Mieux que clrscr(), mais pas top quand même. Autant utiliser getchar(); qui est portable.
Il ne faut pas non plus oublier "return 0;" à la fin du programme pour dire que tout s'est bien déroulé.
Il ne faut pas non plus oublier le fflush du dernier printf ou alors mettre un \n pour aller à la ligne.
Et enfin, le float est à éviter. Sauf cas particulier, c'est mieux d'utiliser double.

Cdlt,
0