2011-02-23 63 views
0

我需要編寫一個程序,它使用結構來定義複數,即z1 = x + yi。然後添加2個複數。在繼續使用我的代碼之前,我需要弄清楚如何正確初始化它們。到目前爲止,我已經嘗試了一些東西,這是我已經提出的最好的,它仍然沒有編譯。結構如何用來表示複數

這裏是我的代碼的副本,我只需要修復這部分,然後我就可以自己完成其餘的工作。

#include<stdio.h> 

typedef struct complex1{ 
    float *real1; 
    float *imaginary1; 
} complex1; 


typedef struct complex2{ 
    float *real2; 
    float *imaginary2; 
} complex2; 


int main(){ 
    struct complex1 real; 
    struct complex1 *realptr; 
    struct complex1 imaginary; 
    struct complex1 *imaginaryptr; 
    struct complex2 real; 
    struct complex2 *realptr; 
    struct complex2 imaginary; 
    struct complex2 *imaginaryptr; 

    printf("Please enter variable x1."); 
    scanf("%d", &real.real1); 
    printf("Please enter variable y1."); 
    scanf("%d", &imaginary.imaginary1); 
    printf("Please enter variable x2."); 
    scanf("%d", &real.real2); 
    printf("Please enter variable y2."); 
    scanf("%d", &imaginary.imaginary2); 
    printf("You have entered: %d,%d,%d,%d\n", 
    real.real1, imaginary.imaginary1,real.real2, imaginary.imagnary2); 
    return 0; 
} 
+2

什麼是編譯錯誤消息? – 2011-02-23 16:16:36

+0

'真實'重新定義基本類型。 – none 2011-02-23 16:18:16

+0

它也表示,對於我在主函數 – none 2011-02-23 16:18:58

回答

4

有文件中的多個錯誤,但也許這樣的事情是更你想要什麼?

#include<stdio.h> 

typedef struct _complex1{ 
    double real1; 
    double imaginary1; 
} complex1; 

不要使用相同的名稱命名結構兩次,我相信你想跳過real1和imaginary1指針 - 因爲他們沒有獲得你任何東西。

int main(){ 
    complex1 real; 
    complex1 *realptr; 
    complex1 imaginary; 
    complex1 *imaginaryptr; 
    complex2 real2; 
    complex2 *realptr2; 
    complex2 imaginary2; 
    complex2 *imaginaryptr2; 

複雜的typedef已經告訴編譯器,它是一個結構。你不能有兩個同名的變量。

printf("Please enter variable x1."); 
    scanf("%lf", &real.real1); 

您需要將發送給scanf的內容與期望的內容對齊。 %f期望雙*而不是雙**或(float **在你的情況下)。

7

你的代碼變得毫無意義:

  • 您定義兩個相同的結構,這似乎毫無意義。
  • 該結構包含指針到浮標,而不是實際的浮標,這似乎不明智。
  • 您的代碼使用scanf()浮點數讀取使用非初始化指針來存儲值,這會導致未定義的行爲。
  • 您不應該使用%d格式說明符來讀取浮點數,它是整數。

嘗試:

typedef struct { 
    float real; 
    float imaginary; 
} complex; 

complex a, b; 

scanf("%f", &a.real); 
scanf("%f", &a.imaginary); 
+0

中初始化的所有結構體變量,好的謝謝,我會嘗試在沒有指針的情況下重寫它,儘管我從書中得到了它。但是,我仍然不確定自己在做什麼,書還是沒有書。 – none 2011-02-23 16:21:37

+0

我注意到很多書籍......似乎與學術作者和真實世界的實用程序員脫節。有些書很棒,但它們並不常見。 – gahooa 2011-02-23 16:30:59

2

我給你一個提示,因爲這看起來像一個家庭作業問題。結構用於將標準數據類型定義或組合在一起以形成新的數據類型,如虛數。一旦定義,你可以自由使用它。它看起來像你使用C,所以我會去。首先定義新類型:聲明一個結構類型

struct complex 
{ 
    float real; 
    float imaginary; 
}; 

在C語言中,你通常必須重新輸入「結構」,因此大多數程序員的typedef它。我們可以單獨做這樣的:

typedef complex ComplexType; 

或組合:

typedef struct complex { 
    float real; 
    float imaginary; 
} ComplexType; 

然後宣佈和分配:

ComplexType myComplexType; 
myComplexType.real = 0.5f; 
myComplexType.imaginary = 0.5f; 

或者:

ComplexType myComplexType = { 0.0f, 0.0f }; 

從那裏,你可以自由使用你的新類型。代碼中的一些錯誤是當你看起來你只需要一個時,你正在聲明兩種新的數據類型。另一個是你正在聲明指向浮點的指針,這可能不是你所需要的。當你想爲堆中的類型分配內存時,通常使用指針。

+0

非常感謝,這對我有很大的幫助。我的代碼正在工作! – none 2011-02-23 18:50:05