Using Macros Find Arithmetic Mean, Absolute Value, Biggest of 3 number and convert upper case alphabet to lower case: C Program

Problem Statement: Write down macro definitions for the following:

1. To find arithmetic mean of two numbers.
2. To find absolute value of a number.
3. To convert an upper case alphabet to lower case.
4. To obtain the biggest of three numbers.

Related Read:
Switch Case Default In C Programming Language
Macros With Arguments: C Program
do-while Loop In C Programming Language

Video Tutorial: Using Macros Find Arithmetic Mean, Absolute Value, Biggest of 3 number and convert upper case alphabet to lower case: C Program


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

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

Source Code: Using Macros Find Arithmetic Mean, Absolute Value, Biggest of 3 number and convert upper case alphabet to lower case: C Program

#include<stdio.h>

#define MEAN(a, b)  ( (a + b) / 2.0 )
#define ABS(num)    ( (num > 0) ? num : (num * -1) )
#define LOWER(ch)   ( ch + 32 )
#define BIGGEST(a, b, c) ( (a > b && a > c) ? a : ( (b > c) ? b : c ) )

int main()
{
    int choice, num, repeat;
    float a, b, c;
    char ch;

    do
    {
        printf("1. Find Arithmetic Mean of 2 numbers\n");
        printf("2. Find Absolute Value of a number\n");
        printf("3. Convert a Uppercase letter to lowercase\n");
        printf("4. Find Biggest of 3 numbers\n");

        printf("\nEnter your choice\n");
        scanf("%d", &choice);

        switch(choice)
        {
            case 1: printf("Enter 2 numbers\n");
                    scanf("%f%f", &a, &b);
                    printf("Arithmetic Mean: %0.2f\n", MEAN(a, b));
                    break;
            case 2: printf("Enter a integer number\n");
                    scanf("%d", &num);
                    printf("Absolute value of |%d| is %d\n", num, ABS(num));
                    break;
            case 3: printf("Enter a uppercase alphabet\n");
                    fflush(stdin);
                    scanf("%c", &ch);

                    if( ch >= 65 && ch <= 90)
                        printf("To Lowercase: %c\n", LOWER(ch));
                    else
                        printf("Enter a valid uppercase alphabet\n");

                    break;
            case 4: printf("Enter 3 numbers\n");
                    scanf("%f%f%f", &a, &b,&c);
                    printf("Biggest no is %0.2f\n", BIGGEST(a, b, c));
                    break;
            default: printf("Please enter valid choice\n");
        }

        printf("\nDo you want to continue? Ans: 0 or 1\n");
        scanf("%d", &repeat);

        printf("\n");

    }while(repeat);

    return 0;
}

Output:
1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
1
Enter 2 numbers
41
14
Arithmetic Mean: 27.50

Do you want to continue? Ans: 0 or 1
1

1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
2
Enter a integer number
5
Absolute value of |5| is 5

Do you want to continue? Ans: 0 or 1
1

1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
2
Enter a integer number
-5
Absolute value of |-5| is 5

Do you want to continue? Ans: 0 or 1
1

1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
3
Enter a uppercase alphabet
S
To Lowercase: s

Do you want to continue? Ans: 0 or 1
1

1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
3
Enter a uppercase alphabet
$
Enter a valid uppercase alphabet

Do you want to continue? Ans: 0 or 1
1

1. Find Arithmetic Mean of 2 numbers
2. Find Absolute Value of a number
3. Convert a Uppercase letter to lowercase
4. Find Biggest of 3 numbers

Enter your choice
4
Enter 3 numbers
20
40
50
Biggest no is 50.00

Do you want to continue? Ans: 0 or 1
0

Formula and Logic

1. Arithmetic mean: If user enters two numbers, then we add those 2 numbers and divide it by 2 to get the result. If user inputs 3 numbers, we first add all these 3 numbers and divide it by 3 to get mean.

In this program, according to problem statement, we need to add 2 numbers and divide it by 2 to get the mean of those 2 user input numbers.

Since we’re taking 2 floating point numbers, we’re dividing the sum of two numbers by 2.0 and not by integer 2. If we divide float or double number with integer number 2, then there is possibility of getting wrong result.

Calculate Sum and Average of N Numbers without using Arrays: C Program

Average and Mean are same in mathematics.

2. Absolute Value: Absolute value is like distance. In whichever direction you move there can only be positive distance. You can’t walk negative 5 kilometre!

So for any integer input by the user, we return it’s positive value by multiplying it by -1, in case user input number is negative.

C Program To Find Absolute Value of a Number

Note: We could have used built-in method abs() from the library file stdlib.h to get absolute value of user input number. But to use a single built-in method abs() we must include all the things present in stdlib.h file, so we better write definition to calculate absolute value ourselves.

3. Convert a Uppercase alphabet to lowercase: We should know the ASCII value of A and Z, as well as ASCII value of a and z to get the result.

C Program To Print All ASCII Characters and Code

ASCII value range of upper case alphabets:
ASCII value of A is 65.
ASCII value of B is 66.
ASCII value of C is 67.

and so on till Z ..

ASCII value of Z is 90.

ASCII value range of lower case alphabets:
ASCII value of a is 97.
ASCII value of b is 98.
ASCII value of c is 99.

and so on till z ..

ASCII value of z is 122.

If you observe the ASCII values properly, you’ll know that there is a difference of 32 between a and A in it’s ASCII value. So, if user inputs a capital letter, then we simply add 32 to it and display the character – which will be its corresponding lowercase alphabet.

Note: Since we might start to input information from the keyboard repeatedly inside do-while block, scanf() method keeps checking the input buffer. And often times it gets confused with the input buffer and thinks that the user has pressed the enter key. To avoid that we flush out the previous buffer present in input device(ex: keyboard) using function fflush(). fflush takes stdin as argument, so that it can clear the buffer of standard input device. fflush(stdin);

4. Biggest of 3 Numbers: Here we make use of nested ternary or conditional operator. If a is greater than b and c, then we return value of a. ORELSE if b is greater than c, then we return the value of b, else we return the value of c.

Biggest of 3 Numbers Using Ternary Operator: C

Note: We can continue writing macro expansion in next line by making use of macro continuation operator(\). You can see that we’ve broken the line and written the code in next line inside macro expansion of BIGGEST(a, b, c).

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

Using Macros Check For Uppercase / Lowercase and Alphabet or Not and Biggest of 2 Numbers: C Program

Problem State: Write down macro definitions for the following:
1. To test whether a character is a small case letter or not.
2. To test whether a character is an upper case letter or not.
3. To test whether a character is an alphabet or not. Make use of the macros you defined in 1 and 2 above.
4. To obtain the bigger of two numbers.

Related Read:
Switch Case Default In C Programming Language
Macros With Arguments: C Program
Biggest of Two Numbers Using Ternary Operator: C
C Program To Print Uppercase Alphabet(A-Z) using While loop
C Program To Print Lowercase Alphabet(a-z) using While loop
C Program To Check Whether a Character is an Alphabet or Not

Problem Statement Analysis

1. We need to write 4 Macro definitions.
2. We must write macros to find upper and lower case, and then make use of these two macros to find if user entered character is alphabet or not.
3. We can find biggest of 2 numbers by using Ternary / conditional operator in macro expansion.

Video Tutorial: Using Macros Check For Uppercase / Lowercase and Alphabet or Not and Biggest of 2 Numbers: C Program


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

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

Source Code: Using Macros Check For Uppercase / Lowercase and Alphabet or Not and Biggest of 2 Numbers: C Program

#include<stdio.h>

#define isUPPER(ch) ( ch >= 'A' && ch <= 'Z' )
#define isLOWER(ch) ( ch >= 'a' && ch <= 'z' )
#define isALPHABET(ch) ( isUPPER(ch) || isLOWER(ch) )
#define BIGGEST(a, b) ( ( a > b ) ? \
                       printf("%d is the biggest\n", a) : \
                       printf("%d is the biggest\n", b) )

int main()
{
    int a, b, repeat;
    char ch, choice;

    do
    {
        printf("1. Check if entered character is upper or lower case\n");
        printf("2. Check if entered character is alphabet or not\n");
        printf("3. Find biggest of 2 numbers\n");

        printf("\nEnter your choice\n");
        scanf(" %c", &choice);

        switch(choice)
        {
            case '1': printf("\nEnter a character\n");
                      scanf(" %c", &ch);

                      if( isUPPER(ch) )
                      {
                          printf("Entered character is upper case letter\n");
                      }
                      else if( isLOWER(ch) )
                      {
                          printf("Entered character is lower case letter\n");
                      }
                      else
                      {
                          printf("Please enter a valid alphabet\n");
                      }

                      break;
            case '2': printf("\nEnter a character\n");
                      scanf(" %c", &ch);

                      if( isALPHABET(ch) )
                      {
                          printf("Entered character is an alphabet\n");
                      }
                      else
                      {
                          printf("Entered character is not an alphabet\n");
                      }
                      break;
            case '3': printf("\nEnter 2 numbers\n");
                      scanf("%d%d", &a, &b);

                      BIGGEST(a, b);

                      break;
            default:  printf("\nPlease enter valid choice\n");
        }

        printf("\n\nDo you want to continue? Ans: 0 or 1\n");
        scanf("%d", &repeat);

        printf("\n");
        fflush(stdin);

    }while(repeat);

    return 0;
}

Output:
1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
1

Enter a character
S
Entered character is upper case letter

Do you want to continue? Ans: 0 or 1
1

1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
1

Enter a character
s
Entered character is lower case letter

Do you want to continue? Ans: 0 or 1
1

1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
1

Enter a character
$
Please enter a valid alphabet

Do you want to continue? Ans: 0 or 1
1

1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
2

Enter a character
A
Entered character is an alphabet

Do you want to continue? Ans: 0 or 1
1

1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
2

Enter a character
&
Entered character is not an alphabet

Do you want to continue? Ans: 0 or 1
1

1. Check if entered character is upper or lower case
2. Check if entered character is alphabet or not
3. Find biggest of 2 numbers

Enter your choice
3

Enter 2 numbers
14
50
50 is the biggest

Do you want to continue? Ans: 0 or 1
0

Here we are using do-while loop to repeatedly show the user choices: If user enters 1, the choices are shown once again. If the user enters 0, then control exits the do-while loop.

Choice 1: Upper or Lower Case Alphabet

All the characters have ASCII value associated with it in C programming. So internally it checks the ASCII value of user entered character against the ASCII values of “A” to “Z”.

ASCII value range of upper case alphabets:
ASCII value of A is 65.
ASCII value of B is 66.
ASCII value of C is 67.

and so on till Z ..

ASCII value of Z is 90.

So all the ASCII values between 65 and 90 (including 65 and 90) are Capital letter alphabets.

Similarly, below we’ve listed the ASCII values of lower case alphabets.

ASCII value range of lower case alphabets:
ASCII value of a is 97.
ASCII value of b is 98.
ASCII value of c is 99.

and so on till z ..

ASCII value of z is 122.

So all the ASCII values between 97 and 122 (including 97 and 122) are Lower case letter alphabets.

Related Read:
C Program To Print Uppercase Alphabet(A-Z) using While loop
C Program To Print Lowercase Alphabet(a-z) using While loop

Choice 2: Alphabet or Not

According to our problem statement we need to use the macros we defined for “Choice 1” to evaluate if the user entered character is alphabet or not. So if the user entered character is upper or lower case latter than its alphabet or else its not an alphabet.

Related Read:
C Program To Check Whether a Character is an Alphabet or Not

Choice 3: Biggest of Two Numbers

Inside macro expansion we make use of ternary / conditional operator to find biggest of 2 numbers.

Related Read:
Biggest of Two Numbers Using Ternary Operator: C

Bug in accepting character as input

When you input some data via console window and hit enter key, the enter key or the new line character gets stored inside input buffer. If you’re accepting a single character from keyboard via scanf() function, often times it gets confused with the input buffer and thinks that the user has pressed the enter key as the input character. We can avoid it in 3 ways:

1. Use double scanf() function, as illustrated in above video tutorial.
2. Use a space before %c inside scanf() method.
3. Use fflush(stdin) before every scanf() method which accepts a single character value.

Note: Since we might start to input information from the keyboard repeatedly inside do-while block, scanf() method keeps checking the input buffer. And often times it gets confused with the input buffer and thinks that the user has pressed the enter key. To avoid that we flush out the previous buffer present in input device(ex: keyboard) using function fflush(). fflush takes stdin as argument, so that it can clear the buffer of standard input device. fflush(stdin);

#include<stdio.h>

