程序排序三个整数值



我正在尝试做一本书中的练习:编程—使用c++的原理和实践(第二版)

编写一个程序,提示用户输入三个整数值,然后输出这些值用逗号分隔的数字序列。因此,如果用户输入值10 4 6,则输出应该是4 6 10。如果两个值相同,它们应该一起排序。那么,输入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 themn";
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

对不起,我没有评论!

这样应该可以工作。将值写入数组,对其排序,然后打印出来。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int intArray[3] = {0, 0, 0};
    cout << "input 3 integers values with spaces between themn";
    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',看看这个

程序中的else部分与前面的if语句一起执行。所以,如果你的第一个if语句运行了,但是第二个if语句没有运行,那么else语句也会运行。例如,val1=4, val2=5, val3=6。根据你的代码:

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

为真,所以设置bigger=6。

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

为false,则else部分运行。

else {
             middle = val3;
    }

设置middle=6 在所有3种情况下使用if-else梯子,如下所示:

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

如果任何条件为真,则跳过梯子的其余部分

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

#include "std_lib_facilities.h"
int main()
{
    int a,b,c,temp;
    cout<<"enter three valuesn";
    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;    
}

如果你不想使用数组,你可以使用max,min函数

#include <bits/stdc++.h>
using namespace std;
int main () {
int num1,num2,num3;
cout << "enter three numbers :";cin >>num1>>num2>>num3;
if (num1<max(num1,max(num2,num3))&&(num1>min(num1,min(num2,num3))))
    cout << min(num1,min(num2,num3))<<' '<<num1<<' '<<(num1,max(num2,num3)) 
    <<endl;
else if (num2<max(num1,max(num2,num3))&&(num2>min(num1,min(num2,num3))))
    cout << min(num1,min(num2,num3))<<' '<<num2<<' '<<(num1,max(num2,num3)) 
     <<endl;

  else if (num3<max(num1,max(num2,num3))&&(num3>min(num1,min(num2,num3))))
    cout << min(num1,min(num2,num3))<<' '<<num3<<' '<<(num1,max(num2,num3)) 
  <<endl;

  }

最新更新