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

Lets write a C program to calculate Sum and Average of N numbers using Arrays and using macros and for loop.

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

Formula To Calculate Sum and Average

int a[5] = {2, 4, 6, 5, 9};

sum = 2 + 4 + 6 + 5 + 9;
average = sum / 5.0;

Result
sum = 26;
average = 5.2;

Important Note:
Look at the formula for calculating average. If you divide any number by integer number, it’ll only return integer value and discard the digits after decimal point. So make sure to divide the number by floating point value. To convert integer to float, make use of typecasting syntax.

Typecasting

int N = 5;

sum = 2 + 4 + 6 + 5 + 9;
average = sum / (float)N;

Since N is integer type variable, dividing any number by N would give us integer data. For some input it’ll result in wrong result. To fix it, we make use of typecasting and cast the type of N to float using above syntax.

Example: Expected Output

Enter 5 integer numbers
5
2
6
4
3

Sum of 5 numbers: 20

Average of 5 numbers: 4.000000

array with size 5

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


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

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

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

Method 1

#include<stdio.h>

#define N 5

int main()
{
    int a[N], i, sum = 0;
    float avg;

    printf("Enter %d integer numbers\n", N);
    for(i = 0; i < N; i++)
        scanf("%d", &a[i]);

    for(i = 0; i < N; i++)
    {
        sum = sum + a[i];
    }

    avg = sum / (float)N;

    printf("\nSum of %d numbers: %d\n", N, sum);
    printf("\nAverage of %d numbers: %f\n", N, avg);

    return 0;
}

Output 1:
Enter 5 integer numbers
2
5
6
8
10

Sum of 5 numbers: 31

Average of 5 numbers: 6.200000

Output 2:
Enter 5 integer numbers
1
2
3
4
5

Sum of 5 numbers: 15

Average of 5 numbers: 3.000000

Logic To Calculate Sum and Average of Array Elements

We ask the user to input N integer numbers. N is a macro and we’ve assigned 5 to it. Integer numbers input by the user is stored inside array variable a[N]. N being the size of the array.

SUM
We use for loop and iterate N times to fetch all the array elements. Variable i is assign a initial value of 0 and for loop iterates until i < N. Inside for loop we add the value of individual array element(a[i]) to previous value of variable sum. Once i < N condition is false, control exits for loop.

AVERAGE
Outside for loop we calculate average by using the formula:
average = sum / (float)N;

Once sum and average are calculated we output the result on to the console window.

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

Method 2: Improved Source Code

#include<stdio.h>

#define N 5

int main()
{
    int a[N], i, sum = 0;
    float avg;

    printf("Enter %d integer numbers\n", N);
    for(i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
        sum = sum + a[i];
    }

    avg = sum / (float)N;

    printf("\nSum of %d numbers: %d\n", N, sum);
    printf("\nAverage of %d numbers: %f\n", N, avg);

    return 0;
}

You could even calculate sum inside the for loop which is used to accept input from the user. Whenever user inputs a number it is immediately added to the previous value of variable sum.

Advantages of using above source code
We don’t iterate through the array to fetch individual elements of the array and then add it to calculate sum. We calculate sum inside first for loop itself which is used to accept input by user. This method is faster and cheaper on resource usage.

Important Notes:

1. Make use of macros to assign size of array.
2. Make sure to declare variable avg(to calculate average) as float or double.
3. Make sure to divide variable sum by floating point or double type value and not by integer. In order to convert a integer variable or macro, make use of typecasting.

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 Count Each Digit In A Number using Arrays

Lets write a C program to count repetition of each digit in a positive integer number using array.

Related Read:
C Program To Check Repetition of Digit In A Number using Arrays

Example: Expected Output

Enter a positive number
11201

0 has appeared 1 times.
1 has appeared 3 times.
2 has appeared 1 times.

Digit Count Using Array

Video Tutorial: C Program To Count Each Digit In A Number using Arrays


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

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

Source Code: C Program To Count Each Digit In A Number using Arrays

Method 1

#include<stdio.h>

int main()
{
    int a[10] = {0}, num, rem, i;

    printf("Enter a positive number\n");
    scanf("%d", &num);

    while(num)
    {
        rem = num % 10;
        a[rem] = a[rem] + 1;
        num = num / 10;
    }

    printf("\n");

    for(i = 0; i < 10; i++)
    {
        if(a[i] != 0)
            printf("%d has appeared %d times.\n", i, a[i]);
    }

    return 0;
}

Output 1:
Enter a positive number
1105135

0 has appeared 1 times.
1 has appeared 3 times.
3 has appeared 1 times.
5 has appeared 2 times.

Output 2:
Enter a positive number
12345

1 has appeared 1 times.
2 has appeared 1 times.
3 has appeared 1 times.
4 has appeared 1 times.
5 has appeared 1 times.

Logic To Count Each Digit In A Number

We ask the user to enter a positive integer number. We then fetch individual digits from the number using while loop.

Important Note:
1. Initially all the array elements are initialized to zero.
2. We take array size as 10. Because we need to accommodate 10 digits i.e., 0 to 9. Using digits 0 to 9 we could formulate any positive integer number.

Array with zeros initialized

Inside While loop
While loop keeps executing until num is 0. Once num is 0, control exits while loop. First we fetch the last digit of the user input number by modulo dividing it by 10, and store it inside variable rem. Next we use this rem value as index of array variable a. i.e., a[rem] and add 1 to the previous value of a[rem]. Next we reduce the user input number by 1 digit from the end by dividing the number by 10. i.e., num = num / 10. This line of code shifts the decimal point from right to left by 1 place. But since num is integer variable and 10 is also integer(by which we divide user input number), we only get the integer part of the number and the number after decimal point gets discarded.

Printing / Displaying The Result or The Count
We iterate through the entire array and display the non-zero values along with the index number. Index number is nothing but the individual digits of the user input number.

Explanation With Example

If num = 112021;
So individual digits are 1, 1, 2, 0, 2, 1

    while(num)
    {
        rem = num % 10;
        a[rem] = a[rem] + 1;
        num = num / 10;
    }
num = num / 10rem = num % 10a[rem] = a[rem] + 1
1120211a[1] = 1
112022a[2] = 1
11200a[0] = 1
1122a[2] = 2
111a[1] = 2
11a[1] = 3
0

When the control exits while loop (once num is 0), a[0] has value 1, a[1] has value 3, a[2] has value 2. That simply means, digit 0 has appeared 1 time in the user input number. Digit 1 has appeared 3 times in the user input number. Digit 2 has appeared 2 times in the user input number.

Source Code: C Program To Count Each Digit In A Number using Arrays

Another method: Method 2

#include<stdio.h>

int main()
{
    int a[10] = {0}, num, rem, temp;

    printf("Enter a positive number\n");
    scanf("%d", &num);

    temp = num;

    while(num)
    {
        rem = num % 10;
        a[rem] = a[rem] + 1;
        num = num / 10;
    }

    printf("\n");

    while(temp)
    {
        rem = temp % 10;

        if(a[rem] != 0)
            printf("%d appeared %d time.\n", rem, a[rem]);

        a[rem] = 0;
        temp = temp / 10;
    }

    return 0;
}

Output 1:
Enter a positive number
11253001

0 has appeared 2 times.
1 has appeared 3 times.
2 has appeared 1 times.
3 has appeared 1 times.
5 has appeared 1 times.

Output 2:
Enter a positive number
112021

0 has appeared 1 times.
1 has appeared 3 times.
2 has appeared 2 times.

Logic To Count Each Digit In A Number: Method 2

Here the program is same except the displaying part logic.

    while(temp)
    {
        rem = temp % 10;

        if(a[rem] != 0)
            printf("%d appeared %d time.\n", rem, a[rem]);

        a[rem] = 0;
        temp = temp / 10;
    }

variable temp has user input number. Here we fetch individual digit of the user input number, and if it is non-zero, then we print whatever value is present at that index. Once we print the value, we over-write the value at that index by 0. Next we reduce the number by one digit from left/end by dividing the number by 10.

This way we only iterate through the while loop by limited number of times. i.e., The number of iteration is equal to the number of unique digits the user input number has.

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 Check Repetition of Digit In A Number using Arrays

Lets write a C program to check if any digit in a user input number appears more than once.

Note: Any positive integer number can be formed using only 0-9 digits. So we take an array with length 10. i.e., 0 to 9

array of size 10

Video Tutorial: C Program To Check Repetition of Digit In A Number using Arrays


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

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

Source Code: C Program To Check Repetition of Digit In A Number using Arrays

#include<stdio.h>

