C语言:从键盘输入一个正整数n, 计算该数的各位数之 和并输出(定义一个新函数,递归法)
时间: 2024-03-20 20:39:00 浏览: 320
好的,下面是一个使用递归法实现的 C 语言程序,用于从键盘输入一个正整数 n,计算该数的各位数之和并输出:
```c
#include <stdio.h>
int sum_of_digits(int n);
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("该数的各位数之和为:%d\n", sum_of_digits(n));
return 0;
}
int sum_of_digits(int n) {
if (n < 10) {
return n;
} else {
return n % 10 + sum_of_digits(n / 10);
}
}
```
在这个程序中,我们同样使用了一个名为 `sum_of_digits` 的新函数来计算一个正整数的各位数之和。该函数使用递归的方式来计算各位数之和。具体来说,如果输入的数小于10,则直接返回该数;否则,该函数将输入的数除以10并取余数,将余数加到该数的各位数之和中,然后递归调用 `sum_of_digits` 函数并传递该数除以10的商作为参数。当输入的数变成一位数时,递归过程结束,并将各位数之和返回给调用者。
在 `main` 函数中,我们同样使用 `scanf` 函数从键盘输入一个正整数 `n`,并将其作为参数传递给 `sum_of_digits` 函数。最后,我们将 `sum_of_digits` 函数的返回值打印到终端上。
相关问题
写一个c语言程序,用递归法将一个整数n转换成字符串。n可以是任意位数的正整数
好的,这里是这个问题的C语言程序,使用了递归方法将一个整数转换为字符串:
```c
#include <stdio.h>
#include <string.h>
void intToStr(int num, char str[], int index) {
if (num == 0) {
str[index] = '\0'; // 加上字符串结束符号
return;
}
intToStr(num / 10, str, index - 1);
str[index] = (char)((num % 10) + '0'); // 将数字转换成对应的字符
}
int main() {
int num = 12345;
char str[20];
intToStr(num, str, strlen(str) - 1);
printf("The integer %d is converted to string %s\n", num, str);
return 0;
}
```
在主函数中,我们定义了一个整数num = 12345,并且定义了一个字符串数组str,长度为20。我们使用一个名为“intToStr”的递归函数将整数num转换为字符串,并存储在str数组中。在递归过程中,我们首先将整数除以10,然后递归调用intToStr将商转换为字符串,并将余数转换为字符添加到字符串的末尾。
最后,我们在主函数中打印出转换后的字符串。
这道题要求用递归法将一个整数 n 转换成字符串。比如,输入 483,应该输出字符串“483”。n 的位数不确定,可以是任意正整数。c语言
以下是将一个整数 n 转换成字符串的递归实现代码,可以在 C 语言环境下编译运行:
```c
#include <stdio.h>
void int2str(int n, char str[]) {
if (n / 10 == 0) {
str[0] = n + '0';
str[1] = '\0';
} else {
int2str(n / 10, str);
int len = strlen(str);
str[len] = n % 10 + '0';
str[len+1] = '\0';
}
}
int main() {
int n = 483;
char str[20];
int2str(n, str);
printf("n=%d\nstr=%s\n", n, str);
return 0;
}
```
在递归函数 `int2str` 中,如果当前整数 n 的十位数为 0,说明这是最后一位数字,直接将其转换成字符并存入字符串数组 str 中;否则,先递归地将 n 的十位数及以上的数字转换成字符串,然后将 n 的个位数转换成字符并存入字符串数组 str 的末尾。注意,需要在最后一个字符的后面加上一个空字符 '\0',表示字符串的结束。
在主函数中,定义一个整数 n 和一个字符串数组 str,将整数 n 转换成字符串并输出结果。
阅读全文