#define isUPPER(ch) ( ch >= 'A' && ch <= 'Z' )
#define isLOWER(ch) ( ch >= 'a' && ch <= 'z' )
#define isALPHABET(ch) ( isUPPER(ch) || isLOWER(ch) )
#define BIGGEST(a, b) ( ( a > b ) ? \
                       printf("%d is the biggest\n", a) : \
                       printf("%d is the biggest\n", b) )

int main()
{
    int a, b, repeat;
    char ch, choice;

    do
    {
        printf("1. Check if entered character is upper or lower case\n");
        printf("2. Check if entered character is alphabet or not\n");
        printf("3. Find biggest of 2 numbers\n");

        printf("\nEnter your choice\n");
        scanf("%c", &choice);

        switch(choice)
        {
            case '1': printf("\nEnter a character\n");
                      fflush(stdin);
                      scanf("%c", &ch);

                      if( isUPPER(ch) )
                      {
                          printf("Entered character is upper case letter\n");
                      }
                      else if( isLOWER(ch) )
                      {
                          printf("Entered character is lower case letter\n");
                      }
                      else
                      {
                          printf("Please enter a valid alphabet\n");
                      }

                      break;
            case '2': printf("\nEnter a character\n");
                      fflush(stdin);
                      scanf("%c", &ch);

                      if( isALPHABET(ch) )
                      {
                          printf("Entered character is an alphabet\n");
                      }
                      else
                      {
                          printf("Entered character is not an alphabet\n");
                      }
                      break;
            case '3': printf("\nEnter 2 numbers\n");
                      scanf("%d%d", &a, &b);

                      BIGGEST(a, b);

                      break;
            default:  printf("\nPlease enter valid choice\n");
        }

        printf("\n\nDo you want to continue? Ans: 0 or 1\n");
        scanf("%d", &repeat);

        printf("\n");
        fflush(stdin);

    }while(repeat);

    return 0;
}

In above source code we’re making use of fflush(stdin) before every scanf() method which accepts single character. fflush(stdin) flushes out the previous buffer present in input device(ex: Keyboard).

Note: We can continue writing macro expansion in next line by making use of macro continuation operator(\). You can see that we’ve broken the line and written the code in next line inside macro expansion to find biggest of 2 numbers.

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

do-while Loop In C Programming Language

In this video tutorial lets learn about the general syntax and working of do-while loop in C programming language.

Related Read:
while loop in C programming
For Loop In C Programming Language
Using Scanf in C Program

Video Tutorial: do-while Loop In C Programming Language


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

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

Source Code: do-while Loop In C Programming Language

#include<stdio.h>

int main()
{
    int count = 1;

    do
    {
        printf("Apple\n");
        printf("IBM\n");

    }while(count > 5);

    return 0;
}

Output
Apple
IBM

Note: Even though the while condition is false, the code inside do block gets executed atleast once.

Source Code: do-while Loop In C Programming Language

#include<stdio.h>

int main()
{
    char ch;

    do
    {
        printf("Apple\n");
        printf("IBM\n");

        printf("Do you want to continue?(y/n)");
        scanf("%c", &ch);

        fflush(stdin);

    }while(ch == 'y');

    return 0;
}

Output
Apple
IBM
Do you want to continue?(y/n)y
Apple
IBM
Do you want to continue?(y/n)y
Apple
IBM
Do you want to continue?(y/n)y
Apple
IBM
Do you want to continue?(y/n)y
Apple
IBM
Do you want to continue?(y/n)n

Working of do-while Loop

Unlike in while and for loop, in do-while loop the statements inside do block gets executed atleast once. After executing the statements present in do block atleast once, the condition present in while is checked. If while condition is true, then the block of code in do{} gets executed once again. If condition in while is false then the control exists do-while loop.

Note: Since we might start to input information from the keyboard repeatedly inside do-while block, scanf() method keeps checking the input buffer. And often times it gets confused with the input buffer and thinks that the user has pressed the enter key. To avoid that we flush out the previous buffer present in input device(ex: keyboard) using function fflush(). fflush takes stdin as argument, so that it can clear the buffer of standard input device. fflush(stdin);

Source Code: Infinite Looping in do-while Loop – In C Programming Language

#include<stdio.h>

int main()
{
    do
    {
        printf("Apple\n");
        printf("IBM\n");

    }while(1);

    return 0;
}

Output
do-while loop gets into infinite loop as the condition in while is non-zero number, which means the condition is always true.

Apple
IBM

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