C语言编程:计算函数序列和

需积分: 10 4 下载量 174 浏览量 更新于2024-07-17 1 收藏 163KB DOC 举报
"这是一个关于计算机二级C语言考试题库的文档,包含了真题、模拟题、章节题、易错题和每日一练等丰富的练习题目。文档中提供的两个代码示例分别涉及函数错误修正和数学序列的计算问题。" 在第一个程序中,函数`fun`的目的是计算一个特定序列的和,该序列由函数`f(x)`的连续值组成。`f(x)`的定义是基于x的值来确定返回值。函数中存在两个错误: 1. 错误的`f`函数声明:原始代码中的`f(double x)`应该被更正为`double f(double x)`,以确保返回类型与实际返回值匹配,即返回一个`double`类型的值。 2. 计算序列和的错误:在`fun`函数的返回语句中,应使用`s`而不是`returns`。正确的返回语句应该是`return s;`。 修正后的第一个程序如下: ```c #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h> double f(double x) { if (x == 0.0 || x == 2.0) return 0.0; else if (x < 0.0) return (x - 1) / (x - 2); else return (x + 1) / (x - 2); } double fun(int n) { int i; double s = 0.0, y; for (i = -n; i <= n; i++) { y = f((double)i); s += y; } return s; } void main() { system("CLS"); printf("%f\n", fun(5)); } ``` 第二个程序的目标是计算调和级数`1 + 1/2 + 1/3 + ... + 1/m`的和,其中`m`是用户输入的整数。在这个例子中,也存在两个错误: 1. 循环更新变量`t`的错误:在`for`循环中,`t += 1.0 / k;`应该替换为`t += 1.0 / (double)I;`,因为`I`是整数,需要转换为`double`以避免整数除法。 2. 错误的返回值:在`fun`函数的返回语句中,应返回累积和`t`而不是`I`。正确的返回语句是`return t;`。 修正后的第二个程序如下: ```c #include <stdlib.h> #include <conio.h> #include <stdio.h> double fun(int m) { double t = 1.0; int I; for (I = 2; I <= m; I++) t += 1.0 / (double)I; return t; } void main() { int m; system("CLS"); printf("\nPlease enter an integer number:"); scanf("%d", &m); printf("\nThe result is %.6f\n", fun(m)); } ``` 这两个程序的修正版能够正确计算各自的目标序列,并输出期望的结果。在准备C语言二级考试时,理解并修正这类错误对于提升编程和问题解决能力至关重要。