复数计算器:c 中结构变量的算术运算

Posted

技术标签:

【中文标题】复数计算器:c 中结构变量的算术运算【英文标题】:complex number calculator: arithmetic operations with struct variables in c 【发布时间】:2021-12-13 23:20:23 【问题描述】:

尝试编写一个可以进行复数计算的 c 程序。程序必须使用这种结构:

typedef struct Complex_ 
    double RealPart;
    double ImagPart;
 Complex;

它必须使用一个函数来读取用户输入的复数,另一个函数来添加它们,另一个函数来相乘,等等。我现在正试图让这个函数来添加数字,我'正在试图弄清楚如何做到这一点。这是用于读取用户输入的函数:

Complex read_complex(void) 
    Complex user1, user2;
    printf("Enter first complex number: ");
    scanf("%lf %lf", &user1.RealPart, &user1.ImagPart);
    printf("Enter the second complex number: ");
    scanf("%lf %lf", &user2.RealPart, &user2.ImagPart);

return;

这就是我到目前为止添加复数的方法:

Complex add_complex(Complex z1, Complex z2) 
    Complex z3;

    z3 = z1 + z2;//error on this line

    return(z3);

函数必须返回 z3,z3 必须等于 z1 + z2,z1 和 z2 必须是 Complex 类型的变量。我不知道如何使它符合这些规范,因为你不能对结构变量进行算术运算。

【问题讨论】:

您将不得不在某处编写自己的代码,以显式地将实部添加到实部,将复杂部分添加到复杂部分。如您所见,您不能将+ 运算符应用于两个结构并期望它们被神奇地添加; C 没有办法解决这个问题。 (您可以让它在具有运算符重载的C++中工作。) 请注意,从 C99 开始,该语言本身就支持复数。只需包含complex.h 我希望您的read_complex 功能比显示的更多。 user1user2 是该函数的本地函数,您只能 return 其中一个(并且您目前没有返回任何内容)。如果您希望用户输入的内容保留在该函数之外,则需要将它们作为指针传递。 【参考方案1】:

不是您要问的,但您的 read_complex 函数如图所示将不起作用。建议改成如下内容

#include <stdbool.h>

bool read_complex(Complex* user1, Complex* user2)

  bool inputValid = false;
  
  // weak check for validity, a non-NULL pointer isn't necessarily
  // valid. In fact, probably better to skip this check and instead
  // document/accept UB if user1 and/or user2 are not valid pointers.
  if (user1 != NULL && user2 != NULL)
  
    printf("Enter first complex number: ");
    if (scanf("%lf %lf", &(user1->RealPart), &(user1->ImagPart)) == 2)
    
      printf("Enter the second complex number: ");
      if (scanf("%lf %lf", &(user2->RealPart), &(user2->ImagPart)) == 2)
      
        inputValid = true;
       // else, print error message?
     // else, print error message?
  

  return inputValid;

scanf 返回一个int,指示与提供的格式说明符匹配的输入数量。每个输入应该是 2,如果不是,你知道有问题。 read_complex 的调用者可以决定如果它返回false 下一步要做什么。

【讨论】:

【参考方案2】:

您不能添加或减去数据结构。

Complex add_complex(Complex z1, Complex z2) 
    Complex z3;

    z3.RealPart = z1.RealPart + z2.RealPart;
    z3.ImagPart = z1.ImagPart + z2.ImagPart;

    return(z3);

【讨论】:

以上是关于复数计算器:c 中结构变量的算术运算的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何定义一个算术表达式

Python中的算术运算符都有哪些呢?

运算符重载

C语言中啥是算术运算

Lua复数类算术

什么是算术运算?什么是关系运算?什么是逻辑运算?