int main()
{
    int a[10] = {0}, num, rem;

    printf("Enter a positive number\n");
    scanf("%d", &num);

    while(num)
    {
        rem = num % 10;

        if(a[rem] == 1)
            break;
        else
            a[rem] = 1;

        num = num / 10;
    }

    if(num)
        printf("There are repetition of digits in the number\n");
    else
        printf("There are no repetition of digits in the number\n");

    return 0;
}

Output 1:
Enter a positive number
123
There are no repetition of digits in the number

array of size 10

Output 2:
Enter a positive number
156
There are no repetition of digits in the number

array of size 10

Output 3:
Enter a positive number
1232
There are repetition of digits in the number

Logic To Check if any digit in user input number repeats or not

1. Since there are 10 digits i.e., 0 to 9 to form any number, we take array size as 10. We initialize all the elements of array to 0.

Related Read:
Basics of Arrays: C Program

2. We ask the user to input a positive number.

3. We iterate through the while loop until num is zero.

Related Read:
while loop in C programming

4. By modulo dividing user input number by 10, we fetch individual digits of number. We make use of this individual digit as index of the array. We over-write the initial value(which is zero) and assign 1 at that index position.

So presence of value 1 at an index specifies that the digit already exists in the number.

Related Read:
Modulus or Modulo Division In C Programming Language

5. So based on the presence of value 1 or 0 at particular index, our program decides if the digit is present more than once in a number or not.

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

Designated Initializers In Array: C Program

In this video tutorial lets learn about Designated Initializers in arrays.

C99 introduced the concept of designated initializers. These allow you to specify which elements of an array, structure or union are to be initialized by the values following.

We’ll look at using Designated Initializers for structures and unions in separate video tutorial, for now lets see how we can use it for arrays in C programming language.

Related Read:
Basics of Arrays: C Program

Where should we use Designated Initializers?

When you have a very large array and most of the elements of array are zeros and only couple of elements are non-zeros. In that case, you can use designators to initialize particular elements of an array to non-zero values.

Video Tutorial: Designated Initializers In Array: C Program


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

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

Source Code: Designated Initializers In Array: C Program

1. Display array Elements

#include<stdio.h>

int main()
{
    int a[5] = {0, 0, 1, 0, 8}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

We use simple for loop to loop through all the elements of an array and display it on to the console window.

2. Garbage values inside uninitialized array

#include<stdio.h>

int main()
{
    int a[5], i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
6356864
4200750
4200656
46
8

If array elements are not initialized it’ll have garbage values. Even if you initialize one element in that array, the rest of the elements will be automatically initialized to zero. And even if you simply have a equal sign and opening and closing curly braces in front of array variable, the compiler will assign zero to all the elements.

3. All zeros as array element

#include<stdio.h>

int main()
{
    int a[5] = {}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
0
0
0

Since we’ve opening and closing flower bracket or curly brackets in front of array declaration, compiler will automatically assign zeros as array elements.

4. Overwrite the values of array element

#include<stdio.h>

int main()
{
    int a[5], i;

    a[2] = 1;
    a[4] = 8;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
6356864
4200766
1
46
8

From source code 2 above, we know that uninitialized arrays will have garbage values inside it. We are over-writing the garbage values at index 2 and index 4 with 1 and 8 respectively. So except for index 2 and 4 all other spots are filled with garbage values.

5. Overwrite the zeros in array

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8}
    int a[5] = {}, i;

    a[2] = 1;
    a[4] = 8;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

So this fixes our issue. Since we’ve empty opening and closing curly braces after declaring array variable, all the elements of array will be automatically initialized to 0.

After that we overwrite the values at index 2 and 4 with 1 and 8.

Now lets make use of Designated Initializers

For arrays with large size we need to use Designated Initializers. Because we can’t individually assign values by overwriting it. It’ll take lot of space in your source code. To avoid that, and to write it in single line of code, we make use of Designated Initializers.

6. Designated Initializers in array

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8}
    int a[5] = {[2] = 1, [4] = 8}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

Here we initialized values of index 2 and 4 to 1 and 8 respectively in a single line of code. Here [2] and [4] are called Designators.

7. Designated Initializers: order of index appearance doesn’t matter

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8}
    int a[5] = {[4] = 8, [2] = 1}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

As you can see the designator [4] appears before the designator [2], but still it doesn’t change anything with the output.

8. Designated Initializers: Alternate Syntax

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8}
    int a[5] = {[2]1, [4]8}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

As you can see in above source code, we are not using equal sign(=) to assign value to designators. And it’s valid syntax.

