C语言程序设计重点题目专讲 逆序

我将给出多重代码,请各位代码探索者尽情品尝(以下都是在vs上运行,只要改scanf_s变成scanf便可在其他编译器上运行)

1.

从键盘上输入一个3位正整数,然后逆序输出

初级解答:

#include<stdio.h>
int main() {
	printf("请输入3位正整数:");
	int num;
	scanf_s("%d", &num);
	int ret=0;
	while (num > 9) {
		int i = num % 10;
		num = num / 10;
		ret = (i + ret) * 10;
	}
	ret = ret + num;
	printf("逆序为%d\n", ret);
	return 0;
}

这个虽然满足要求,但是在思路不够连贯,我想在循环条件num>0下一步到位,直接写完这个程序,那么该如何写?

中级写法:

#include<stdio.h>
int main() {
	printf("请输入3位正整数:");
	int num;
	scanf_s("%d", &num);
	int ret=0;
	while (num > 0) {
		int i = num % 10;
		num = num / 10;
		ret = ret * 10 + i;
	}
	printf("逆序为%d\n", ret);
	return 0;
}

这个好像完美一点了,可以一步到位,但是我们是追求严谨的的人,如果对方输入的不是三位正整数,我们要写一个程序提醒对方重输。

高级写法:

#include<stdio.h>
int main() {
	printf("请输入3位正整数:");
	int num;
	if (scanf_s("%d", &num) != 1 || num < 100 || num>999) {
		printf("请重新输入3位正整数:");
		return 1;
	}
	int ret=0;
	while (num > 0) {
		int i = num % 10;
		num = num / 10;
		ret = ret * 10 + i;
	}
	printf("逆序为%d\n", ret);
	return 0;
}

这种好像更加完美一点了,它可以提示我们如果输入的格式不对就让我们重新输入

注解:

  1. 表达式 scanf("%d", &num) != 1 检查了 scanf 函数的返回值,如果 scanf 函数返回值不等于 1,说明未成功读取一个整数,这可能是因为用户输入了非数字字符,或者输入格式不正确。
  • 如果成功读取并赋值了一个整数,则 result 的值为 1;
  • 如果没有成功读取任何参数(例如输入不是整数),则 result 的值为 0;
  • 如果发生错误或者遇到文件结束符,则 result 的值为 EOF

但是,这个好像也不太完善,如果我们想要再它提示我们输入错误后让我们重新输入数字,而不是结束运行,那该怎么办呢?

完美解法:

#include<stdio.h>
int main() {
	printf("请输入3位正整数:");
	int num;
	while (1) {
		if (scanf_s("%d", &num) != 1 || num < 100 || num>999) {
			printf("请重新输入3位正整数:");
			while (getchar() != '\n') {}
		}

		else {
			int ret = 0;
			while (num > 0) {
				int i = num % 10;
				num = num / 10;
				ret = ret * 10 + i;
			}
			printf("逆序为%d\n", ret);

			break;
		}
	}
	return 0;
}

完美满足上述要求,如果格式错误则提醒重新输入。

注解:

1.while(1)表示无限循环,后面应跟着break,用于跳出循环,否则一直循环,一直跳不出去。

2.getchar() 函数用于从标准输入中读取一个字符,并返回所读取的字符。当结合 while 循环和条件判断时,while (getchar() != '\n') {} 的作用是一直读取输入缓冲区中的字符,直到遇到换行符为止。换行符通常表示用户输入的结束,因此这个语句可以清空输入缓冲区中剩余的字符,使得下一次输入操作不受之前输入的干扰。

这种做法通常用于确保输入缓冲区被清空,以避免在接下来的输入操作中出现意外情况。例如,在连续进行多次输入操作时,可能会因为输入缓冲区中仍然有剩余的字符而导致程序行为异常,通过清空输入缓冲区可以有效地规避这种问题。

2.

我们把题目拓展一下,从键盘输入任意个数,然后逆序输出(注如果以0开头,如012,上面的代码可不会输出210哦,所以我们需要去思考新的代码)

#include<stdio.h>
int main() {
	printf("请输入数字:");
	int num;
	scanf_s("%d", &num);
	int ret;
	while (num > 0) {
		ret = num % 10;
		printf("%d", ret);
		num = num / 10;
	}
	return 0;
}

仔细观察区别,这次我们的第二给printf中没有\n这意味着每一次输出结果都在同一行输出,正因为这样,所以我们才能把每次输出的结果汇成一行,这样才能输入正确的结果。

写在逆序的最后,其实数组也可以很好的解决逆序的问题,在上一篇文章中我们已经介绍过数组逆序的计算了,这里就不再过多追叙。

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码一探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值