7.打印输入整数的每一位数字

分析:如果输入整数123
过程:
①123进入函数print(第1个),123>9,则进入print(第2个),执行 n / 10;
②n = 12, 12 > 9,则进入print(第3个),执行 n / 10;
③n = 1, 直接进入printf语句,并执行n % 10 = 1,则最开始打印出1;
④再返回print(第2个),进入printf语句,并执行n % 10 ,此时n = 12, 则n % 10 = 2;
⑤再返回print(第1个),进入printf语句,并执行n % 10 ,此时n = 123, 则n % 10 = 3;

所以,最后打印出1 2 3

注意:这里是一层一层除以了10,所以最后的顺序是正确的,若不除以10,则顺序为逆序.

#include<stdio.h>
void print(int n)
{
	if (n > 9)
	{
		print(n / 10); //要一层一层递归后才会执行下一行printf
	}
	printf("%d ", n % 10);


}

int main()
{
	int num = 0;
	scanf("%d", &num);
	print(num);
	return 0;
}

计算一个数的每位之和
分析:和上面例子相比较,多了一步,算出各位之和
此题是先取余(从个位开始取),再除以10

#include<stdio.h>
int Sum(int n)
{
	if (n == 0)
		return 0;
	else
		return n % 10 + Sum(n / 10);
}


int main()
{
	int n = 0;
	scanf("%d", &n);
	int sum = Sum(n);
	printf("%d\n", sum);
	return 0;
}

递归实现字符串逆序输出
分析:此处递归和上面打印数字的例子相似,也是一层一层递归下去,从最后一个字符打印出来,在一层一层递归回来,实现字符串的逆序

//这是逆序打印,不符合逆序输出条件
#include<stdio.h>
void Reverse_string(char *str)   //字符串本身是数组,所以此处用的是指针
{
	if (*str != '\0')  //字符串结束标志是'\0',只要不遇到'\0',就一直循环下去
		Reverse_string(str + 1);   //这是地址实现+ 1
	printf("%c", *str);
}
int main()
{
	char arr[] = "abcdef";
	Reverse_string(arr);
	return 0;
}

逆序输出字符串

  1. 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置
  2. 交换两个指针位置上的字符
  3. left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束
void reverse_string(char* arr)
{
	char *left = arr;
	char *right = arr+strlen(arr)-1;
 
 
	while(left<right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
 
 
		left++;
		right--;
	}
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值