三位数的个位,十位,百位大小排序问题

本文介绍了如何使用C语言编写一个程序,将输入的三位数按从大到小排序,同时处理scanf函数在VS2022中的兼容性问题,提供了一劳永逸的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看题:写代码将一个三位数按从大到小输出。

例如:输入123

输出:3 2 1

        这道编程题非常经典,经常用于初学者的练习。很多人会考虑使用数组,但对于初学者而言数组可能还未熟练掌握,下面就介绍一种只通过选择语句来枚举的方法。

          题目分析:将这个三位数的个位十位百位进行排序,很显然要将这个数的个位,十位,百位进行抽离。常用取余符号(%)进行,如123%10=3,再用定义整数强制取整的法则依次得到个位,十位,百位。得到了这三位,剩下的就是根据大小排序输出问题。我们可以通过暴力枚举的方法,将情况一一列出来,由排列组合易知,如果将个位、十位、百位重复的情况排除(即像996这种有百位和十位重合的情况),一共有六种情况。相等的情况我们只需要将大于号改成大于等于号即可。(即996这种情况)

          这里推荐使用编译器VS2022。这里很明显要用到scanf函数,但是scanf在VS上会报错,提示使用scanf_s,这里并不推荐使用scanf_s,因为它不是C语言提供的,如果你的代码使用了scanf_s函数,那么你的代码只能在vs上编译,其他编译器无法识别,降低了代码的可移植性。解决办法,在代码的第一行加上一串代码:(一定得在第一行)

       #define _CRT_SECURE_NO_WARNINGS 1

 

但是这样每一次使用scanf函数,都要将这一行代码粘贴到最上方,这样会导致非常麻烦,有一个一劳永逸的做法,是的每次创建源文件时都会有函上面这条语句,这样每次创建的源文件都可以使用scanf 函数。步骤:先下载everything软件。

adbc376e3140448ca31c747957bc8bf2.png

然后找到newc++file.cpp这个文件,右键找到打开路径,找到文件的地址,选中文件后右键使用更多打开方式,通过用《记事本》打开,然后再添加上面那串代码,此后创建的源文件都会包含这串代码。如果没有修改权限,可以拷贝到桌面,用《记事本》打开添加代码后,找到原来文件(newc++file.cpp)所在的位置,再拷贝回去,代替原来的文件。这样以来,以后创建的源文件都会包含这一串代码。20a3f475d94c44829cb4f9851c74c236.jpg618bf80cf1b94709bc763410ac301810.jpg

 

4cc88710b0164bdd918a136dc5261887.jpg

 只要有了这串代码,我们就可以使用scanf函数了,并且编译器不会报错。

#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()
{
	int a = 0,b,c,d ;
	scanf("%d", &a);
	if (100 <= a <= 999)
	{
		b = a % 10;//个位
		c = (a / 10) % 10;//十位
		d = (a / 100);//百位
		if (b >= c && c>= d)
			printf("%d %d %d", b, c, d);
		else if (b >= d && d >= c)
			printf("%d %d %d", b, d, c);
		else if (d >= b && b >= c)
			printf("%d %d %d", d, b, c);
		else if (d >= c && c>= b)
			printf("%d %d %d", d, c, b);
		else if (c >= b && b >= d)
			printf("%d %d %d", c, b, d);
		else if (c >= d &&  d>= b)
			printf("%d %d %d", c, d, b);
		
	}
	return 0;
}

c03e2849abe4485496f4d79e1da31559.jpg

 

 415cafa2b4014eee86a4abfaf3b589a5.jpg

 注:连续关系符号三个以上的话,如a>b>c在C语言一般无法识别,所以一般采用逻辑字符&&来表示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值