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

C Program To Evaluate sin(x) = x – (x^3)/3! + (x^5)/5! + (x^7)/7! + ..

Write a C function to evaluate the series

sin(x) = x – x3/3! + x5/5! – x7/7! …

up to 10 terms.

Analyze Above Problem Statement

Sine series formula

1. In above sine series, observe the first term, which is x. Which can be written as x1/1!.

i.e., x = x1/1!;

2. Check the exponent and the number used to divide the value of x in each series. 1 followed by 3 which is followed by 5 and so on. If you observe closely they’re all odd numbers. Adding 2 to 1 gives you 3. Adding 2 to 3 gives you 5. Adding 2 to 5 gives you 7 and so on ..

So the sine series becomes:

sin(x) = x1/1! – x3/3! + x5/5! – x7/7! + x9/9! – x11/11! + x13/13! – x15/15! + x17/17! – x19/19!

Now we have all 10 terms in the sine series.

3. Now observe the sign. First term in the series is positive. Second term is negative. Third term is positive. Again the forth term is negative. So we can conclude that, first term starts with positive and then it’s an alternative between negative and positive.

4. Next we need to find factorial of each number which divides x in each series. i.e., 1, 3, 5, 7, 9, 11, 13, 15, 17, 19. (10 odd numbers)

Related Read:
Basics of Pointers In C Programming Language
Function / Methods In C Programming Language

Very Important Note:

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

Video Tutorial: C Program To Evaluate sin(x) = x – (x^3)/3! + (x^5)/5! + (x^7)/7! + ..


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

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


Source Code: C Program To Evaluate sin(x) = x – (x^3)/3! + (x^5)/5! + (x^7)/7! + ..

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

double factorial(int);
void   calc(float, float*);

int main()
{
    int   x;
    float radian, result = 0;

    printf("Enter value of x in degrees\n");
    scanf("%d", &x);

    radian = x * (3.14159 / 180.0); // Convert Degree To Radian

    calc(radian, &result);

    printf("Sin(%d) = %f\n", x, result);

    return 0;
}

void calc(float num, float *res)
{
    int count, n = 1, sign = 1;

    for(count = 1; (n <= 10); count += 2)
    {
       *res  +=  sign * ( pow(num, count) / factorial(count) );
        n    +=  1;
        sign *= -1;
    }
}

double factorial(int num)
{
    int    count;
    double sum = 1;

    for(count = 1; count <= num; count++)
    {
        sum *= count;
    }
    return(sum);
}

Output 1:
Enter value of x is degrees
0
Sin(0) = 0.000000

Output 2:
Enter value of x is degrees
30
Sin(30) = 0.500000

Output 3:
Enter value of x is degrees
45
Sin(45) = 0.707106

Output 4:
Enter value of x is degrees
60
Sin(60) = 0.866025

Output 5:
Enter value of x is degrees
90
Sin(90) = 1.000000

Check above output with the value present in below chart. If you further evaluate the values present in below chart, it matches with the output of our program:

Sine series values

Compound Assignment Operator

We are using compound assignment operator in this program.

 sum   *=  count;
 count +=  2
*res   +=  sign * ( pow(num, count) / factorial(count) );
 n     +=  1;
 sign  *= -1;

which is equal to writing:

 sum   =  sum * count;
 count =  count + 2;
*res   = *res + sign * ( pow(num, count) / factorial(count) );
 n     =  n + 1;
 sign  =  sign * -1;

Usually many advanced developers use such shorthand notations while writing the programs. So we need to at least understand their code while going through it on their git repository or a simple source file.

Compound Assignment Operators in C

Logic To Evaluate sin(x) = x – (x^3)/3! + (x^5)/5! + (x^7)/7! + ..

User enters value of x in degrees. We convert it to radian value using the formula:

radian = x * (3.14159 / 180.0);

C Program To Convert Degree To Radian

We pass the value of radian and address of another floating point variable result to a function calc();

Inside calc() function
Inside calc() function we iterate the for loop 10 times, as we need to find 10 terms in the series(according to the problem statement). We initialize the value of count(loop counter variable) to 1. For each iteration of for loop we increment the value of count by 2. For 10 iterations count value changes as follows: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19.

Inside for loop we calculate each series one by one:
*res += sign * ( pow(num, count) / factorial(count) );
sign *= -1;

We initialize the value of variable sign to 1. And then we alternate the sign from positive to negative, and negative to positive for each iteration.

We are making use of pow() builtin method to find num to the power of count. pow() is present in math.h library file, so we include it in the header of our program.

Calculate Power of a Number using pow(): C Program

We also call a method called factorial() to find factorial of the value present in variable count.

Inside factorial() function
Inside factorial() function we calculate the factorial of the passed number.

Factorial of a number is the product of all the numbers preceding it. For example, Factorial of 6 is 720 (1 x 2 x 3 x 4 x 5 x 6 = 720). Denoted by 6! = 720;

C Program To Find Factorial of a Number using Function

In general, n objects can be arranged in n(n – 1)(n – 2) … (3)(2)(1) ways. This product is represented by the symbol n!, which is called n factorial. By convention, 0! = 1.

Very Important Note

In factorial() function, variable sum has a return type of double. That is because int(integer) type variable can only hold up to 4 bytes of data. Where as double type variable can hold up to 8 bytes. Ofcourse these memory allocations are machine dependent, however on any machine double type variable holds more bytes than int type. So we prefer using double here as we’ll be calculating factorial for bigger numbers i.e., from 1 to 19. Since we’ll be returning value of sum from the factorial() function, we need to have a return type of double for the factorial() function too.

1.  1!  = 1.000000
2.  3!  = 6.000000
3.  5!  = 120.000000
4.  7!  = 5040.000000
5.  9!  = 362880.000000
6.  11! = 39916800.000000
7.  13! = 6227020800.000000
8.  15! = 1307674368000.000000
9.  17! = 355687428096000.000000
10. 19! = 121645100408832000.000000

