菜鸟再次求救!C语言3个数小到大排,为何3个if就行?if里面的赋值为啥要这样,求解释,谢了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟再次求救!C语言3个数小到大排,为何3个if就行?if里面的赋值为啥要这样,求解释,谢了相关的知识,希望对你有一定的参考价值。

main()

int a,b,c,t;
printf("enter a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b) t= b;b= a;a= t;
if(a>c) t=c;c=a; a =t;
if(b>c) t= c; c= b;b =t;
printf("result is:%d %d %d", a,b,c);

其实,你那三个if语句可以直接可以用一下这个代替:
t=a>b?(a>c?a:c):(b>c?b:c);
printf("%d",t);
输入三个数,将最大的数给t就可以了。

至于你写的那三个if语句里面的东西,为啥是那样写,给你举一个简单的例子,比如:有红酒、白酒各一瓶,如果想使得这两个装满酒的瓶子互换一下(即装白酒的装红酒,装红酒的装白酒),这就的考虑用另外一个空瓶,将其中的一瓶先倒出来,然后再将另一瓶倒入空瓶。如果你不使用空瓶的话,会是一瓶酒白白的浪费丢失。
t为空瓶
t=a(第一步将a瓶中的酒倒入空瓶) 此时t变为满的,a为空瓶
a=b(第二步将b瓶中的酒倒入空瓶) 此时a变为满瓶,b为空瓶
b=t (第二步将t瓶中的酒倒入空瓶) 此时b变为满瓶,t为空瓶

希望对你有帮助!
参考技术A //程序的思想是a始终保存最小的数
if(a>b) t= b;b= a;a= t;;//执行完后得到a<=b的结果
if(a>c) t=c;c=a; a =t;//执行完后得到a<=c的结果
if(b>c) t= c; c= b;b =t;//执行完后得到b<=c的结果
所以由a<=b,b<=c,就可以得到a<=b<=c
参考技术B 第一个if保证a比b小,第二个if保证a比c小,这样a已经最小了,第三个if又让b比c小,结果达到排序的目的 参考技术C 第一个if使 a 小于 b
第二个if使 a 小于 c
第三个if使 b 小于 c
参考技术D t是个中间存储变量

【向大虾求助,C语言编程问题,C++】输入三个int整数x,y,z,请把这三个数由小到大输出。(注

【向大虾求助,C语言编程问题,C++】输入三个int整数x,y,z,请把这三个数由小到大输出。(注意:x,y,z为不重复的三个数) 〖帮助分析:想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。(需要定义临时变量)〗

//#include "stdafx.h"//If the vc++6.0, with this line.
#include <iostream>
using namespace std;
int main(int argv,char *argc[])
int x,y,z,t;
cout << "Input 3 integers...\\n";
cin >> x >> y >> z;
if(x>y)
t=x,x=y,y=t;
if(x>z)
t=x,x=z,z=t;
if(y>z)
t=y,y=z,z=t;
cout << x << ' ' << y << ' ' << z << endl;
return 0;

运行样例:

参考技术A /*这个就是最简单的比大小了*/

#include <stdio.h>

// 利用指针将两个数进行交换
void swap(int * a,int * b)
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;


int main(void)
    int x,y,z,i,j;// i 和 j 是循环变量
    
    int arr[3] = 0
    //从键盘获取三个int 型整数
    for(i = 0; i< 3 ; i++)
        scanf("%d",&arr[i]);
    
    
    //下面是排序逻辑
    for(i = 0;i < 2;i++)
        for(j = i+1; j< 3;j++)
            if(arr[i] > arr[j])
                swap(&arr[i],&arr[j]);
            
        
    
    
    //将排序的最终结果保存到 x y z
    x = arr[0];
    y = arr[1];
    z = arr[2];
    
    return 0;

参考技术B //望采纳
#include<stdio.h>
int main()

    int a,b,c,t;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
    
        t=a;
        a=b;
        b=t;
    
    if(a>c)
    
        t=a;
        a=c;
        c=t;
    
    if(b>c)
    
        t=b;
        b=c;
        c=t;
    
    printf("%d %d %d\\n",a,b,c);
    return 0;

本回答被提问者和网友采纳

以上是关于菜鸟再次求救!C语言3个数小到大排,为何3个if就行?if里面的赋值为啥要这样,求解释,谢了的主要内容,如果未能解决你的问题,请参考以下文章

写一个函数,使N个整数按由小到大的顺序排列,要求在主函数中输入10个数,并输出排好序的数

输入三个整数x,y,z,请把这三个数由小到大输出

c语言,输入3个数,按从大到小的顺序输出,要用三种方法

用C语言做,输入三个整数x,y,z,请把这三个数由小到大输出

C语言 精典排序算法程序合集

C语言 精典排序算法程序合集