【问题标题】:How to read complex numbers from a file in C?如何从C中的文件中读取复数?
【发布时间】:2012-11-17 12:39:02
【问题描述】:

我有一个包含 64x64 矩阵值的文本文件,它们是复数。我想从文件中读取它们,但我遇到了困难。使用复杂的 C 库或为复数创建新的数据类型对我来说都可以,我只需要正确读取它们即可。

我的意思是,是否使用:

#include <complex.h>
int complex matrix[64][64];

或为其创建数据类型:

typedef struct {
    int real, imag;
} Complex;

Complex matrix[64][64];

只要阅读正确,我就可以。

您可以在下面找到 2x3 矩阵,只是为了演示我的文件中的数字:

{{-32767, 12532 + 5341I, -3415 - 51331I}
 {32767I, 32609 + 3211I, 32137 + 6392I}}

所以你可以看到有些部分既有实部又有虚部,有些只是虚部,有些只是实部,所有虚数的末尾都有大写的“i”字母。如果你能帮助我,我会很高兴。

【问题讨论】:

  • 您可能需要检查libfftw,看看它如何处理复数。

标签: c file matrix readfile complex-numbers


【解决方案1】:

两种常见的设计模式适用:
1) Recursive descent parser 接受“语言”
2)State Machine

这两种情况都可以从 read_char() 函数中受益,如果遇到错误退出 除了 '{', '}', 0-9, i, +, - 之外的任何内容,它会跳过所有空格 (ch

状态机可以更加通用:如果在任何时候有“+”或“-”,可以将下一个值(以“i”或非“i”结尾)添加或减去当前累计值。 (然后状态机在运行时也可以计算 1+2-1+1i...)

【讨论】:

    【解决方案2】:

    数字的组织方式无关紧要,如果它们在内存中对齐,您可以一次读取它们:

    Complex matrix[64][64];
    fread(matrix,sizeof(Complex),64*64, your_file_pointer);
    

    写法也一样:

    fwrite(matrix, sizeof(Complex), 64*64, your_file_pointer);
    

    【讨论】:

    • 除了极其不可移植之外,他的输入 not 是原始二进制文件,这意味着它确实确​​实很重要。
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2012-11-16
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多