您现在的位置是:首页 >技术杂谈 >【C语言】编程练习(四)网站首页技术杂谈
【C语言】编程练习(四)
简介【C语言】编程练习(四)
计算一个数的每位之和(递归实现)
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
解题思路
代码如下
#include<stdio.h>
int DigitSum(int n)
{
if (n>9)
{
return DigitSum(n / 10) + n % 10;
}
else
{
return n;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret=DigitSum(n);
printf("%d", ret);
return 0;
}
运行结果
字符串逆序(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
**要求:**不能使用C函数库中的字符串操作函数。
比如:
char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba
解题思路
在使用库函数的情况下
用左边的地址中的内容和最右边的地址中的内容交换
使用库函数strlen计算字符的长度
使用递归的方式实现
代码如下
使用库函数,并且不是递归方式的实现
#include<stdio.h>
#include<string.h>
void reverse_string(char *p)
{
char* l = p;
char *r = p+strlen(p) - 1;
while (l<r)
{
char temp = *l;
*l = *r;
*r = temp;
r--;
l++;
}
}
int main()
{
char arr[] = "abcedfg";
reverse_string(arr);
printf("%s
", arr);
return 0;
}
不使用库函数,用递归方法实现
#include<stdio.h>
//计算字符串的长度
int My_strlen(char* p)
{
int count = 0;
while (*p)
{
count++;
p++;
}
return count;
}
//字符串逆序
void reverse_string(char* p)
{
int len = My_strlen(p);
char temp = p[0];
p[0] = p[len - 1];
p[len - 1] = '