我试图显示我输入的三个值中的最大和最小数量

时间:2014-01-28 10:59:35

标签: c++ algorithm function

这是我正在进行的任务。我很确定这是我错过的一些小事,但是看到我在为其他课程学习后我正努力工作,我相信另一组眼睛可以帮助我。我应该有这样的事情:

please enter first value---> 5.2
please enter second value---> 1.0
please enter third value-->7.1

smallest value: 1.0
largest value: 7.1

然而,得到一些奇怪的数字,如002C128F为最小值,002C128A为最大值。 我将不胜感激任何反馈。我不是要求完成我的作业。我只是想得到一些指导,看到我被卡住了。也许我的if陈述错了?感谢您的时间。

#include <iostream>

using namespace std;

double min2 (double &a, double &b,double &c)
{  
    double min=0;

    if(a<b)
        min= a;
    else 
        min=b;

    if (c<b)
        min=c;

    return min;
}    

double max2(double &a, double &b, double &c)
{   
    double max=0;

    if(a>b)
        max=a;          
    else 
        max=b;

    if (c>b)
        max=c;

    return max;        
}

int main()
{ 
    double a,b,c=0;

    min2(a,b,c);
    max2(a, b, c);

    cout << "Author: Jose Soto.\n";

    cout<<"enter first value: ";
    cin>>a;
    cout<<"enter second value: ";
    cin>>b;
    cout<<"enter third value:";
    cin>>c;

    cout<<"The smallest value is: "<<min2<<endl;
    cout<<"The largest value is: "<<max2<<endl;

}

6 个答案:

答案 0 :(得分:5)

从不使用min2max2函数的返回值。您正在打印函数的地址。

也许你正在寻找:

// ...
cout << "The smallest value is: " << min2(a, b, c) << endl;
cout << "The largest value is: " << max2(a, b, c) << endl;

您必须在获得用户输入后调用这些函数,而不是之前。

答案 1 :(得分:1)

cout<<"The smallest value is: "<<min2<<endl;打印函数的地址,它不会调用它。

将其更改为

cout<<"The smallest value is: "<<min2(a,b,c)<<endl;

答案 2 :(得分:1)

除了已经讲过的内容之外,您的功能也存在逻辑错误:

if (c<b)
  min=c;

应该是

if (c<min)
  min=c;

同样适用于最大

答案 3 :(得分:1)

你得到一些奇怪的数字,因为你传递给函数min2和max2未初始化的变量a和b。您只用0初始化变量c。

int main()
{ double a,b,c=0;

   min2(a,b,c);
   max2(a, b, c);

首先,您必须输入变量a,b,c的值,然后才能输入变量min2和max2。

他们自己的功能也是无效的。并且没有必要将它们的参数声明为引用。

在这些陈述中

cout<<"The smallest value is: "<<min2<<endl;
cout<<"The largest value is: "<<max2<<endl;

你没有调用这些功能。您输出他们的地址。

有效代码可以采用以下方式:

#include <iostream>

using namespace std;

double min( double a, double b, double c )
{  
   double min = a;

   if ( b < min ) min = b;
   if ( c < min ) min = c;

   return min;
}

double max( double a, double b, double c )
{   
    double max = a;

    if ( max < b ) max = b;
    if ( max < c ) max = c;

    return max;
}

int main()
{ 
    double a, b, c;

    cout << "Author: Jose Soto.\n";

    cout << "enter first value: ";
        cin >> a;
    cout << "enter second value: ";
        cin >> b;
    cout << "enter third value:";
        cin >> c;

   cout << "The smallest value is: " << min( a, b, c ) << endl;
   cout << "The largest  value is: " << max( a, b, c ) << endl;

    return 0;
}

考虑到标准C ++库已经具有std :: min和std :: max的功能。例如,您可以将它们称为

std::min( { a, b, c } );
std::max( { a, b, c } );

答案 4 :(得分:0)

试试这个

#include <iostream>
#include <string.h>
using namespace std;

int findMax(int a, int b, int c)
{
 if(a > b)
 {
   if(a > c)
   {
    return a; 
   }
   else
   {
     return c;
   }
 }
 if( b > c)
 {
   return b; 
 }
 else
 {
   return c;
 }
}

main()
{
  int a,b,c;

  cout<<"enter first value: ";
  cin>>a;

  cout<<"enter second value: ";
  cin>>b;

  cout<<"enter third value:";
  cin>>c;

  cout<<"\nA : "<<a<<endl;
  cout<<"\nB : "<<b<<endl;
  cout<<"\nC : "<<c<<endl;
  cout<<"\nMax : "<<findMax(a,b,c)<<endl;
}

答案 5 :(得分:-1)

以下两个功能:

double min2 (double &a, double &b,double &c)
double max2(double &a, double &b, double &c)

您已使用&后跟变量名。&用于通过地址调用函数调用(即它使用指针存储函数期间发送的参数的地址)呼叫。 有两种类型的函数调用: 1.Call by Value 2.致电地址 按值调用仅复制值,并且通常在所做的更改不会反映到原始变量时使用。 例如:

void increment(int a)
{
a++;
cout<<a;
}
int main()
{
int x=5;
cout<<x;
increment(x);
cout<<x;
return 0;
}

输出: 五 6 5

所以使用没有& s

的函数