9. Designated Initializers: Mixed Syntax

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8}
    int a[5] = {[2]1, [4] = 8}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8

You can see that we’ve used both syntax to initialize value to particular index of the array. i.e., [2]1 and [4] = 8. Even if we mix both these syntax, it works and its perfectly valid syntax in C standard.

10. Designated Initializers: And dynamic array size

#include<stdio.h>

int main()
{
    // {0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 5}
    int a[] = {[2]1, [4] = 8, [10] = 5}, i;

    for(i = 0; i < 11; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
0
1
0
8
0
0
0
0
0
5

If we don’t mention length or size of the array explicitly, then the compiler will assign the length or size of the array from the largest designator in the list.

Note: Since the largest designator is 10 in above source code, which must be N – 1 i.e, 11 – 1 = 10. So array size is 11. OR since index starts from 0, and the largest designator is 10. i.e., 0 to 10, which means 11 elements in an array.

11. Designated Initializers: Designators and normal initializers

#include<stdio.h>

int main()
{
    // {4, 6, 1, 0, 8}
    int a[5] = {4, 6, [2]1, [4] = 8}, i;

    for(i = 0; i < 5; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
4
6
1
0
8

Here we’ve intialized index 0 to 1, index 1 to 6, and then we’re using designators to initialize index 2 to value 1 and index 4 to value 8.

12. Designated Initializers: initialize range of elements in an array

#include<stdio.h>


int main()
{
    // {0, 2, 2, 2, 3, 3, 3, 0, 0, 0}
    int a[10] = {[1 ... 3] = 2, [4 ... 6] = 3}, i;

    for(i = 0; i < 10; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
2
2
2
3
3
3
0
0
0

Here we make use of designators to initialize range of elements. Syntax is [first … last] = value. i.e., the first index to start initializing and the last index to end the initialization. In between these two indexes there are 3 dots.

13. Designated Initializers: initialize range of elements in an array, with mixed syntax

#include<stdio.h>

int main()
{
    // { 0, 2, 2, 2, 3, 3, 3, 5, 0, 0}
    int a[10] = {[1 ... 3] = 2, [4 ... 6]3, 5}, i;

    for(i = 0; i < 10; i++)
        printf("%d\n", a[i]);

    return 0;
}

Output:
0
2
2
2
3
3
3
5
0
0

In above source code you can see mixed syntax to initialize elements of the array. i.e., [1 … 3] = 2 is valid, [4 … 6]3 is valid too, and index 7 is assigned a value of 5 directly. All other indexes will have a value of zero.

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 Print Elements of Array In Reverse Order

Lets write a c program to print or display the elements of an array in reverse order.

Related Read:
Basics of Arrays: C Program

Note: This is a very simple program but still a very important one, because we’ll be using some form of logic to print elements of an array. So better we know ins and outs of printing array elements in whichever order the program demands. So please pay attention to the logic.

Video Tutorial: C Program To Print Elements of Array In Reverse Order


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

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

Source Code: C Program To Print Elements of Array In Reverse Order

#include<stdio.h>

int main()
{
    int a[5], i;

    printf("Enter 5 integer numbers\n");
    for(i = 0; i < 5; i++)
        scanf("%d", &a[i]);

    printf("Array elements are:\n");
    for(i = 4; i >= 0; i--)
        printf("%d\n", a[i]);

    return 0;
}

Output:
Enter 5 integer numbers
1
2
3
4
5
Array elements are:
5
4
3
2
1

Since the array size is 5, the last index of the array will be (5-1) which is 4. So we initialize i to 4, and keep decrementing the value of i by 1 for each iteration of the for loop. Control exits for loop once i value is equal to 0. In arrays the index starts from 0. Inside for loop, for each iteration, we print the value of i.

#include<stdio.h>

#define N 5

int main()
{
    int a[N], i;

    printf("Enter %d integer numbers\n", N);
    for(i = 0; i < N; i++)
        scanf("%d", &a[i]);

    printf("Array elements are:\n");
    for(i = N-1; i >= 0; i--)
        printf("%d\n", a[i]);

    return 0;
}

Output:
Enter 5 integer numbers
1
2
3
4
5
Array elements are:
5
4
3
2
1

Here we initialize value of i to the last index of the array, which is N-1. We iterate through the for loop until i value is 0(which is the first index of the array), for each iteration of the for loop we decrement the value of i by 1. Inside for loop we print the value of a[i].

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