假设n 为非负整数,编写递归函数求 n!。在主函数中,定义一个函数指针,分别通过函数名和函数指针调用函数,在屏幕上输出10!的结果。
时间: 2024-04-29 13:24:25 浏览: 71
```c
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int (*func)(int) = factorial; // 定义函数指针
printf("%d\n", factorial(10)); // 直接调用函数
printf("%d\n", func(10)); // 通过函数指针调用函数
return 0;
}
```
相关问题
假设n为非负整数,编写递归函数求n!。在主函数中,定义一个函数指针,分别通过函数名和函数指针调用函数,在屏幕上输出10!的结果。
可以回答这个问题。递归函数求n!的代码如下:
```c
#include <stdio.h>
int factorial(int n) {
if (n == ) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 10;
int (*func_ptr)(int) = factorial;
printf("%d! = %d\n", n, func_ptr(n));
return ;
}
```
输出结果为:10! = 362880。
编写一个使用递归函数求包含加减乘除括号的算术表达式的值的C语言程序,除了主函数,只使用一个函数
以下是一个使用递归函数求包含加减乘除括号的算术表达式的值的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
int evaluate(char *expr);
int main()
{
char expr[100];
printf("Enter an arithmetic expression: ");
fgets(expr, 100, stdin);
printf("Result: %d\n", evaluate(expr));
return 0;
}
int evaluate(char *expr)
{
int num = 0;
int i = 0;
int sign = 1;
int result = 0;
while (expr[i] != '\0')
{
if (expr[i] == '(')
{
int j = i + 1;
int bracket_count = 1;
while (bracket_count != 0)
{
if (expr[j] == '(')
{
bracket_count++;
}
else if (expr[j] == ')')
{
bracket_count--;
}
j++;
}
num = evaluate(&expr[i+1]);
i = j;
}
else if (expr[i] >= '0' && expr[i] <= '9')
{
num = num * 10 + (expr[i] - '0');
}
else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/')
{
switch (expr[i])
{
case '+':
result += sign * num;
sign = 1;
num = 0;
break;
case '-':
result += sign * num;
sign = -1;
num = 0;
break;
case '*':
num *= evaluate(&expr[i+1]);
i++;
break;
case '/':
num /= evaluate(&expr[i+1]);
i++;
break;
}
}
i++;
}
return result + sign * num;
}
```
该程序首先从标准输入中读取一个算术表达式,然后调用 `evaluate` 函数计算表达式的值,并将结果打印到标准输出中。
`evaluate` 函数接收一个指向字符数组的指针,该字符数组包含一个算术表达式。该函数使用一个循环遍历表达式的每个字符,并根据字符的类型执行不同的操作。如果遇到一个数字字符,函数会将其转换为对应的整数,并将其累加到变量 `num` 中。如果遇到一个加号或减号字符,函数会将当前的 `num` 乘上符号,累加到变量 `result` 中,并将 `num` 重置为 0。如果遇到一个乘号或除号字符,函数会递归调用自身来计算后面的子表达式,并将计算结果与 `num` 相乘或相除。如果遇到一个左括号字符,函数会递归调用自身来计算括号内的子表达式,并将计算结果赋给 `num`。如果遇到一个右括号字符,函数会返回当前的 `num` 值。
该函数使用递归来处理嵌套的括号表达式,这是由于递归可以方便地处理嵌套问题。此外,该函数只使用了一个函数来实现求解算术表达式的功能,这也符合题目要求。
阅读全文