簡體   English   中英

用可變數量的參數求和函數中的復數

[英]sum complex numbers in function with a variable number of parameters

我想對X個復數求和,但是這段代碼返回了我:

-9.3e + 61 + -1.9e + 062i

typedef struct complex{
    double real;
    double imag;
} complex;

complex sum(int length, ...)
{
    va_list param;
    va_start(param, length);

    complex out = {0, 0};
    for(int i = 0;i<length;i++)
    {
        out.real += va_arg(param, complex).real;
        out.imag += va_arg(param, complex).imag;
    }
    va_end(param);
    return out;
}

當我引用real / imag part時,它將返回正確的real / imag結果。

主要:

int main()
{
    complex result;
    complex a = {3.1,-2.3};
    complex b = {0.5,-3};
    complex c = {0,1.2};

    result = sum(3,a,b,c);
    printf("Sum is %.2g + %.2gi. \n", result.real, result.imag);

    return 0;
}

我應該進行哪些更改才能使其正常工作?

問題在於,每次調用va_arg ,它將取出一個完整的complex結構。 由於每個循環調用兩次,因此取出2個不同的complex結構,這是不正確的。

您需要緩存結果並稍后訪問成員:

for (int i = 0; i < length; i++)
{
    complex currArg = va_arg(param, complex);
    out.real += currArg.real;
    out.imag += currArg.imag;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM