Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I need help with C language Objective: The purpose of this assignment is to learn and use structure type and makefile. Description: You are to

I need help with C language

Objective:

The purpose of this assignment is to learn and use structure type and makefile.

Description:

You are to implement a program that will demonstrate complex number operations as in Figure 10.10. Then, 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.

1) Make sure your program as one file works fine. Then, you will divide your program into several files. You may use more files if you want, but here I recommend having complex.h, complex.c, and main.c

2) Constants, structure definitions, global variables and function prototypes are defined in the header files for inclusions. Here 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".

3) In "complex.c", you should include "complex.h", so to have corresponding structure definition. 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 in the header fiile. 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. Also, the system include files should be before the user defined header files.

4). In "main.c", you should include "complex.h", so to have corresponding structure definition and complex related function prototypes. In addition to Fig 10.10's implementation, you also display the multiplication and division of two complex numbers.

5) In "Makefile", you should compile "complex.c" and "main.c" into object files separately, and make sure the object files depend 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". The linking is ususally the first rule in the Makefile.

As you have previously done, create a typescript that prints your program to the screen, confirms the system you are on, runs it using various input, and submit both the typescript and the source files containing your programs

Figure 10.10 Partial Implementation of Type and Operators for Complex Numbers

/*

* Operators to process complex numbers

*/

#include

#include

/* User-defined complex number type */

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 c1, complex_t c2);

complex_t subtract_complex(complex_t c1, complex_t c2);

complex_t multiply_complex(complex_t c1, complex_t c2);

complex_t divide_complex(complex_t c1, 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 of the first number */

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) /* output - address of complex variable to

fill */

{

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 value 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) /* input - complex number to display */

{

double a, b;

char sign;

a = c.real;

b = c.imag;

printf("(");

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

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

} 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) /* input - values to add */

{

complex_t csum;

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

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

return (csum);

}

/*

* Returns difference c1 - c2

*/

complex_t

subtract_complex(complex_t c1, complex_t c2) /* input parameters */

{

complex_t cdiff;

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

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

return (cdiff);

}

/* ** Stub **

* Returns product of complex values c1 and c2

*/

complex_t

multiply_complex(complex_t c1, complex_t c2) /* input parameters */

{

printf("Function multiply_complex returning first argument ");

return (c1);

}

/* ** Stub **

* Returns quotient of complex values (c1 / c2)

*/

complex_t

divide_complex(complex_t c1, complex_t c2) /* input parameters */

{

printf("Function divide_complex returning first argument ");

return (c1);

}

/*

* Returns absolute value of complex number c

*/

complex_t

abs_complex(complex_t c) /* input parameter */

{

complex_t cabs;

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

cabs.imag = 0;

return (cabs);

}

Enter the real and imaginary parts of a complex number

separated by a space> 3.5 5.2

Enter a second complex number> 2.5 1.2

(3.50 + 5.20i) + (2.50 + 1.20i) = (6.00 + 6.40i)

(3.50 + 5.20i) - (2.50 + 1.20i) = (1.00 + 4.00i)

|(3.50 + 5.20i)| = (6.27)

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Design And Implementation

Authors: Shouhong Wang, Hai Wang

1st Edition

1612330150, 978-1612330150

More Books

Students also viewed these Databases questions