20251期《C语言程序设计B》专项训练02-函数05部分-程序P824.C

31 阅读2分钟

1 题目描述

根据要求编写程序P824.C的指定部分:
  程序P824.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
  程序的功能是:求S=1/1!+1/2!+1/3!+…+1/N!并输出结果。N为任意自然数(只考虑int型),从键盘读入。

Please input n: 18

S=1/1!+1/2!+...+1/18!=1.7182818284590455

2 下载文件

代码

#include <stdio.h>

/* 本部分代码功能建议:函数原型声明 */
/* User Code Begin(Limit: lines<=1, lineLen<=20, 考生可在本行后添加代码、最多1行、行长<=20字符) */

/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */

int main(void)
{
	int i, n;
	double Sum = 0;

	printf("Please input n: ");
	scanf("%d", &n);

	for (i=1; i<=n; i++)
	{
		Sum += 1 / fac();
	}

	printf("\nS=1/1!+1/2!+...+1/%d!=%.16f\n", n, Sum);
	return 0;
}

/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,如函数的定义,行数不限) */

3 改后文件


代码

#include <stdio.h>

/* 本部分代码功能建议:函数原型声明 */
/* User Code Begin(Limit: lines<=1, lineLen<=20, 考生可在本行后添加代码、最多1行、行长<=20字符) */
double fac();
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */

int main(void)
{
	int i, n;
	double Sum = 0;

	printf("Please input n: ");
	scanf("%d", &n);

	for (i=1; i<=n; i++)
	{
		Sum += 1 / fac();
	}

	printf("\nS=1/1!+1/2!+...+1/%d!=%.16f\n", n, Sum);
	return 0;
}

/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,如函数的定义,行数不限) */
double fac()
{
	static int n=1;
	double res=1;
	int i;
	for(i=1;i<=n;i++)
	{
		res = res*i;
	}
	n++;
	return res;
}

4 知识点

  • 函数的声明、定义、调用

  • 按需要,确定函数的参数个数,一般情况下,传入数组,同时也传入数组的长度参数

  • 按题目要求,选定可用算法

    • 静态变量的应用,记它对 n 保持记忆性
    • 累乘算法,求出阶乘