用于对三个整数值进行排序的程序

时间:2015-08-02 10:13:57

标签: c++

我试图从书中进行练习:编程 - 使用C ++的原理和实践(第二版)

  

编写一个程序,提示用户输入三个整数值,然后输出值   用逗号分隔的数字序列。因此,如果用户输入值10 4 6,则输出   应该是4,6,10。如果两个值相同,它们应该一起订购。所以,输入   4 5 4应该给4,4,5。

这就是我所做的:

#include "std_lib_facilities.h"

int main(){
int val1 = 0;
int val2 = 0;
int val3 = 0;

cout << "input 3 integers values with spaces between them\n";
cin >> val1 >> val2 >> val3; 

int bigger = 0;
int middle = 0;
int smallest = 0;

    if(val1 >= val2 && val1 >= val3) {
     bigger = val1;
    }
    if (val1 <= val2 && val1 <= val3) {
     smallest = val1;
    }
    else {
    middle = val1;
    }


    if(val2 >= val1 && val2 >= val3) {
         bigger = val2;
     }
    if (val2 <= val1 && val2 <= val3) {
         smallest = val2;
     }
    else {
    middle = val2;
    }


    if(val3 >= val1 && val3 >= val2) {
             bigger = val3;
    }
    if (val3 <= val1 && val3 <= val2) {
             smallest = val3;
         }
    else {
             middle = val3;
    }
cout << smallest << " " << middle << " " << bigger << '\n';
return 0;
}

该程序适用于某些值但不是全部,即: 当val3大于val1和val2时,我认为最后有一个问题: else {middle = val3; }

纠正Strousput:http://stroustrup.com/Programming/Solutions/Ch3/e3-6.cpp

对不起,我没有发表任何评论!

3 个答案:

答案 0 :(得分:1)

这样的事情应该有效。将值写入数组,对其进行排序然后打印。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int intArray[3] = {0, 0, 0};

    cout << "input 3 integers values with spaces between them\n";
    cin >> intArray[0] >> intArray[1] >> intArray[2]; 

    //Since you are using std you should have this sort method
    sort(intArray, intArray + 3);

    cout << intArray[0] << ", " << intArray[1] << ", " << intArray[2];

    return 0;
}

如果您不能使用'sort',请看一下 sorting int array with only 3 elements

答案 1 :(得分:1)

程序中的else部分与前面的if语句一起使用。因此,如果您的第一个if语句运行但第二个if语句没有运行,那么else语句也将运行。 例如,val1 = 4,val2 = 5,val3 = 6。 根据你的代码:

if(val3 >= val1 && val3 >= val2) {
             bigger = val3;
    }

这是真的,所以它设置更大= 6。然后

if (val3 <= val1 && val3 <= val2) {
             smallest = val3;
         }

这是假的,所以你的其他部分会运行。

else {
             middle = val3;
    }

设置中= 6。 对所有3种情况使用if-else梯形图如下:

if(val3 >= val1 && val3 >= val2) {
             bigger = val3;
    }
    else if (val3 <= val1 && val3 <= val2) {
             smallest = val3;
         }
    else {
             middle = val3;
    }

如果任何条件为真,那么梯子的剩余部分就会被通过。

答案 2 :(得分:0)

我也在做同样的运动,我想出了这个解决方案

#include "std_lib_facilities.h"
int main()
{
    int a,b,c,temp;
    cout<<"enter three values\n";
    cin>>a>>b>>c;
    if(a>b && a>c)
    {
        temp=c;
        c=a;
        a=temp;
        if(a>b)
        {
            temp=b;
            b=a;
            a=temp;
        }
    }
    if(b>a && b>c)
    {
        temp=c;
        c=b;
        b=temp;
    }
    cout<<a<<','<<b<<','<<c;    
}