如何将输入的3个数字排序并打印出来

@[TOC]

承接上篇博客中输出数组内元素最大值的内容

本篇博客向大家分享如何将我们输入的三个数字进行大小排序并打印出来

1.scanf函数

1
2
3
4
5
6
7
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
}

既然需要输入,那就要用到scanf函数来接受我们输入的数字

  • 要使用指针变量,因为这里的scanf需要改变我们的a,b,c
  • scanf的头文件是 <stdio.h>

2.tmp盒子

相信大家在自己的学习中已经接触过使用tmp来进行大小比较的代码了

什么?没有?

那也没关系,基本实现的原理易懂的很!

1
2
3
4
5
6
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
  1. 把a的值赋给tmp
  2. 因为a小于b,所以我们让a等于更大的值
  3. 再使用tmp把原来是a的值赋给b

这样就写好了一个大小比较和交换的语句了

我们只需要CTRL+C然后+V

稍微改改里面的abc

就能写出下面的完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
int tmp = b;
b = c;
c = tmp;
}
printf("%d>%d>%d", a, b, c);
return 0;
}

运行一下

image-20210827092130205

这里需要注意,我们输入数字的时候需要用空格隔开两个数字

因为这串代码实现的是从大到小排列

所以我们可以打印的时候在每个数字之间加个>号

这里显示的内容和下面这行代码%d中间的内容是一致的

1
printf("%d>%d>%d", a, b, c);

比如我把中间的>改成#号,打印出来也是一致的

image-20210827092744416

注意的点

在编写这个3个数字比较的代码的时候,我们要先将a和b、c比较,再比较b和c
下面的这个代码是一个错误的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (b < c)
{
int tmp = b;
b = c;
c = tmp;
}
if (a < c)
{
int tmp = a;
a = c;
c = tmp;

因为我们需要先确定a里面装的是最大的那个数字,然后才能让b和c比较决出“季军”
如果这样说你还是没太明白,可以尝试将这串代码输入vs编译器,用ctrl+f10调试,查看运行一个if语句之后a,b,c的赋值的变化

结语

这串代码如果继续复制粘贴的话可以实现不止3个数字的大小排列并打印

不知道能不能用自定义函数实现这个功能?

点个赞再走呗,万分感谢!