6-2 使用函数求阶乘和 (15分)

本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,求1!+2!+…+n!的值。题目保证计算结果不超过双精度范围。

函数接口定义:

double fact( int n );

其中n是用户传入的参数。如果n是非负整数,则该函数必须返回n的阶乘,否则返回0。

裁判测试程序样例:

#include <stdio.h>

double fact( int n );

int main(void)
{    
    int i, n;
    double sum; 

    scanf("%d", &n);
    sum = 0;
    for(i = 1; i <= n; i++){
        sum = sum + fact(i); 
     }
     printf("%.0f\n", sum);

    return 0;
}

/* 请在这里填写答案 */

输入样例:

3

输出样例:

9
double fact( int n )
{
	if(n<0)
		return 0;
	else if(n==0||n==1)
		return 1;
	else
		return n*fact(n-1);
}
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言参考答案汇总(浙江大学城市学院) 第2周(M2) 2 20011求华氏温度100°F对应的摄氏温度。 2 20012 求华氏温度 150°F 对应的摄氏温度。 3 20013求摄氏温度26°C对应的华氏温度。 3 20015当n为152时,别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。 3 20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。 4 第3周(M3) 5 20031 求1+2+3+......+100(调试示例error02_5) 5 20032 求m+(m+1)+(m+2)+......+100 5 20033 求1/m+1/(m+1)+1/(m+2)+......+1/n 6 20034 求1 + 1/3 + 1/5 + ......的前n项和 7 20035 求1-1/4+1/7-1/10+……的前n项之和 7 20036 输出华氏-摄氏温度转换表(改错题error02_6) 8 20038 求x的n次幂 9 20041 生成 3 的乘方表 10 20044 求100^0.5+101^0.5+……+1000^0.5 10 20053 计算物体自由下落的距离 11 20056 计算函数 11 20061 阶梯电价 12 20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)+......+n*n+1/n 13 20063 求1-2/3+3/5-4/7+5/9-6/11+…… 14 20064 求2^1+2^2+2^3+……+2^n 15 第4周(M4) 15 10007 显示图案 (复习printf()的字符串输出) 15 20042 生成阶乘表 16 20043 使用函数求 n! /(m!* (n-m)!) 16 20054 求平均值 17 20057 求1+1/2+1/3+......+1/n 18 20065 求0!+1!+2!+……+n! 18 40015 求最小值 19 40018 求a+aa+aaa+aa…a 20 第5周(M5) 21 30001 求一元二次方程的根 21 30002 求函数的值 23 30003 类统计字符 23 30004 显示五级记制成绩所对应的百制成绩区间(使用switch) 24 30005 显示水果的价格(使用switch) 25 30007 求三角形的面积和周长 27 30008 计算个人所得税 28 30051 判断闰年 29 30052 统计学生平均成绩与及格人数 30 30053 段计算水费(使用嵌套的if-else语句) 31 第6周(M6) 32 40011 求最小公倍数和最大公约数(调试示例error04_1) 32 40012 求1-1/4+1/7-1/10+1/13-1/16+…… 33 40014 求整数的位数 34 40023 换硬币 35 40024 找出各位数字的立方和等于它本身的数 36 40025 找完数(改错题error04_2) 38 40027 从高位开始逐位输出一个整数的各位数字(选作) 39 40052 判断素数 40 40053 逆序输出整数 41 40054 输出斐波那契序列 42 第7周(M7) 42 50002 使用函数判断数的符号 42 50003 使用函数求奇数和 43 50005 使用函数统计素数并求和 44 50006 使用函数统计一个整数中数字的个数 45 50007 使用函数找水仙花数 46 50009 使用函数求余弦函数的近似值 48 50052 使用函数找最大值 49 50062 使用函数输出指定范围内的 Fibonacci 数 50 50063 使用函数找出指定范围内的完数 51 第8周(M8) 52 40013 求奇数和 52 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值 53 50004 使用函数计算两点间的距离 54 50061 使用函数求a+aa+aaa+aa…a 55 60002 整数的十进制、八进制和十六进制表现形式 56 60003 类统计字符 57 60006 验证歌德巴赫猜想 58 60007 使用函数输出整数的逆序数 59 60009 统计单词 60 60062 简单计算器 61
### 回答1: 题目描述: 输入一个正整数n,求1!+2!+3!+...+n!的值。 输入格式: 输入一个正整数n。 输出格式: 输出1!+2!+3!+...+n!的值。 输入样例: 5 输出样例: 153 解题思路: 本题可以使用循环和函数来实现,函数的作用是计算阶乘,循环的作用是求阶乘和。具体实现如下: 1.定义一个函数factorial(n),用来计算n的阶乘。 2.在主函数中,使用循环计算1!+2!+3!+...+n!的值。 3.在循环中,调用函数factorial(n)计算每个数的阶乘。 4.将每个数的阶乘相加,得到最终结果。 代码实现: ### 回答2: 本题目的要求是使用函数求阶乘和,因此我们首先需要了解函数的基本知识。 函数是一种可重复使用的代码块,它接受输入数据、进行处理、并产生输出结果。在本题目中,我们需要自己编写一个函数,来计算给定正整数的阶乘和。 阶乘和的定义是:n!+ (n-1)!+ (n-2)!+ … + 2!+ 1!,其中“!”代表阶乘。因此,我们可以编写如下的函数: def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) 这段代码实现了求 n 的阶乘的功能。在函数中,我们使用了递归的方式,不断调用自己,直到 n=1 时返回 1,这是一个递归的边界条件。 接下来,我们要编写一个函数来计算阶乘和: def factorial_sum(n): sum = 0 for i in range(1, n+1): sum += factorial(i) return sum 这段代码实现了阶乘和的功能。我们首先初始化一个变量 sum 为 0,然后使用 for 循环来遍历 1 到 n 的所有数字。在循环中,我们调用之前编写好的阶乘函数来计算每个数字的阶乘,并把结果加到 sum 中。最后,函数返回阶乘和。 我们可以测试一下这个函数是否正确: print(factorial_sum(5)) 输出的结果应该是 153,这是 1!+ 2!+ 3!+ 4!+ 5! 的和。 总之,本题目需要我们使用函数来求解阶乘和。我们需要先编写一个阶乘函数,然后再在另一个函数中调用这个函数来求和。需要注意边界条件和循环的范围。 ### 回答3: 本题要求我们使用函数来计算阶乘和。首先需要明确什么是阶乘,阶乘的定义为:n的阶乘(n!)等于1×2×3×……×n。 因此我们可以将这个问题解成两个部,一是计算阶乘,二是计算阶乘和。 计算阶乘可以使用递归的方式来实现,具体方法为:如果n等于1,返回1;否则返回n乘以(n-1)的阶乘,即n*(n-1)!。 计算阶乘和也可以使用递归的方式来实现,具体方法为:如果n等于0,返回0;否则返回n的阶乘加上(n-1)的阶乘和,即n!+(n-1)!。 为了更好地表现代码逻辑,我们可以先编写一个计算阶乘的函数factorial(n),然后再在计算阶乘和的函数中调用该函数来计算每个数的阶乘。 以下是代码实现的详细过程: 1.定义计算阶乘的函数factorial(n): def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) 2.定义计算阶乘和的函数factorial_sum(n): def factorial_sum(n): if n == 0: return 0 else: return factorial(n) + factorial_sum(n-1) 3.在主函数中调用factorial_sum(n)函数,并将结果输出: n = int(input()) print(factorial_sum(n)) 这样就完成了本题的要求。我们用函数来计算阶乘和,通过递归的方式实现计算,代码简单易懂,逻辑清晰。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值