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 保持记忆性
- 累乘算法,求出阶乘