实验7
题目描述
从键盘输入一个四位正整数。首先分离出该正整数中的每一位数字,并按逆序显示输出各位数字;然后用分离出的每位数字组成一个最大数和一个最小数,并显示输出。
例如,若输入的四位正整数为3175。按逆序显示输出分离出的各位数字为5713;组成的最大数为7531,组成的最小数为1357。
具体要求:
(1)输入前要有提示。并检查输入整数的范围,若输入的整数超出范围,则显示“输入错误”的信息。
(2)对输出结果要进行具体说明。
【实验提示】
(1)首先要判断输入的数据是否是四位整数。
(2)然后分离出该四位正整数的四位数字,例如从千位到个位依次为a,b,c,d,则按逆序显示输出为dcba。
(3)最后对四位数字a,b,c,d按从大到小进行排序,按该顺序组成一个最大数,按逆序组成一个最小数。
方法1 朴素
-
检查输入是否为四位正整数:如果输入不在1000到9999范围内,提示“输入错误”。
if( n<1000 || n>9999 ) // if(n/1000==0||n/1000>9) { printf ("输入错误:不是4位正整数。\n"); exit(-1); }
-
分离出每一位数字:使用除法和取余操作将输入的四位数的每一位分离出来。
a = n / 1000; n = n % 1000; b = n / 100; n = n % 100; c = n / 10; d = n % 10; printf("逆序输出各位数字:%d%d%d%d \n",d,c,b,a);
-
组成最大数和最小数:对分离出来的数字进行排序,然后分别组成最大数和最小数。
if( a < b )
{
temp = a; a = b; b = temp;
}
if( a < c )
{
temp = a; a = c; c = temp;
}
if( a < d )
{
temp = a; a = d; d = temp;
}
if( b < c )
{
temp = b; b = c; c = temp;
}
if( b < d )
{
temp = b; b = d; d = temp;
}
if( c < d )
{
temp = c; c = d; d = temp;
}
逆序显示各位数字:将分离出来的数字按逆序显示。
printf("构成的最大数是:%d \n", a * 1000 + b * 100 + c * 10 + d );
printf("构成的最小数是:%d \n", d * 1000 + c * 100 + b * 10 + a );
🤔,考验耐力,写出很多的if,没有特别的思路,建议复制代码直接交了
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,a,b,c,d,temp;
printf("请输入一个4位整数:");
scanf("%d",&n);
if( n<1000 || n>9999 ) // if(n/1000==0||n/1000>9)
{
printf ("输入错误:不是4位正整数。\n");
exit(-1);
}
a = n / 1000;
n = n % 1000;
b = n / 100;
n = n % 100;
c = n / 10;
d = n % 10;
printf("逆序输出各位数字:%d%d%d%d \n",d,c,b,a);
if( a < b )
{
temp = a; a = b; b = temp;
}
if( a < c )
{
temp = a; a = c; c = temp;
}
if( a < d )
{
temp = a; a = d; d = temp;
}
if( b < c )
{
temp = b; b = c; c = temp;
}
if( b < d )
{
temp = b; b = d; d = temp;
}
if( c < d )
{
temp = c; c = d; d = temp;
}
printf("构成的最大数是:%d \n", a * 1000 + b * 100 + c * 10 + d );
printf("构成的最小数是:%d \n", d * 1000 + c * 100 + b * 10 + a );
return 0;
}
方法2
用一下函数简便一些,思路基本上一样
#include <stdio.h>
#include <stdlib.h>
// 函数声明
void reverse_digits(int digits[], int size);
void sort_digits(int digits[], int size);
int main() {
int num;
int digits[4];
// 提示用户输入四位正整数
printf("请输入一个四位正整数: ");
scanf("%d", &num);
// 检查输入是否为四位正整数
if (num < 1000 || num > 9999) {
printf("输入错误\n");
return 1; // 程序退出
}
// 分离出每一位数字
digits[0] = num / 1000; // 千位
digits[1] = (num / 100) % 10; // 百位
digits[2] = (num / 10) % 10; // 十位
digits[3] = num % 10; // 个位
// 逆序显示各位数字
printf("逆序显示的各位数字: ");
for (int i = 3; i >= 0; i--) {
printf("%d", digits[i]);
}
printf("\n");
// 组成最大数和最小数
sort_digits(digits, 4);
int max_num = digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0];
int min_num = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
// 显示最大数和最小数
printf("组成的最大数: %d\n", max_num);
printf("组成的最小数: %d\n", min_num);
return 0;
}
// 逆序显示数组
void reverse_digits(int digits[], int size) {
for (int i = size - 1; i >= 0; i--) {
printf("%d", digits[i]);
}
}
// 对数组进行排序
void sort_digits(int digits[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (digits[j] > digits[j + 1]) {
int temp = digits[j];
digits[j] = digits[j + 1];
digits[j + 1] = temp;
}
}
}
}