Question: I need some help fixing this C code. The purpose of this assignment is to learn and use structure type and makefile. Description: The program

I need some help fixing this C code. The purpose of this assignment is to learn and use structure type and makefile.

Description:

The program is divided into several files: "complex.h", "complex.c", and "main.c". You should have a Makefile that will allow the user to type "make" to generate the executable "complex".

Instructions:

Here are some basic components for your program design.

First, in the Makefile, you should compile "complex.c" and "main.c" into object files separately, and make sure the object file depends on "complex.h" as well. In other words, if you modify "complex.h", both "complex.c" and "main.c" will be compiled again if you type "make". The final executable "complex" depends on linking "main.o" and "complex.o".

Second, in general, global variables and constants,structure definitions, and function prototypes are defined in the header file for inclusions. In "complex.h", you should have structure type definition for "complex_t" and function prototypes for "scan_complex", print_complex", "add_complex", "subtract_complex", "multiply_complex", "divide_complex", and "abs_complex".

Third, in general, related functions are grouped/implemented in the same file. In "complex.c", implement all the functions related to complex number operations as defined in the prototypes.Remember, in addition to the system include files, you need to add #include "complex.h" in order to have the defined structure and function prototypes.

Finally, in the main program, in addition to Fig 10.10's implementation, you also display the multiplication and division of two complex numbers.

Code that is given:

#include

#include

typedef struct

{

double real, imag;

} complex_t;

int scan_complex(complex_t *c);

void print_complex(complex_t c);

complex_t add_complex(complex_t cl, complex_t c2);

complex_t subtract_complex(complex_t cl, complex_t c2);

complex_t multiply_complex(complex_t cl, complex_t c2);

complex_t abs_complex(complex_t c);

//*** Driver

int main(void)

{

complex_t com1, com2;

//*** Gets two complex numbers

printf("Enter the real and imaginary parts of a complex number ");

printf("Separated by a space> ");

scan_complex(&com1);

printf("Enter a second complex number> ");

scan_complex(&com2);

//*** Forms and displays the sum

printf(" ");

print_complex(com1);

printf(" + ");

print_complex(com2);

printf(" = ");

print_complex(add_complex(com1, com2));

//*** Forms and displays the difference

printf(" ");

print_complex(com1);

printf(" - ");

print_complex(com2);

printf(" = ");

print_complex(subtract_complex(com1, com2));

//*** Forms and displays the absolute value

printf(" |");

print_complex(com1);

printf("| = ");

print_complex(abs_complex(com1));

printf(" ");

return (0);

}

//*** Complex number input function returns standard scanning error code

//*** 1 => valid scan, 0 => error, negative EOF value => end of file

int scan_complex(complex_t *c)

{

int status;

status = scanf("%lf%lf", &c->real, &c->imag);

if (status == 2)

status = 1;

else if (status != EOF)

status = 0;

return (status);

}

//*** Complex output function displays values as (a + bi) or (a - bi),

//*** dropping a or b if they round to 0 unless both round to 0

void print_complex(complex_t c)

{

double a, b;

char sign;

a = c.real;

b = c.imag;

printf("(");

if (fabs(a) < .005 && fabs(b) < .005)

{

print("%.2f", b);

} else if (fabs(b) < .005) {

printf("%.2f", a);

} else if (fabs(a) < .005) {

printf("%.2fi", b);

} else {

if (b < 0)

sign = '-';

else

sign = +

printf("%.2f $c %.2fi", a, sign, fabs(b));

}

printf(")");

}

//*** Returns sum of complex values c1 and c2

complex_t

add_complex(complex_t c1, complex_t c2)

{

complex_t csum;

csum.real = c1.real + c2.real;

csum.imag = c1.imag + c2.imag;

return (csum);

}

//*** Returns the difference c1 - c2

complex_t

subtract_complex(complex_t c1, complex_t c2)

{

complex_t cdiff;

cdiff.real = c1.real - c2.real;

cdiff.imag = c1.imag - c2.imag;

return (cdiff);

}

//*** Returns the product of complex value c1 and c2

complex_t

multiply_complex(complex_t c1, complex_t c2)

{

printf(" Function multiply_complex returning first argument ");

return (c1);

}

//*** Returns absolute value of complex number c

complex_t

abs_complex(complex_t c)

{

complex_t cabs;

cabs.real = sqrt(c.real * c.real + c.imag * c.imag);

cabs.imag = 0;

return (cabs);

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!