【C语言|菜鸟教程】100道进阶经典例题详细解答(实例五-输入三个整数x,y,z,请把这三个数由小到大输出。)


前言

本系列为C语言菜鸟100道基础经典例题详解刷题系列。每天1题,点滴成长,一起逆袭。


一、题目描述

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


二、题目分析

我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

三、解题

1.解题方法一------ 借助额外变量 ------

易错提示:

注意:这种借助额外变量的方法固然是我们实现从小到大排序常用的方法,但弊端是x,y,z的值发生了变化

程序运行代码(1) (常用)

//法一(最常用):
#include <stdio.h> 
int main()
{
    int x,y,z,t;
    printf("\n请输入三个数字:\n");
    scanf("%d%d%d",&x,&y,&z);
    if (x>y) { /*交换x,y的值*/
        t=x;x=y;y=t;
    }
    if(x>z) { /*交换x,z的值*/
        t=z;z=x;x=t;
    }
    if(y>z) { /*交换z,y的值*/
        t=y;y=z;z=t;
    }
    printf("从小到大排序: %d %d %d\n",x,y,z);
}

指针函数法

//法二:指针函数法
#include <stdio.h> void swap(int *a,int *b){ //*a代表指针变量a,a存储的是地址,*a是地址的值 int temp; temp=*a; *a=*b; *b=temp; } int main(){ int x,y,z; printf("请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); if(x>y) swap(&x,&y); if(x>z) swap(&x,&z); if(y>z) swap(&y,&z); printf("从小到大排序:%d %d %d\n",x,y,z); return 0; }

2.解题方法二------打擂台法------ (通用性强)

程序运行代码

#include<stdio.h>

int max1(int,int,int);
int min1(int,int,int);
int main()
{
    int x,y,z,max,min,mid;
    scanf("%d%d%d",&x,&y,&z);
    max=max1(x,y,z);
    min=min1(x,y,z);
    mid=(x+y+z)-(max+min);
    printf("The last is: %d,%d,%d",min,mid,max);
}
int max1(int x,int y,int z){
    int max=x;//打擂
    if(max<y)
    {
        max=y;
    }else{
        max=z;
    }
    return max;
}

int min1(int x,int y,int z){
    int min=x;//打擂
    if(min>y)
    {
        min=y;
    }else{
        min=z;
    }
    return min;
}

3.解题方法三------ 三目运算符 ------

程序运行代码(1)

#include<stdio.h>
int main(void)
{
    int x,y,z,temp,min,max;
    printf("请输入三个数字:\n");
    scanf("%d%d%d",&x,&y,&z);
    temp = x < y? x : y;
    min = temp < z? temp : z;
    temp = x < y? y : x;
    max = temp < z? z : temp;
    printf("从小到大排序:");
    printf("%d%3d%3d",min,x + y + z - min - max,max);
    return 0;
}

优化版程序运行代码 (推荐)

#include<stdio.h>
int main(void)
{
    int x,y,z,temp,min,max;
    printf("请输入三个数字:\n");
    scanf("%d%d%d",&x,&y,&z);
    min = (x < y? x : y) < z? (x < y? x : y) : z;
    max = (x < y? y : x) < z? z : (x < y? y : x);
    printf("从小到大排序:");
    printf("%d%d%d",min,x + y + z - min - max,max);
    return 0;
}

4.解题方法四------排序算法------ (通用性强)

(1) 选择法排序

//选择法排序
#include<stdio.h>
#define N 3  // N的值可更改,实现N个数的排序

int main()

{
    int i,j,k,temp;
    int shuzu[N];
    for(i=0;i<N;i++)             //选择法排序
    {
        printf("input the %d number:",i+1);
        scanf("%d",&shuzu[i]);
    }

    for (i=0;i<N-1;i++)
    {
        k=i;
        for(j=i+1;j<N;j++)
        {
            if(shuzu[j]<shuzu[k])   //实现数组从小到大排序
                k=j;
        }
        if(k!=i)
        {
            temp=shuzu[k];
            shuzu[k]=shuzu[i];
            shuzu[i]=temp;
        }
    }
    for(i=0;i<N;i++) printf("%d ",shuzu[i]);
    return 0;
}

(2) 冒泡排序

//冒泡排序
#include<stdio.h>
#define N 3 // N的值可更改,实现N个数的排序
int main()

{
	int i,j,temp;
	int shuzu[N];
	for(i=0; i<N; i++) {
		printf("input the %d number:",i+1);
		scanf("%d",&shuzu[i]);
	}
	for(i=0; i<N; i++) {
		for(j=0; j<N-i; j++) {
			if(shuzu[j]>shuzu[j+1]) {
				temp=shuzu[j];
				shuzu[j]=shuzu[j+1];
				shuzu[j+1]=temp;
			}
		}
	}
	for(i=0;i<N;i++) printf("%d ",shuzu[i]);
	return 0;
}

总结

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值