0

我试图在将每个多项式乘以不同的常数后添加一些多项式。我已经能够设置数组并乘以常数,但是当我将不同数组(多项式)中的每个位置添加到一个新数组中时,我收到错误“可变大小的对象可能未初始化”并且程序无法编译。此外,无论数组的值或 c 的值是什么,乘法总是产生 0。我不确定到底出了什么问题。

任何帮助,将不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

    FILE *fp;
    fp = fopen("approximating the wronskian w/o wronskian.txt", "w");

    fprintf(fp, "|  c1  |  c2  |  c3  | value |\n");
    long int f1[3]= {1, 3, 4};
    long int f2[3]= {3, 4, 5};
    long int f3[3]= {3, 6, 8};


    for(int c1 = 0; c1 < 100; c1++)
    {
        for(int c2 = 0; c2 < 100; c2++)
        {
            for(int c3 = 0; c3 < 100; c3++)
            {
                for(int i = 0; i < 3; i++)
                {
                    f1[i] *= c1;
                    f2[i] *= c2;
                    f3[i] *= c3;

                    int w[i] = f1[i] + f2[i] + f3[i];

                    fprintf(fp, "|  %d  |  %d  |  %d  | %ld | %ld | %ld |\n", c1, c2, c3, f1[i], f2[i], f3[i]);
                }
            }
        }
    }

    fclose(fp);
    return 0;
}
4

2 回答 2

0

我只想补充一点,f 始终为 0,因为在第一个循环中: c1 = 0, c2 = 0, c3 = 0 。所以在所有后续的你只是乘以 0 * x = 0 。从 1 开始并在循环之前处理 0 情况可能会更好。

但即使在这种情况下,你也会很快用完整数空间并得到意想不到的值,所以在 32 位之后,我相信你会开始得到负数,最终当你用完所有 64 位时,它只会是 0。

另外,我不确定我是否完全了解您要做什么。如果 f 应该保持不变,您将需要一个新变量来保存/打印乘法结果,否则 f 一直在变化。

于 2017-03-21T01:09:04.390 回答
0

编译器认为您正在尝试在这里定义一个大小为“i”的 int 数组:

int w[i] = f1[i] + f2[i] + f3[i];

标识符“i”显然是一个动态值。所以数组是动态大小的。因此它不能被初始化,编译器认为你正在尝试。

我的猜测是你想用计算值填充一个数组。该数组应该在函数之外定义(假设您以后想使用这些值,而在“main”中使用此代码,您似乎不想要它;但这可能只是您发布的问题的最小代码)。您可能还希望使其至少为 long int,而不是 int。如果您以后不想使用这些值,只需将其打印到文件中,然后使用

long int w = ...

反而。

另外,在我看来

fprintf(fp, "|  %d  |  %d  |  %d  | %ld | %ld | %ld |\n", c1, c2, c3, f1[i], f2[i], f3[i]);

与输出文件中的列标题不匹配,根据

fprintf(fp, "|  c1  |  c2  |  c3  | value |\n");

这让我期待打印“w”而不是 fn[i]。

于 2017-03-21T00:38:22.070 回答