Code:`/*`

A program to compute the sine of an angle using sine's series expansion and without the use of the maths library

David Tims 10319139 timsd@tcd.ie

*/

#include <stdio.h>

double dfactorial(int n); /*function prototype for dfactorial (given n, outputs n!), mypow (given x and n outputs x^n) and mysine (given x and nmax computes sin(x) for nmax the iterating value) */

double mypow(double x, int n);

double mysine(double x, int nmax);

int main()

{

double x;

int nmax;

printf("Enter a value for 'x' between (pi, -pi) for which 'sin(x)' is to evaluated\n and an iterating value 'n'\n"); /*asks user for values of 'x' and 'nmax' */

scanf("%lf" "%d", &x, &nmax);

mysine(x,nmax); /* applies mysine on 'x' and 'nmax' prducing an approx to sin(x) */

printf("sin(x)=%lf\n", mysine(x,nmax)); /* prints the approx found by mysine for sin(x) */

return 0; /* lets compiler know program has reached the end */

}

double dfactorial(int n) /* defining ifactorial */

{

double i;/*declaring i and z, two new variables to use in ifactorial */

double z;

i=1.0; /* defining i and z */

z=1.0;

if(n==0) /* For n=o the factorial is mathematically defined as 1 */

{

return(1.0); /* returns 1 */

}

else if (n>0) /* for positive n computes algorithm for factorial */

{

while(i<=n)

{

z=z*i; /* e.g case n=2: z=1*1=1 update i++ so i=1+1=2 ===> update z, z=1*2=2!=n! etc for general n */

i++;

}

return(z); /* returns final value of z i.e n! */

}

else

{

printf("You need to enter a positive integer, disregard all output and try again\n"); /* Just to let the user know n needs to be positive and the output is useless */

return(0);

}

}

double mypow(double x, int n) /* defining "mypow" */

{

int a; /* declaring variables a, b and y to use in mypow */

double b;

double y;

y=1/x; /* need this for the case where n is negative ( i.e x^(-n) = 1/x^n = 1/x*....*1/x ) */

a=1.0;

b=1.0;

if(n==0) /* if n is 0, by definition the value of x^n is 1 (mathematically defined) */

{

return(1);

}

else if (n>0)/* computes algorithm for x^n */

{

while(a<=n)

{

b=b*x; /* e.g n=2 case: b=1*x=x, update a: a=1+1=2 ===> b=x*x=x^2=x^n etc for gen n */

a++;

}

return(b); /* returns final value of z, which is the x^n value required */

}

else /* computes algorithm for x^n when n is negative, note because n is now negative the condition for i needed to be adjusted */

{

while(a>=n+2)

{

b=b*y;

a--;

}

return(b);

}

}

double mysine(double x, int nmax) /*defining mysine function, note it calls other functions for each iteration of n */

{

double c; /* daclaring variables c and t to use in mysine */

double t;

int n;

c=0;

for (n=0; n<nmax; n++)

{

t = (mypow(-1,n))*(x)*(mypow(x,n))*(mypow(x,n))*(1/(dfactorial(2*n+1))); /* t is the nth tern in the sine series expansion */

c=c+t; /*updates the sum after each value of n to include nth term */

n++;

}

return c;

}