Recursive Functions In C Programming Language

Lets learn recursive functions in C programming language, with examples and illustrations of memory and function instances in the stack.

Stake is a Data Structure and we’ll be discussing it once we start teaching Data Structures using C topics. For now consider it as a memory stack and some organized structure to hold data, which follows LIFO rule. i.e., Last In, First Out

That is, the last instance which enters the stack is the one which leaves the stack first.

Related Read:
Function / Methods In C Programming Language

Recursive Function: A function calling itself, within it’s own function definition is called Recursive Function.

Types of Recursive Functions

There are 4 types of recursive functions:
1. Direct Recursive function.
2. In-direct Recursive function.
3. Tail Recursive function.
4. Non-tail Recursive function.

We’ll discuss each one in separate video tutorials.

In this video tutorial lets learn the very basic of how to write and use recursive functions and how to keep track of function instances and return data.

Requirements To Learn Recursion

1. You need to know basics of C programming language. If you’re a total beginner, then we do not advice you to start with recursive functions. Just go to this page C Programming: Beginner To Advance To Expert and start watching the C program video tutorials one by one, and in no time you’ll be an advance user and you can learn/understand Recursive functions.

2. If you know the basics, then grab a piece of paper and get a pen. Write down the program on the paper, and also write the function call instances and track the variable values. Write everything we’re explaining in this video tutorial. If you get any doubts, write it down too. Watch the video once again and check if your doubts are cleared. If its still not cleared, follow the next step.

3. Turn on your computer and your favorite C editor, and type the program. Don’t copy paste it. Write the code yourself. Better if you write it without looking at the source code we’ve posted below. Once you execute and get the results, edit/modify the source code and check for different results. Check if you can edit the program and clarify your doubts. If you still don’t understand, then use the comment section below and ask your doubts.

4. Even if you understood the concept well, please visit the comment section below and try to help other students understand it. By teaching, you learn more.

Video Tutorial: Recursive Functions In C Programming Language


