C++作业求助:如何用调和级数第i+1项初始化数组第i个元素
解决你的C++调和数作业问题
嘿,看来你在第二个任务上遇到了瓶颈,先帮你把现有代码的小问题捋顺,再一步步实现fillHarmonic()函数~
先修正现有harmonicNum()的小问题
你写的harmonicNum()函数定义里,参数n没有指定类型,这在C++里是不规范的(虽然旧编译器可能兼容,但最好养成显式声明的习惯)。另外,全局变量n可以换成main()里的局部变量,避免全局变量带来的潜在问题。还有循环判断条件要改成n <= 0,因为题目要求正整数,n=0也不符合要求。修正后的代码片段如下:
#include <iostream> using namespace std; // 函数声明 double harmonicNum(int n); int main() { int n; // 换成局部变量 do { cout << "Please input a positive integer: " << endl; cin >> n; } while (n <= 0); cout << harmonicNum(n) << endl; return 0; } // 显式声明参数类型int n double harmonicNum(int n) { double harmonic = 0.0; for (int i = 1; i <= n; i++) { harmonic += 1.0 / i; // 用+=简化写法 } return harmonic; }
实现fillHarmonic()函数
题目要求这个函数能适配任意大小的一维数组,我们可以给函数传入数组指针和数组的长度作为参数,这样就能处理不同大小的数组了。具体思路是:
- 遍历数组的每个索引
i(从0到size-1) - 每个位置
arr[i]需要存储第i+1个调和数,所以调用harmonicNum(i+1)赋值给它
完整的实现代码如下,我把它整合到你的现有代码里:
#include <iostream> using namespace std; double harmonicNum(int n); // 新增fillHarmonic函数声明 void fillHarmonic(double arr[], int size); int main() { // 测试fillHarmonic的例子:创建一个长度为5的数组 const int ARRAY_SIZE = 5; double harmonicArray[ARRAY_SIZE]; // 调用fillHarmonic填充数组 fillHarmonic(harmonicArray, ARRAY_SIZE); // 打印数组验证结果 cout << "Harmonic series array (first " << ARRAY_SIZE << " terms):" << endl; for (int i = 0; i < ARRAY_SIZE; i++) { cout << "Index " << i << ": " << harmonicArray[i] << endl; } return 0; } double harmonicNum(int n) { double harmonic = 0.0; for (int i = 1; i <= n; i++) { harmonic += 1.0 / i; } return harmonic; } // 实现fillHarmonic函数 void fillHarmonic(double arr[], int size) { for (int i = 0; i < size; i++) { // 第i个元素对应第i+1个调和数 arr[i] = harmonicNum(i + 1); } }
代码说明
fillHarmonic()的参数double arr[]在C++里会被当作指针处理,所以能接收任意大小的一维double数组- 参数
int size用来告诉函数数组的长度,避免越界访问 - 测试部分创建了一个长度为5的数组,填充后打印每个元素,你可以根据需要修改数组大小测试
这样应该就能完成你的两个作业任务啦~
内容的提问来源于stack exchange,提问作者Arkaedae
相关产品推荐
相关产品推荐