Using sizeof() operator we can know the memory allocation for each data type: Sizeof Operator in C Programming Language.

Also note that the format specifier for double data type is %lf.

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 Shift Variable Values Circularly To Right

Given three variables x, y, z write a function to circularly shift their values to right. In other words if x = 5, y = 8, z = 10, after circular shift y = 5, z = 8, x = 10. Call the function with variables a, b, c to circularly shift values.

Analyze The Above Problem Statement

1. We need to write a function which receives 3 numbers.
2. Inside the function we need to swap the values of 3 variables circularly to the right.

i.e., value of x to y, value of y to z, and value of z to a.

Related Read:
Basics of Pointers In C Programming Language
Swap 2 Numbers Using a Temporary Variable: C

Very Important Note:

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

Video Tutorial: C Program To Shift Variable Values Circularly To Right


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

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


Source Code: C Program To Shift Variable Values Circularly To Right

#include<stdio.h>

void shift_right(int*, int*, int*);

int main()
{
    int x, y, z;

    printf("Enter 3 numbers\n");
    scanf("%d%d%d", &x, &y, &z);

    printf("Before shifting right: x = %d, y = %d and z = %d\n", x, y, z);

    shift_right(&x, &y, &z);

    printf("After shifting right: x = %d, y = %d and z = %d\n", x, y, z);

    return 0;
}

void shift_right(int *a, int *b, int *c)
{
    int temp;

    temp = *c;
    *c   = *b;
    *b   = *a;
    *a   = temp;
}

Output 1:
Enter 3 numbers
5
8
10
Before shifting right: x = 5, y = 8 and z = 10
After shifting right: x = 10, y = 5 and z = 8

Output 2:
Enter 3 numbers
2
3
1
Before shifting right: x = 2, y = 3 and z = 1
After shifting right: x = 1, y = 2 and z = 3

Logic To Shift Variable Values Circularly To Right

We ask the user to enter 3 numbers and store it inside the address of variables x, y and z. Now we pass these 3 address to the function shift_right();

Inside shift_right() function
Inside shift_right() function we shift the value present at *c to a temp variable. Then, we shift the value of *b to *c, then the value of *a to *b, and then we shift the value present in temp to *a. This shifts the values of variables x, y and z circularly to the right.

*a has the value present at the address &x;
*b has the value present at the address &y;
*c has the value present at the address &z;


int temp;

temp = *c;
*c = *b;
*b = *a;
*a = temp;

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 Average and Percentage of Marks Obtained

Write a function that receives marks received by a student in 3 subjects and returns the average and percentage of these marks. Call this function from main() and print the results in main().

Analyze The Above Problem Statement

1. We need to write a user defined function.
2. Our function will be passed with 3 floating point numbers.
3. Since the problem statement is asking us to return more than 1 value, we need to make use of pointer concept.
4. We will not be using arrays in this program since the number of inputs is fixed to 3. We can take 3 variables to store the values entered/input by the user. i.e., marks obtained by the student in 3 subjects.

Related Read:
Basics of Pointers In C Programming Language

Very Important Note:

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

Video Tutorial: C Program To Calculate Average and Percentage of Marks Obtained using Pointer


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

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


Source Code: C Program To Calculate Average and Percentage of Marks Obtained

#include<stdio.h>

void percentage(float, float, float, int*,
                float*, float*, float*);

int main()
{
    float a, b, c, total = 0, avg = 0, percent = 0;
    int max;

    printf("Enter marks obtained in 3 subjects\n");
    scanf("%f%f%f", &a, &b, &c);

    printf("What's the total marks(of 3 subjects combined) 
            to which the exam was conducted\n");
    scanf("%d", &max);

    percentage(a, b, c, &max, &total, &avg, &percent);

    printf("\nTotal Marks Obtained = %0.2f\n", total);
    printf("Average = %0.2f\n", avg);
    printf("Percentage = %0.2f\n", percent);

    return 0;
}

void percentage(float x, float y, float z, int *max,
                float *tot, float *avg, float *per)
{
    *tot = x + y + z;
    *avg = *tot / 3.0;

    *per = *tot * 100.0 / (float)*max;
}

Output 1:
Enter marks obtained in 3 subjects
42
41
32
What’s the total marks(of 3 subjects combined) to which the exam was conducted
150

Total Marks Obtained = 115.00
Average = 38.33
Percentage = 76.67

Output 2:
Enter marks obtained in 3 subjects
123
145
140
What’s the total marks(of 3 subjects combined) to which the exam was conducted
450

Total Marks Obtained = 408.00
Average = 136.00
Percentage = 90.67

Output 3:
Enter marks obtained in 3 subjects
92
85
96
What’s the total marks(of 3 subjects combined) to which the exam was conducted
300

Total Marks Obtained = 273.00
Average = 91.00
Percentage = 91.00

Logic To Calculate Average and Percentage of Marks Obtained

We ask the user to input marks obtained by the student for 3 subjects. And then we also ask the user to input the maximum marks(for 3 subjects combined) for which the exam was conducted, and we store it in variable max.

We pass the values of a, b and c, and the address of max, total, avg and precent to percentage() function.

Inside percentage() Function
Inside percentage() function we calculate the Total marks obtained, average marks and percentage for the 3 subjects of the student and store it back as values at the address passed.

We make use of following formulas:
Total = a + b + c;
Average = Total / 3.0;

we are dividing Total by 3.0 because we have 3 subjects. It represents the number of subjects for which we’re calculating the Average.

percentage = Total x 100.0 / Max;

Here Max is the maximum marks(for all the subjects combined) for which the exam was conducted.

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