[youtube https://www.youtube.com/watch?v=tUQw_ty97yQ]

YouTube Link: https://www.youtube.com/watch?v=tUQw_ty97yQ [Watch the Video In Full Screen.]


Source Code: Recursive Functions In C Programming Language: Example

#include<stdio.h>

void natural(int);

int main()
{
    int num = 1;

    natural(num);

    return 0;
}

void natural(int num)
{
    if(num <= 3)
    {
        natural(num+1);
        printf("%d  ", num);
    }

    return;
}

Output:
3 2 1

Logic To Print natural numbers from 1 to 3 using Recursion

We call natural() function and pass num to it. Initial value of num is set to 1. Inside natural() function/method we check if the value of num is less than or equal to 3. If true, we call the method natural() and pass num+1 to it. Once num is greater than 3, return statement executes and the control transfers to the calling function and the remaining code in that function gets executed. In our program we have printf statement after the recursive function call. So our program prints the value of num and then transfers the control to the calling function.

SlnonumFunction Call
11main()
21nature(1+1)
32nature(2+1)
43nature(3+1)
54nature(4+1)

Each time the recursive call is executed, an instance of the function and memory associated with it is pushed or added to the stack. And for each time the return statement is executed, the function and the memory associated with it is popped or deleted from the stack.

Stack is a Data Structure used to store data in some organized way. For now just know that its a memory stack in your RAM. It’s like a basket which holds the data in particular order. The data is stored one upon another. So the one which gets inserted or pushed at the last is the one which gets popped out first. This concept is called LIFO. Which means, Last In, First Out.

5
4
3
2
1

So we have 5 numbers inside the stack. If we want to add 6 to it, it’ll sit at the top of 5. In above stack, if you want to pop out, the first number you can pop out is the last number present in the stack, which is 5. You can only pop out the items one by one in this order, from above stack: 5, 4, 3, 2, 1.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Find GCD using Repeated Subtraction

Lets write a C program to find Greatest Common Divisor of two positive integer numbers using repeated subtraction.

Related Read:
C Program to Find GCD or HCF of Two Numbers
C Program To Find GCD and LCM of Two Numbers using Euclidean algorithm
C Program To Find GCD using Pointers and Functions

Video Tutorial: C Program To Find GCD using Repeated Subtraction


[youtube https://www.youtube.com/watch?v=sv8Jehsydrs]

YouTube Link: https://www.youtube.com/watch?v=sv8Jehsydrs [Watch the Video In Full Screen.]


Source Code: C Program To Find GCD using Repeated Subtraction

#include<stdio.h>

int main()
{
    int num1, num2;

    printf("Enter 2 positive integer numbers\n");
    scanf("%d%d", &num1, &num2);

    num1 = (num1 < 0) ? -num1 : num1;
    num2 = (num2 < 0) ? -num2 : num2;

    printf("\nGreatest Common Divisor of %d and %d is ", num1, num2);

    while(num1 != num2)
    {
        if(num1 > num2)
        {
            num1 = num1 - num2;
        }
        else
        {
            num2 = num2 - num1;
        }
    }

    printf("%d.\n", num1);

    return 0;
}

Output 1:
Enter 2 positive integer numbers
20
30

Greatest Common Divisor of 20 and 30 is 10.

Output 2:
Enter 2 positive integer numbers
1980
1617

Greatest Common Divisor of 1980 and 1617 is 33.

Logic To Find GCD using Repeated Subtraction

Lets assume that num1 = 15 and num2 = 20. Lets calculate GCD for these 2 numbers.

While loop iterates until num1 is equal to num2.

num1num2Greater NoSubtract NumbersResult
1520num2 = 20num2 =
num2 – num1
num2:
20 – 15 = 5
155num1 = 15num1 =
num1 – num2
num1:
15- 5 = 10
105num1 = 10num1 =
num1 – num2
num1:
10- 5 = 5
55Both Are Equalnum1 == num2GCD is 5.

You can see below code in the C program i.e., converting a negative number into positive. Our source code above works only for positive integer numbers without this code. If the user enters negative value we use ternary operator to make it a positive value.

    num1 = (num1 < 0) ? -num1 : num1;  
    num2 = (num2 < 0) ? -num2 : num2;  

Here we check if num1 is less than 0. If true, then value of num1 is negative. So we multiply the number by -, which gives us a positive number. For example, if num1 is -15, then -(-15) is +15.

Ternary Operator / Conditional Operator In C

You can make use of simple if else statement like below, to convert negative number into positive:

#include<stdio.h>
if(num1 < 0)
   num1 = num1 * -1;

if(num2 < 0)
   num2 = num2 * -1;

That would convert a negative number to positive number.

While Loop
While loop iterates until num1 is not equal to num2. Once num1 is equal to num2, control exits while loop. Whatever is present in num1 or num2 is the GCD of 2 positive integer numbers entered by the user.

Inside while loop, we check if num1 is greater than num2. If true, we subtract num2 from num1 and store it back inside variable num1. Else if num2 is greater than num1, then we subtract num1 from num2 and store it back inside num2. We repeat this until num1 is equal to num2.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Find GCD using Pointers and Functions

Write a function to compute the greatest common divisor given by Euclid’s algorithm, exemplified for J = 1980, K = 1617 as follows:

1980 / 1617 = 11980 – 1 * 1617 = 363
1617 / 363 = 41617 – 4 * 363 = 165
363 / 165 = 2363 – 2 * 165 = 33
5 / 33 = 5165 – 5 * 33 = 0

Thus, the greatest common divisor is 33.

Analyze Above Problem Statement

1. We need to find Greatest Common Divisor(GCD) of 2 numbers entered by the user, using Euclid’s Algorithm.

2. If J = 1980 and K = 1617, GCD should be 33.

3. Make sure to use the calculation part as shown in problem statement.

4. We observe the calculation part in problem statement and formulate some formulas to figure out the result i.e., GCD of 2 numbers input by the user.

Related Read:
C Program To Find GCD and LCM of Two Numbers using Euclidean algorithm

Video Tutorial: C Program To Find GCD using Pointers and Functions, using Euclid’s Algorithm


[youtube https://www.youtube.com/watch?v=mwDUeKUURbM]

YouTube Link: https://www.youtube.com/watch?v=mwDUeKUURbM [Watch the Video In Full Screen.]


Source Code: C Program To Find GCD using Pointers and Functions, using Euclid’s Algorithm

#include<stdio.h>

void calc_gcd(int, int, int*);

int main()
{
    int j, k, gcd;

    printf("Enter 2 integer numbers\n");
    scanf("%d%d", &j, &k);

    calc_gcd(j, k, &gcd);

    printf("\nGreatest Common Divisor of %d and %d is %d.\n", j, k, gcd);

    return 0;
}

void calc_gcd(int numerator, int denominator, int *gcd)
{
    int temp, num;

    if(denominator == 0)
    {
        *gcd = numerator;
    }
    else if(numerator == 0)
    {
        *gcd = denominator;
    }
    else
    {
        num  = numerator / denominator;
        temp = numerator - num * denominator;

        while(temp)
        {
            numerator   = denominator;
            denominator = temp;
            num  = numerator / denominator;
            temp = numerator - num * denominator;
        }

        *gcd = denominator;
    }
}

Output 1:
Enter 2 integer numbers
1980
1617

Greatest Common Divisor of 1980 and 1617 is 33.

Output 2:
Enter 2 integer numbers
1617
1980

Greatest Common Divisor of 1617 and 1980 is 33.

Output 3:
Enter 2 integer numbers
15
20

Greatest Common Divisor of 15 and 20 is 5.

Output 4:
Enter 2 integer numbers
20
15

Greatest Common Divisor of 20 and 15 is 5.

Logic To Find GCD using Pointers and Functions, using Euclid’s Algorithm

We ask the user to input integer values for variables j and k. We pass values of j and k and address of variable gcd to a function called calc_gcd().

Inside calc_gcd() function
Inside calc_gcd() function we use the following calculations:

Note: We copy the value of j, k and &gcd passed by main method into local variables of calc_gcd() i.e., numerator, denominator and *gcd.

Step 1: We check if denominator is 0. In that case the value present in numerator itself is the GCD. So we copy value present in variable numerator to *gcd.

Step 2: If denominator is not zero. Then, we divide numerator with denominator value and store the result into a variable called num.

num = numerator / denominator;

If j = 1980 and k = 1617, then numerator = 1980 and denominator = 1617.

num = numerator / denominator;
num = 1980/ 1617;
num = 1;

According to problem statement:

1980 / 1617 = 11980 – 1 * 1617 = 363

We’ve formulated the equation for the first part i.e., 1980 / 1617 = 1
Now lets formulate an equation for the second part i.e., 1980 – 1 * 1617 = 363

If you look at 1980 – 1 * 1617 = 363 closely and substitute the values with corresponding variables then you’ll come up with below formula:

temp = numerator – num * denominator;

Look at Step 1 for values of numerator, denominator and num.

Now lets look at the equations given in the problem statement:

1980 / 1617 = 11980 – 1 * 1617 = 363
1617 / 363 = 41617 – 4 * 363 = 165

In this look at 1617 / 363 = 4. Here the value of denominator has been shifted to numerators place, and the value of temp has been copied to denominator. So lets write the code:

numerator = denominator;
denominator = temp;

Step 3: Now lets use these formulate in co-ordination to finish writing our function code.

We need to repeat the code in order to get the results according to the columns present in the problem statement equations:

Here are our formulas:

   
        num         = numerator / denominator;
        temp        = numerator - num * denominator;     
        numerator   = denominator;
        denominator = temp;

Here are the steps in problem statement to calculate the GCD:

1980 / 1617 = 11980 – 1 * 1617 = 363
1617 / 363 = 41617 – 4 * 363 = 165
363 / 165 = 2363 – 2 * 165 = 33
5 / 33 = 5165 – 5 * 33 = 0

We need to repeat execution of our code to get above result:

num  = numerator / denominator;
temp = numerator - num * denominator;

     while(temp)
     {
        numerator   = denominator;
        denominator = temp;
        num  = numerator / denominator;
        temp = numerator - num * denominator;
      }

      *gcd = denominator;

We need to put our code inside a looping construct to repeat the code. Here we are using while loop. So while loop iterates until temp value is positive. Once value of temp is 0, the control exits the while loop.

We have written 2 lines of code before the while loop:

num  = numerator / denominator;
temp = numerator - num * denominator;

that is because we need to have some value inside variable temp before using it as condition for while loop.

Once the value of temp is 0, control exits while loop. Outside while loop we transfer the value present inside denominator to *gcd.

So *gcd will have the Greatest Common Divisor for values input by the user(j = 1980 and k = 1617).

Observe this table from problem statement

1980 / 1617 = 11980 – 1 * 1617 = 363
1617 / 363 = 41617 – 4 * 363 = 165
363 / 165 = 2363 – 2 * 165 = 33
5 / 33 = 5165 – 5 * 33 = 0

When temp value is 0, value of denominator is 33 – which is the Greatest Common Divisor of numbers 1980 and 1617.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Find If a Point Lies Inside Triangle or Not

Write a function to compute the distance between two points and use it to develop another function that will compute the area of the triangle whose vertices are A(x1, y1), B(x2, y2), and C(x3, y3). Use these functions to develop a function which returns a value 1 if the point (x, y) lies inside the triangle ABC, otherwise returns a value 0.

3 triangles inside a triangle

Analyze Above Problem Statement

1. We need to define a function which calculates the distance between two points.

For Example: distance(x1, y1, x2, y2); This function takes values of 2 points (x1, y1) and (x2, y2) and returns the distance between these 2 points.

2. User will enter values for 3 points, which are 3 edges/points of the triangle: (x1, y1), (x2, y2) and (x3, y3). We need to make use of a function(check Step 1) to calculate the distance between them. Once we have the distances, which are nothing but 3 sides of the triangle, we can use it to find area of that triangle using Heron’s or Hero’s Formula.

We call the distance between points (x1, y1) and (x2, y2) as a.
We call the distance between points (x2, y2) and (x3, y3) as b.
We call the distance between points (x3, y3) and (x1, y1) as c.

Using 3 sides of the triangle and Heron’s formula we calculate the area of triangle and store it inside variable area.

Hint: Check the image above for all these points we’ve explained so far. It has all the markings, which will help you visualize the concept.

3. Next, user will enter values for a point(x, y) on the graph. We need to make use of distance function(see step 1) and area of triangle function(see step 2) to find the area of 3 triangles formed by connecting (x1, y1) and (x, y), (x2, y2) and (x, y), (x3, y3) and (x, y);

We store the area of these 3 triangles inside variables A, B and C.

4. Write a function which returns 1 if the point lies within the triangle and returns 0 if the point lies outside the triangle.

If area of triangle represented by points (x1, y1), (x2, y2) and (x3, y3) is equal to the sum of the 3 triangles formed by connecting these 3 points to (x, y), then the points lie inside the triangle else the point is outside the triangle.

i.e., area_of_main_triangle == A + B + C; then the point lies inside the main triangle else it lies outside the main triangle.

Hint: Check the image above once again and write it down on a piece of paper, so that you clearly understand all the markings.

Note: This C program is comparatively bigger, but most part of its logic is already covered in other videos. Nothing complicated here. Its very simple, easy and straightforward program. Just don’t get stressed by looking at the length of this program. Learn the code(and the logic) step by step. Consume this or understand this program bit by bit and in no time you’ll know the whole thing!

Related Read:
C Program To Calculate Distance Between Two Points
C Program To Calculate Area of a Triangle using Pointers

Video Tutorial: C Program To Find If a Point Lies Inside Triangle or Not


[youtube https://www.youtube.com/watch?v=ntjM9YZP0qk]

YouTube Link: https://www.youtube.com/watch?v=ntjM9YZP0qk [Watch the Video In Full Screen.]


Source Code: C Program To Find If a Point Lies Inside Triangle or Not

#include<stdio.h>
#include<math.h>

void  calc(float x1, float y1, float x2, float y2, float x3, float y3,
          float x, float y, int *flag, float *area);
int   position(float area, float A, float B, float C);
float distance(float x1, float y1, float x2, float y2);
float calc_area(float a, float b, float c);

int main()
{
    float x1, y1, x2, y2, x3, y3, x, y;
    int   flag = 0;
    float area = 0;

    printf("Enter value for(x1, y1)\n");
    scanf("%f%f", &x1, &y1);

    printf("Enter value for(x2, y2)\n");
    scanf("%f%f", &x2, &y2);

    printf("Enter value for(x3, y3)\n");
    scanf("%f%f", &x3, &y3);

    printf("Enter point(x, y) to check if it lies inside the Triangle\n");
    scanf("%f%f", &x, &y);

    calc(x1, y1, x2, y2, x3, y3, x, y, &flag, &area);

    printf("\nArea of Triangle = %f\n", area);

    if(flag) printf("Point (%0.1f, %0.1f) lies within the Triangle\n", x, y);
    else     printf("Point (%0.1f, %0.1f) lies outside the Triangle\n", x, y);

    return 0;
}

void calc(float x1, float y1, float x2, float y2, float x3, float y3,
          float x, float y, int *flag, float *area)
{
    float A, B, C, a, b, c, d, e, f;

    a = distance(x1, y1, x2, y2);
    b = distance(x2, y2, x3, y3);
    c = distance(x3, y3, x1, y1);
*area = calc_area(a, b, c);

    d = distance(x1, y1, x, y);
    e = distance(x2, y2, x, y);
    f = distance(x3, y3, x, y);

    A = calc_area(d, a, e);
    B = calc_area(e, b, f);
    C = calc_area(f, c, d);

*flag = position(*area, A, B, C);
}

float distance(float x1, float y1, float x2, float y2)
{
    return( sqrt( pow((x2 - x1), 2) + pow((y2 - y1), 2) ) );
}

float calc_area(float a, float b, float c)
{
    float S;

    S = (a + b + c) / 2.0;

    return( sqrt(S * (S - a) * (S - b) * (S - c) ) );
}

int position(float area, float A, float B, float C)
{
    float res = area - (A + B + C);

    if(res < 0)
    {
        res *= -1;
    }

    if(res == 0 || res < 0.001 )
    {
        return(1);
    }
    else
    {
        return(0);
    }
}

Output 1:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
10 0
Enter value for(x3, y3)
10 20
Enter point(x, y) to check if it lies inside the Triangle
5 2

Area of Triangle = 100.000000
Point (5.0, 2.0) lies within the Triangle

Output 2:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
10 0
Enter value for(x3, y3)
10 20
Enter point(x, y) to check if it lies inside the Triangle
10 20.1

Area of Triangle = 100.000000
Point (10.0, 20.1) lies outside the Triangle

Output 3:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
20 0
Enter value for(x3, y3)
10 30
Enter point(x, y) to check if it lies inside the Triangle
10 15

Area of Triangle = 300.000000
Point (10.0, 15.0) lies within the Triangle

Logic To Find If a Point Lies Inside Triangle or Not

We ask the user to enter values for 3 edges or points of the triangle. We call it (x1, y1), (x2, y2) and (x3, y3). We also ask the user to enter a point, to check if it lies inside or outside the Triangle. We store the value of point inside (x, y).

We pass the values of (x1, y1), (x2, y2), (x3, y3), (x, y) and the address of variables flag and area to a function called calc().

calc(x1, y1, x2, y2, x3, y3, x, y, &flag, &area);

Inside calc() function
Inside calc() function we call another function to find distance between user entered points (x1, y1), (x2, y2), (x3, y3) and (x, y). We pass values of 2 points to the function distance() to get back the value or the distance between these two points.

a = distance(x1, y1, x2, y2);

Similarly, we find the distance between points (x2, y2) and (x3, y3), (x3, y3) and (x1, y1). This gives us lengths of all 3 sides of the triangle.

    a = distance(x1, y1, x2, y2);
    b = distance(x2, y2, x3, y3);
    c = distance(x3, y3, x1, y1);

Inside distance() function
We use a simple formula to calculate distance between 2 points:

distance = sqrt( (x2 – x1)*(x2 – x1) + (y2 – y1)*(y2 – y1) );

C Program To Calculate Distance Between Two Points

Inside calc_area() function
When we know the values of all 3 sides of a triangle, we can easily calculate its area using Heron’s or Hero’s formula.

sqrt(S * (S – a) * (S – b) * (S – c) );

where a, b and c are sides of the triangle.
and S is semi-perimeter of the Triangle.

S is calculate using below formula:

S = (a + b + c) / 2.0;

C Program To Calculate Area of a Triangle using Pointers

Inside calc() function
Now we calculate the distance between the user entered point(x, y) and with all 3 points of the triangle (x1, y1), (x2, y2) and (x3, y3). And store the values inside variables d, e, f. We make use of the function distance() here to get the distance between the points.

Inside calc_area() function
Again we reuse the calc_area() function to calculate the area’s of 3 triangles formed by connecting (x1, y1), (x2, y2), (x3, y3) with (x, y).

Inside position() function
Now we have area of the entire triangle(with sides a, b, c). And area of 3 more triangles present inside the main triangle – according to our assumption, as per above image. It need not be like that. We store these 3 areas in variables A, B and C.

If area == A + B + C, then the point (x, y) lies inside the triangle orelse the point(x, y) lies outside the triangle.

Very Important Note:

Since variables *area, A, B, C and all the points on the graph are of type float. So the final result for *area == A + B + C will have a very small difference. i.e., up to 0.001

So whenever we check for if(*area == A + B + C) it returns false or 0. So we use different logic. If the point lies inside the triangle then A + B + C will be equal to the area of main triangle. So we subtract the value of main triangle with all the 3 triangles present inside, so the result should be either 0 or with a small difference less than 0.001.

So the difference can be positive or negative, so we multiple the result by -1 in case the result is less than 0. After that we check for the condition if res is equal to 0 or res is less than 0.001, then we return 1, indicating that the point lies inside the triangle. If there is a difference bigger than 0.001 then we return 0, indicating that the point (x, y) lies outside the triangle.

Source Code Which Matches Exactly To The Problem Statement

3 triangles inside a triangle
We’ve changed the variable names to match the problem statement. Rest everything is same – the logic and working etc. Only 4 variable names have been changed to match the problem statement.

Source Code: C Program To Find If a Point Lies Inside Triangle or Not

#include<stdio.h>
#include<math.h>

void  calc(float x1, float y1, float x2, float y2, float x3, float y3,
          float x, float y, int *flag, float *ABC);
int   position(float ABC, float APB, float BPC, float CPA);
float distance(float x1, float y1, float x2, float y2);
float calc_area(float a, float b, float c);

int main()
{
    float x1, y1, x2, y2, x3, y3, x, y;
    int   flag = 0;
    float ABC = 0;

    printf("Enter value for(x1, y1)\n");
    scanf("%f%f", &x1, &y1);

    printf("Enter value for(x2, y2)\n");
    scanf("%f%f", &x2, &y2);

    printf("Enter value for(x3, y3)\n");
    scanf("%f%f", &x3, &y3);

    printf("Enter point(x, y) to check if it lies inside the Triangle\n");
    scanf("%f%f", &x, &y);

    calc(x1, y1, x2, y2, x3, y3, x, y, &flag, &ABC);

    printf("\nArea of Triangle = %f\n", ABC);

    if(flag) printf("Point (%0.1f, %0.1f) lies within the Triangle\n", x, y);
    else     printf("Point (%0.1f, %0.1f) lies outside the Triangle\n", x, y);

    return 0;
}

void calc(float x1, float y1, float x2, float y2, float x3, float y3,
          float x, float y, int *flag, float *ABC)
{
    float APB, BPC, CPA, a, b, c, d, e, f;

    a = distance(x1, y1, x2, y2);
    b = distance(x2, y2, x3, y3);
    c = distance(x3, y3, x1, y1);
 *ABC = calc_area(a, b, c);

    d = distance(x1, y1, x, y);
    e = distance(x2, y2, x, y);
    f = distance(x3, y3, x, y);

  APB = calc_area(d, a, e);
  BPC = calc_area(e, b, f);
  CPA = calc_area(f, c, d);

*flag = position(*ABC, APB, BPC, CPA);
}

int position(float ABC, float APB, float BPC, float CPA)
{
    float res = ABC - (APB + BPC + CPA);

    if(res < 0)
    {
        res *= -1;
    }

    if(res == 0 || res < 0.001 )
    {
        return(1);
    }
    else
    {
        return(0);
    }
}

float distance(float x1, float y1, float x2, float y2)
{
    return( sqrt( pow((x2 - x1), 2) + pow((y2 - y1), 2) ) );
}

float calc_area(float a, float b, float c)
{
    float S;

    S = (a + b + c) / 2.0;

    return( sqrt(S * (S - a) * (S - b) * (S - c) ) );
}

Output 1:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
10 0
Enter value for(x3, y3)
10 20
Enter point(x, y) to check if it lies inside the Triangle
5 2

Area of Triangle = 100.000000
Point (5.0, 2.0) lies within the Triangle

Output 2:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
10 0
Enter value for(x3, y3)
10 20
Enter point(x, y) to check if it lies inside the Triangle
10 20.1

Area of Triangle = 100.000000
Point (10.0, 20.1) lies outside the Triangle

Output 3:
Enter value for(x1, y1)
0 0
Enter value for(x2, y2)
20 0
Enter value for(x3, y3)
10 30
Enter point(x, y) to check if it lies inside the Triangle
10 15

Area of Triangle = 300.000000
Point (10.0, 15.0) lies within the Triangle

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

C Program To Calculate Area of a Triangle using Pointers

Lets write a C program to calculate area of a Triangle when their sides are input by the user. Lets use pointers and functions.

Problem Statement

If the lengths of the sides of a Triangle are denoted by a, b and c, then area of Triangle is given by:

Heron's or Hero's Formula

where, s = (a + b + c) / 2. Write a function to calculate the area of triangle.

Here s is semi-perimeter of the Triangle.

Related Read:
Find Area of a Triangle Using Its Sides: C Program
Basics of Pointers In C Programming Language

Formula To Calculate Area of a Triangle When its Sides are Given

area = sqrt( S * (S – a) * (S – b) * (S – c) );

where a, b and c are lengths of sides of the Triangle.
S = (a + b + c) / 2.0;
S – Semi-perimeter.

Very Important Note:

Any address preceded by a * (Indirection operator) will fetch the value present at that address.

Video Tutorial: C Program To Calculate Area of Triangle using Pointers


[youtube https://www.youtube.com/watch?v=cfQhWAoP6u8]

YouTube Link: https://www.youtube.com/watch?v=cfQhWAoP6u8 [Watch the Video In Full Screen.]


Source Code: C Program To Calculate Area of Triangle using Pointers

#include<stdio.h>
#include<math.h>

void cal_area(float, float, float, float*);
int  validate(float, float, float);

int main()
{
    float a, b, c, area;

    printf("Enter values of 3 sides of a Triangle.\n");
    scanf("%f%f%f", &a, &b, &c);

    if( validate(a, b, c) )
    {
        cal_area(a, b, c, &area);
        printf("Area of Triangle is %0.2f\n", area);
    }
    else
    {
        printf("Please enter valid values for sides of Triangle.\n");
    }

    return 0;
}

void cal_area(float x, float y, float z, float *A)
{
    float S;

     S = (x + y + z) / 2.0;

    *A = sqrt(S * (S - x) * (S - y) * (S - z));
}

int validate(float x, float y, float z)
{
    int flag = 0;

    if(x > y && x > z)
    {
        flag = ( x < (y + z) );
    }
    else if(y > z)
    {
        flag = ( y < (x + z) );
    }
    else
    {
        flag = ( z < (x + y) );
    }

    return(flag);
}

Output 1:
Enter values of 3 sides of a Triangle.
10
20
30
Please enter valid values for sides of Triangle.

Output 2:
Enter values of 3 sides of a Triangle.
50
30
0
Please enter valid values for sides of Triangle.

Output 3:
Enter values of 3 sides of a Triangle.
15
14
2
Area of Triangle is 12.53

Output 4:
Enter values of 3 sides of a Triangle.
14.6
14
0.7
Area of Triangle is 2.58

Output 5:
Enter values of 3 sides of a Triangle.
4
5
6
Area of Triangle is 9.92

In Output 1: the largest side is 30. So the other side is 10 and 20. Adding 10 and 20 gives 30, which is not greater than the largest side. So these three values can’t form a valid triangle.

In Output 2: we’ve a 0. No side of a Triangle can have a length of 0. So it’s a invalid Triangle.

Logic To Calculate Area of a Triangle using Pointers

We ask the user to enter/input values of 3 sides of a Triangle. We pass these three values along with the address of variable area to a function called cal_area().

Inside cal_area() function we calculate the semi-perimeter using below formula:

S = (x + y + z) / 2.0;

Note: While calculating Semi-perimeter make sure to divide by 2.0 and not by 2. Because sum of sides of triangle might be a floating point number. Division by integer will give integer value as result. So it’s always better to avoid division by integer value.

Calculate Area of Triangle using Heron’s or Hero’s Formula

To calculate Area of a Triangle when all 3 of its sides are known, we make use of Heron’s or Hero’s Formula:

*A= sqrt( S * (S – a) * (S – b) * (S – c) );

We are storing the result inside a pointer variable. Variable A has the address of variable area i.e., A = &area. *A is the value present at address A or &area.

When we modify the value present at an address it reflects everywhere in the program. Hence we are able to display the result of area inside main method, without literally returning any value from cal_area() funtion.

Logic To Validate The Sides of Triangle

A Triangle is said to be valid if the sum of two sides is greater than the largest of the three sides.

For Example:
If a, b and c are 3 sides of the Triangle. If c is the largest side. Then for the Triangle to be valid, value of (a+b) must be greater than c.

(a+b) > c

Triangle Valid or Not based On Sides: C Program

In function validate() we first find the largest side of the triangle and check if its value is less than the sum of other 2 sides of the triangle. If true we return 1 else we return 0.

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert