Chapter - 5 Nested loops in C, Computer Science, Class 10 ten , ASSEB ( SEBA ), Prepared by Podmeswar through AI

 Warning Disclaimer Notice:

The below answers and discussions are directly prepared by copy-paste from www.google.com, Googole AI Overview,  https://gemini.google.com/app , https://chatgpt.com/,etc,

These are only for understanding to improve the concept only; not for answers. We have not checked these clearly. Some mistakes may be happened. We are not responsible for any wrong information and answers. Please check yourself, yourselves and discuss with your expert teachers for the final approval or accepted the answers.  


Example 5.1: A C program to display a pattern.

Answer:

#include <stdio.h>

int main()

{

int k, i;

for (k = 1; k <= 5; k++)

{

for ( i = 1; i <= (6-k); i++)

{

printf("X ");

}

printf("\n");

}

return 0;

}

 

MEANING:

The provided C code prints a right-angled triangle pattern of 'X' characters to the console. The output will look like this:

X X X X X

X X X X

X X X

X X

X

Code Explanation:

·         #include <stdio.h>: This line includes the standard input/output library, which provides functions like printf for displaying output.

·         int main() { ... }: This is the main function where the program execution begins.

·         for (k = 1; k <= 5; k++) { ... }: This outer loop controls the number of rows printed. It iterates 5 times (for k=1, 2, 3, 4, 5).

·         for ( i = 1; i <= (6-k); i++) { ... }: This inner loop controls the number of 'X' characters printed in each row.

o    The expression (6-k) determines the number of 'X's.

o    For the first row (k=1), it prints 5 'X's.

o    For the second row (k=2), it prints 4 'X's, and so on.

·         printf("X ");: Prints the character 'X' followed by a space during the inner loop.

·         printf("\n");: After the inner loop finishes (a row is complete), this statement prints a newline character, moving the cursor to the beginning of the next line for the next row.

·         return 0;: Indicates that the program executed successfully. 


 

Example 5.2: A C program to display a dynamic pattern.

Answer:

#include <stdio.h>

int main()

{

int k, i, N;

printf("Please enter number of lines to be displayed: ");

scanf("%d", &N);

for (k = 1; k <= N+1; k++)

{

for ( i = 1; i <= (N+1-k); i++)

{

printf("X ");

}

printf("\n");

}

return 0;

}

Meaning:

This C program is designed to print a right-angled triangle pattern of 'X' characters that decreases in size as it moves downward.

Here is a breakdown of how the logic works and what the output looks like.

Code Logic Breakdown

The program uses nested loops to control the rows and columns of the output:

1.      Outer Loop (k): This loop keeps track of the current row. It starts at 1 and runs until it reaches $N+1$.

2.      Inner Loop (i): This loop determines how many "X " characters to print on the current line.

o    The condition i <= (N + 1 - k) ensures that as $k$ (the row number) increases, the number of 'X's decreases.

3.      New Line (\n): After the inner loop finishes printing characters for a row, this moves the cursor to the next line.


 

 

Example Execution

If you enter 5 when prompted, the program will calculate the rows as follows:

·         Row 1 (k=1): Prints 5 + 1 - 1 = 5 times.

·         Row 2 (k=2): Prints 5 + 1 - 2 = 4 times.

·         ...and so on.

Output for N = 5:

Plaintext

X X X X X

X X X X

X X X

X X

X

 

(Note: Because the outer loop goes up to N+1, the last iteration where k = 6 results in $6-6=0$ characters, effectively ending the pattern.)


Observations & Tips

·         The $N+1$ Logic: Your code actually prints $N$ lines of content. If you enter 5, you get a 5-row triangle. The extra +1 in the loop conditions is what allows the "countdown" effect to reach 1 before stopping.

·         Formatting: The space after the X in printf("X "); makes the output look like a grid. If you remove it, the 'X's will be bunched together.

Would you like me to show you how to modify this code to flip the triangle so it starts small and grows larger?

 


 

Example 5.3: A C program to display a pattern.

Answer:

#include <stdio.h>

int main()

{

int k, i;

// decreasing portion

for (k = 1; k <= 5; k++)

{

for ( i = 1; i <= (6-k); i++)

{

printf("X ");

}

printf("\n");

}

// increasing portion

for (k = 1; k <= 4; k++)

{

for ( i = 1; i <= k+1; i++)

{

printf("X ");

}

printf("\n");

}

return 0;

}

 

Meaning:

This code combines two separate nested loop structures to create a sideways hourglass or a left-aligned "V" shape (pointing right).

By hardcoding the values (using 5, 6, and 4), you have created a fixed-size pattern that first shrinks and then grows.

The Resulting Pattern

When you run this code, it produces the following output:

Plaintext

X X X X X   <-- k=1 (6-1 = 5)

X X X X     <-- k=2 (6-2 = 4)

X X X       <-- k=3 (6-3 = 3)

X X         <-- k=4 (6-4 = 2)

X           <-- k=5 (6-5 = 1)

X X         <-- k=1 (1+1 = 2)

X X X       <-- k=2 (2+1 = 3)

X X X X     <-- k=3 (3+1 = 4)

X X X X X   <-- k=4 (4+1 = 5)


How the Logic Shifts

The code is split into two distinct logical blocks:

1. The Decreasing Portion

·         The outer loop runs 5 times.

·         The inner loop uses the formula $(6 - k)$.

·         As $k$ increases, the number of 'X's decreases from 5 down to 1.

2. The Increasing Portion

·         The outer loop runs 4 times.

·         The inner loop uses the formula $(k + 1)$.

·         It starts at $k=1$, so the first line of this section prints 2 'X' characters (ensuring it doesn't repeat the single 'X' from the previous section). It finishes by printing 5 'X's.

A Quick Tip for Flexibility

If you want to be able to change the size of the entire shape easily, you can use a variable N for the maximum width instead of hardcoded numbers:

C

int N = 5;

// Decreasing

for (k = 0; k < N; k++) {

    for (i = 0; i < (N - k); i++) printf("X ");

    printf("\n");

}

// Increasing (starts from 2 to avoid repeating the single X)

for (k = 2; k <= N; k++) {

    for (i = 0; i < k; i++) printf("X ");

    printf("\n");

}


 

Example 5.4: A C program to display a pattern.

Information:

The pseudo-code for this can be written as follows.

for k = 1 to 5

Display SPACE (5-k) times

Display X, k times

Go to the next line

Example 5.4 shows the complete C program for displaying the pattern. We used the variable

“i” for displaying the space and the variable “j” for displaying the character X. We can see that there is one outer loop in the program and there are two inner loops.

 

Answer:

 

#include <stdio.h>

int main()

{

int i, j, k;

for (k = 1; k<=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j<= k; j++)

{

printf("X");

}

printf("\n");

}

return 0;

}

 

Meaning:

 

This code introduces a third loop variable, i, to handle leading spaces. This shifts the triangle from the left side of the screen to the right side, creating a right-aligned triangle.

How the Logic Works

By printing spaces before the 'X' characters on the same line, you push the 'X's to the right.

1.      Outer Loop (k): Controls the rows (1 to 5).

2.      First Inner Loop (i): Prints spaces. The number of spaces is $(5 - k)$.

o    Row 1: 4 spaces

o    Row 2: 3 spaces... and so on.

3.      Second Inner Loop (j): Prints the 'X' characters. The number of 'X's is equal to the row number $k$.

The Output

Plaintext

    X

   XX

  XXX

 XXXX

XXXXX


Key Difference: Left vs. Right Alignment

The addition of the "space loop" is the standard way to handle alignment in CLI patterns. Here is a quick comparison of the logic:

Alignment

Logic Sequence

Left-Aligned

Print 'X' $\rightarrow$ Print Newline

Right-Aligned

Print Spaces $\rightarrow$ Print 'X' $\rightarrow$ Print Newline

Helpful Tweak: The "Pyramid" Effect

If you want to turn this right-aligned triangle into a centered Pyramid, you only need to make one tiny change. If you add a space after the X in your second inner loop:

C

printf("X "); // Adding a space here

The output would instantly transform into this:

Plaintext

    X

   X X

  X X X

 X X X X

X X X X X

 

 

 

 

 

 

 

 

Example 5.5: A C program to display a pattern.

Some information:

Task 1 and Task 2 are for the left part and Task 3 is for the right part. The pseudo-code for all the tasks can be written as follows.

for k = 1 to 5

Display SPACE (5-k) times.

Display X, k times.

Display X, (k-1) times.

Go to the next line.

 

Now the complete program is shown in Example 5.5. The first inner for loop is responsible for performing Task 1 (line numbers 7 to 10). The second inner for loop is responsible for performing Task 2 (line numbers 11 to 14). The third inner for loop is responsible for performing Task 3 (line numbers 15 to 18).

Answer:

 

#include <stdio.h>

int main()

{

int i, j, k, p;

for (k = 1; k <=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j <= k; j++)

{

printf("X");

}

for(p = 1; p <= (k-1); p++)

{

printf("X");

}

printf("\n");

}

return 0;

}

 

 

 

MEANING:

This code creates a solid pyramid of 'X' characters.

By adding that third inner loop (p), you have moved beyond a simple right-aligned triangle to a symmetrical pyramid. Here is how the logic breaks down:

How the Logic Works

The program builds each row using three distinct steps:

1.       The Space Loop (i): Prints leading spaces to center the pyramid.

2.       The First 'X' Loop (j): Prints the left half of the pyramid (including the center column).

3.       The Second 'X' Loop (p): Prints the right half of the pyramid ($k-1$ characters).

The Output

For $k=1$ to $5$, the output looks like this:

Plaintext

    X        (4 spaces, 1 X from j-loop, 0 X from p-loop)

   XXX       (3 spaces, 2 X from j-loop, 1 X from p-loop)

  XXXXX      (2 spaces, 3 X from j-loop, 2 X from p-loop)

 XXXXXXX     (1 space,  4 X from j-loop, 3 X from p-loop)

XXXXXXXXX    (0 spaces, 5 X from j-loop, 4 X from p-loop)


Key Observations

·         Odd Numbers: Notice that the total number of 'X's in each row follows the sequence of odd numbers: $1, 3, 5, 7, 9$. This is because the total 'X's per row equals $k + (k-1)$, which simplifies to $2k - 1$.

·         Symmetry: Because the p loop always prints one fewer 'X' than the j loop, the j loop provides the "center axis" of the pyramid.

A Cleaner Alternative

You can actually achieve this same result using only two loops instead of three by changing the math in the second loop:

C

for (k = 1; k <= 5; k++) {

    for (i = 1; i <= (5 - k); i++) printf(" ");

   

    // Print (2*k - 1) characters in one go

    for (j = 1; j <= (2 * k - 1); j++) printf("X");

   

    printf("\n");

}

 

Example 5.6: A C program to display a pattern.

Answer:

#include <stdio.h>

int main()

{

int i, j, k, p;

for (k = 1; k <=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j <= (2*k - 1); j++)

{

printf("X");

}

printf("\n");

}

return 0;

}

MEANING:

This version of the code is more efficient! By combining the two "X" loops into a single loop that prints (2*k - 1) characters, you are using the mathematical property of odd numbers to create the pyramid.

How the Math Works

Each row $k$ now calculates the exact number of 'X's needed to stay symmetrical:

·         Row 1 ($k=1$): $2(1) - 1 = 1$ "X"

·         Row 2 ($k=2$): $2(2) - 1 = 3$ "X"

·         Row 3 ($k=3$): $2(3) - 1 = 5$ "X"

·         Row 4 ($k=4$): $2(4) - 1 = 7$ "X"

·         Row 5 ($k=5$): $2(5) - 1 = 9$ "X"


Comparison: Your Previous Code vs. This Code

Both programs produce the exact same visual output, but the logic is slightly different:

Feature

Three-Loop Version

Two-Loop (2k-1) Version

Logic

Builds left half, then right half.

Calculates the full width of the row.

Readability

Easier to see the "mirror" effect.

Mathematically cleaner and more concise.

Performance

Slightly more overhead (extra loop).

Faster (fewer loop initializations).

The Output

Plaintext

    X

   XXX

  XXXXX

 XXXXXXX

XXXXXXXXX


Challenge: The Inverted Pyramid

If you wanted to flip this pyramid upside down, you would just need to change how the outer loop $k$ counts. If you start $k$ at 5 and count down to 1, the math (5-k) for spaces and (2*k-1) for 'X's will automatically reverse the shape.


 

Example 5.7: A C program to display a pattern

Answer:

 

#include <stdio.h>

int main()

{

int i, j, k;

for (k = 1; k <=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j <= (2*k - 1); j++)

{

printf("%d ", j);

}

printf("\n");

}

return 0;

}

Meaning:

This version of the code is an interesting variation! By changing printf("X") to printf("%d ", j), you have created a Number Pyramid where each row counts up from 1 to the maximum width of that row.

The Math & Logic

1.      Leading Spaces: Just like the previous version, (5 - k) spaces are printed to center the numbers.

2.      The Number Loop (j): This loop runs from 1 to (2*k - 1).

3.      The Output Format: Because you added a space after the %d, the pyramid becomes wider and looks more like a spread-out triangle.

The Output

For $k=1$ to $5$, the code produces this:

Plaintext

    1

   1 2 3

  1 2 3 4 5

 1 2 3 4 5 6 7

1 2 3 4 5 6 7 8 9


A Logic "Gotcha" to Watch For

Because you added a space after the number (%d ), the alignment might look a bit shifted compared to your solid "X" pyramid. In the "X" version, one character took one space. Here, the number plus a space takes two spaces.

If you want the pyramid to stay perfectly centered with the space after the number, you would actually need to double the leading spaces in your i loop:

C

for(i = 1; i <= (5 - k) * 2; i++) // Doubling spaces to match the "%d " format

The Palindrome Challenge

A very popular interview variation of this is the Palindrome Pyramid, where the numbers count up and then back down (e.g., 1 2 3 2 1).

To do that, you would split your j loop back into two parts:

1.      A loop that counts up from 1 to k.

2.      A loop that counts down from k-1 to 1.

 

 

 


Exercise :

 

1. Write C programs to display the following patterns using nested loop construct.

(a)

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

 

Answer:

To display this pattern, you need a grid where every row is identical. This is the most fundamental use of a nested loop: the outer loop creates the rows, and the inner loop handles the sequence of numbers within each row.

The Logic

1.      Outer Loop (i): Runs 5 times to create 5 lines of output.

2.      Inner Loop (j): Runs 3 times (from 1 to 3) to print the numbers "1 2 3" on each line.

The C Code

C

#include <stdio.h>

 

int main() {

    int i, j;

 

    // Outer loop for the 5 rows

    for (i = 1; i <= 5; i++) {

        // Inner loop to print 1 2 3 in each row

        for (j = 1; j <= 3; j++) {

            printf("%d ", j);

        }

        // Move to the next line after printing 1 2 3

        printf("\n");

    }

 

    return 0;

}

 

 

The Output

Plaintext

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3


Key Takeaway

In your previous examples, the inner loop often depended on the outer loop (like j <= k). Here, because the inner loop condition j <= 3 is constant, every row looks exactly the same.

Would you like to see how to modify this so the numbers change per row (e.g., Row 1 is 1 1 1, Row 2 is 2 2 2)?

 


1. Write C programs to display the following patterns using nested loop construct.

(b)

1 2 1

1 2 1

1 2 1

1 2 1

1 2 1

Answer:

To display this pattern, we need an outer loop to control the 5 rows and an inner loop that creates the sequence 1 2 1 in each row.

The Logic

Since the pattern "1 2 1" is not a simple incrementing or decrementing line, we can handle it in two ways:

1.      A single loop with a formula: Using an absolute value or a conditional to go up and back down.

2.      Two small inner loops: One to count up to 2, and one to count back down to 1.

The C Code

Here is the most straightforward way to write this using nested loops:

C

#include <stdio.h>

 

int main() {

    int i, j;

 

    // Outer loop for 5 rows

    for (i = 1; i <= 5; i++) {

       

        // Inner loop 1: Count up from 1 to 2

        for (j = 1; j <= 2; j++) {

            printf("%d ", j);

        }

       

        // Inner loop 2: Count down starting from 1

        for (j = 1; j >= 1; j--) {

            printf("%d ", j);

        }

       

        printf("\n");

    }

 

    return 0;

}

The Output

Plaintext

1 2 1

1 2 1

1 2 1

1 2 1

1 2 1


Alternative (One Inner Loop)

If you want to be clever, you can use a single loop from 1 to 3 and a small bit of math to flip the 3 into a 1.

C

for (i = 1; i <= 5; i++) {

    for (j = 1; j <= 3; j++) {

        // If j is 3, print 1 instead

        if (j == 3) printf("1 ");

        else printf("%d ", j);

    }

    printf("\n");

}

Key Differences

·         The Two-Loop version is better if you ever want to expand this to a larger palindrome (like 1 2 3 4 3 2 1).

·         The If-Statement version is slightly more concise for very specific, short patterns.

Would you like to see how to make this pattern increment with each row (e.g., Row 1: 1 2 1, Row 2: 2 3 2)?


 

1. Write C programs to display the following patterns using nested loop construct.

(c)

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1

Answer:

To create this pattern, you need an outer loop to handle the 5 rows and an inner loop that counts downward from 4 to 1.

The Logic

·         Outer Loop (i): Runs 5 times (representing the rows).

·         Inner Loop (j): Starts at 4 and continues as long as j \ge 1. In each step, j is decremented (j--).

The C Code

C

#include <stdio.h>

 

int main() {

    int i, j;

 

    // Outer loop for 5 rows

    for (i = 1; i <= 5; i++) {

       

        // Inner loop to count down from 4 to 1

        for (j = 4; j >= 1; j--) {

            printf("%d ", j);

        }

       

        // Move to the next line after each row

        printf("\n");

    }

 

    return 0;

}

The Output

Plaintext

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1


Key Takeaway

The direction of the counting is controlled entirely by the inner loop's initialization and update:

·         To count up: for (j = 1; j <= 4; j++)

·         To count down: for (j = 4; j >= 1; j--)

Would you like to see how to make this count down starting from the row number (e.g., Row 5 starts at 5, Row 4 starts at 4)?


 

1. Write C programs to display the following patterns using nested loop construct.

(d)

 2

2          3          4

2          3          4          5          6

Answer:

#include <stdio.h>

 

int main() {

    int rows = 3;

    for (int i = 1; i <= rows; i++) {

        int num = 2;

        // Print leading spaces for alignment (optional, based on image alignment)

        for (int space = 0; space < rows - i; space++) {

            printf("  ");

        }

        // Print numbers

        for (int j = 1; j <= 2 * i - 1; j++) {

            printf("%d ", num++);

        }

        printf("\n");

    }

    return 0;

}

 

 

 

 

This code is a very clean way to generate the triangle! By initializing int num = 2 inside the outer loop, you ensure that every row starts fresh with the number 2.

How the Logic Breaks Down

1.       Row 1 (i=1):

o    Spaces: 3 - 1 = 2 spaces.

o    Numbers: Loop runs 2(1) - 1 = 1 time. Prints 2.

2.       Row 2 (i=2):

o    Spaces: 3 - 2 = 1 space.

o    Numbers: Loop runs 2(2) - 1 = 3 times. Prints 2 3 4.

3.       Row 3 (i=3):

o    Spaces: 3 - 3 = 0 spaces.

o    Numbers: Loop runs 2(3) - 1 = 5 times. Prints 2 3 4 5 6.


The Output

Your code will produce this perfectly centered pyramid:

Plaintext

    2

  2 3 4

2 3 4 5 6

A Small Fix for the Header

In your snippet, you have #include <stdio.h>. Ensure there is no line break between #include and <stdio.h>, or the compiler will throw an error.

Why this structure is smart

By using num++ inside the j loop, you don't have to worry about complex math like j + 1. The variable num simply keeps track of the "next value to print" for that specific row.


One more variation for you:

What if you wanted the numbers to continue counting instead of resetting to 2 every row? You would simply move int num = 2; outside the loops:

C

int num = 2; // Moved outside

for (int i = 1; i <= rows; i++) {

    // ... same space and j loops ...

}

New Output:

Plaintext

    2

  3 4 5

6 7 8 9 10

 

1. Write C programs to display the following patterns using nested loop construct.

(e)

    1

  1 2 1

1 2 3 2 1

 

Answer:

This is the Palindrome Pyramid, one of the most classic nested loop challenges. It requires you to handle three distinct tasks in every row: printing spaces, counting up, and then counting down.

The Logic

To build a row like 1 2 3 2 1, we break it into sections:

1.      Spaces: Decreases as the row number increases (TotalRows - CurrentRow).

2.      Ascending: A loop that counts from 1 up to the CurrentRow.

3.      Descending: A loop that starts at CurrentRow - 1 and counts down to 1.

The C Code

C

#include <stdio.h>

 

int main() {

    int rows = 3;

 

    for (int i = 1; i <= rows; i++) {

        // 1. Print leading spaces

        for (int space = 1; space <= rows - i; space++) {

            printf("  ");

        }

 

        // 2. Print ascending numbers

        for (int j = 1; j <= i; j++) {

            printf("%d ", j);

        }

 

        // 3. Print descending numbers

        // Starts at i-1 because the middle number is already printed

        for (int j = i - 1; j >= 1; j--) {

            printf("%d ", j);

        }

 

        printf("\n");

    }

 

    return 0;

}

 

The Output

Plaintext

    1

  1 2 1

1 2 3 2 1


Why this structure works

·         The "Peak": The ascending loop handles the peak of the pyramid (the highest number in the row).

·         The Offset: The descending loop starts at i - 1. If it started at i, you would get a double peak (e.g., 1 2 3 3 2 1).

·         Alignment: Using two spaces in printf(" ") for the space loop matches the space used in printf("%d ", j) to keep the pyramid perfectly symmetrical.

Would you like to see how to change this to use letters (A, ABA, ABCBA) or should we try to make the pyramid larger?


 

1. Write C programs to display the following patterns using nested loop construct.

(f)

      *

    * * *

  * * * * *

* * * * * * *

  * * * * *

    * * *

      *

Answer:

This is a Diamond (or Rhombus) Pattern built specifically with odd numbers of stars (1, 3, 5, 7, 5, 3, 1).

To create this, we split the logic into two parts: the top half (where the stars increase) and the bottom half (where the stars decrease).

The Logic

·         Total Rows: 7 (4 for the top, 3 for the bottom).

·         Star Formula: For each row i, we print (2i - 1) stars.

·         Space Formula: To keep it centered, we print (TotalRows - i) spaces.

The C Code

C

#include <stdio.h>

 

int main() {

    int i, j, space;

    int n = 4; // Number of rows for the top half

 

    // 1. Top Half (including the middle line)

    for (i = 1; i <= n; i++) {

        // Spaces

        for (space = 1; space <= n - i; space++) printf("  ");

        // Stars

        for (j = 1; j <= (2 * i - 1); j++) printf("* ");

        printf("\n");

    }

 

    // 2. Bottom Half

    for (i = n - 1; i >= 1; i--) {

        // Spaces

        for (space = 1; space <= n - i; space++) printf("  ");

        // Stars

        for (j = 1; j <= (2 * i - 1); j++) printf("* ");

        printf("\n");

    }

 

    return 0;

}


The Output

Plaintext

      *

    * * *

  * * * * *

* * * * * * *

  * * * * *

    * * *

      *

### Key Techniques

* **The Inversion:** Notice the second outer loop starts at `n - 1` and goes down to `1`. This "flips" the math we used for the top half.

* **Symmetry:** Using `2 * i - 1` ensures we only ever print an odd number of stars, which is required to have a single "peak" star at the top and bottom.

 

Would you like to try making this a **hollow diamond**, where only the outer border is made of stars?

 

 

 


 

1. Write C programs to display the following patterns using nested loop construct.

(g)

x                 x

x x             x x

x x x         x x x

x x x x     x x x x

x x x x x x x x x x

 

Answer:

 

#include <stdio.h>

 

int main() {

    int i, j, rows = 5;

    for (i = 1; i <= rows; i++) {

        for (j = 1; j <= i; j++) {

            printf("x ");

        }

        for (j = 1; j <= 2 * (rows - i); j++) {

            printf("  ");

        }

        for (j = 1; j <= i; j++) {

            printf("x ");

        }

        printf("\n");

    }

    return 0;

}

 

 

This code creates a Mirror Right-Angled Triangle (also known as a "Butterfly" or "Canyon" pattern). It prints characters on the far left and far right of the screen, with a shrinking gap of spaces in the middle.

How the Logic Works

Each row is divided into three distinct sections:

1.      Left Block (j <= i): Prints 'x' characters equal to the current row number.

2.      Middle Gap (j <= 2 * (rows - i)): Prints spaces. As i increases, the number of spaces decreases, making the gap smaller.

3.      Right Block (j <= i): Mirrors the left block by printing 'x' characters again.

The Output

For rows = 5, here is how it builds:

Plaintext

x                 x

x x             x x

x x x         x x x

x x x x     x x x x

x x x x x x x x x x


Step-by-Step Breakdown

·         Row 1 ($i=1$): 1 'x', 8 spaces, 1 'x'.

·         Row 3 ($i=3$): 3 'x's, 4 spaces, 3 'x's.

·         Row 5 ($i=5$): 5 'x's, 0 spaces ($2 \times 0$), 5 'x's. (This forms a solid line of 10 'x's).

Making it a full "Butterfly"

If you want to complete the shape, you can copy the entire loop structure but reverse the outer loop to count down from rows - 1 to 1:

C

// Bottom half to complete the butterfly

for (i = rows - 1; i >= 1; i--) {

    for (j = 1; j <= i; j++) printf("x ");

    for (j = 1; j <= 2 * (rows - i); j++) printf("  ");

    for (j = 1; j <= i; j++) printf("x ");

    printf("\n");

}

Would you like to see how to fill that middle gap with a different character (like dots) to make it look like a bridge?


 

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(a)

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

 

Answer:

#include <stdio.h>

 

int main() {

    int i, j, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 1; i <= lines; i++) {

        for (j = 1; j <= 3; j++) {

            printf("%d ", j);

        }

        printf("\n");

    }

    return 0;

}


 

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(b)

1 2 1

1 2 1

1 2 1

1 2 1

1 2 1

 

Answer:

 

#include <stdio.h>

 

int main() {

    int i, j, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 1; i <= lines; i++) {

        for (j = 1; j <= 2; j++) {

            printf("%d ", j);

        }

        printf("\n");

    }

    return 0;

}

 

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(c)

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1

4 3 2 1

Answer:

#include <stdio.h>

 

int main() {

    int i, j, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 1; i <= lines; i++) {

        for (j = 4; j >= 1; j--) {

            printf("%d ", j);

        }

        printf("\n");

    }

    return 0;

}


 

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(d)

    2

  2 3 4

2 3 4 5 6

 

Answer:

 

 

#include <stdio.h>

 

int main() {

    int i, j, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 0; i < lines; i++) {

        for (j = 2; j <= 4 + i; j++) {

            printf("%d ", j);

        }

        printf("\n");

    }

    return 0;

}

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

 (e)

    1

  1 2 1

1 2 3 2 1

 

Answer:

#include <stdio.h>

 

int main() {

    int i, j, space, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 1; i <= lines; i++) {

        for (space = 1; space <= lines - i; space++) {

            printf("  ");

        }

        for (j = 1; j <= i; j++) {

            printf("%d ", j);

        }

        for (j = i - 1; j >= 1; j--) {

            printf("%d ", j);

        }

        printf("\n");

    }

    return 0;

}

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(f)

 

      *

    * * *

  * * * * *

* * * * * * *

  * * * * *

    * * *

      *

 

Answer:

#include <stdio.h>

 

int main() {

    int i, j, space, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = 1; i <= lines; i++) {

        for (space = 1; space <= lines - i; space++) {

            printf(" ");

        }

        for (j = 1; j <= 2 * i - 1; j++) {

            printf("*");

        }

        printf("\n");

    }

    return 0;

}

2. Modify the solution of question no. 1 to accept the number of lines as the input. The program should make the display pattern accordingly (Hint: write separate programs).

(Question No.1. Write C programs to display the following patterns using nested loop construct.)

 

(g)

x                 x

x x             x x

x x x         x x x

x x x x     x x x x

x x x x x x x x x x

 

Answer:

#include <stdio.h>

 

int main() {

    int i, j, space, lines;

    printf("Enter the number of lines: ");

    scanf("%d", &lines);

    for (i = lines; i >= 1; i--) {

        for (space = 1; space <= lines - i; space++) {

            printf(" ");

        }

        for (j = 1; j <= i; j++) {

            printf("X ");

        }

        printf("\n");

    }

    return 0;

}


 

3. Extend the programs of Example 5.6 and Example 5.7 to make it dynamic by accepting the number of lines as an input from the keyboard.

Example 5.6: A C program to display a pattern.

 

#include <stdio.h>

int main()

{

int i, j, k, p;

for (k = 1; k <=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j <= (2*k - 1); j++)

{

printf("X");

}

printf("\n");

}

return 0;

}

 

 

Extend the programs of Example 5.6 to make it dynamic by accepting the number of lines as an input from the keyboard.

Answer:

 

 

To make Example 5.6 dynamic, we need to replace the fixed number 5 with a variable (usually named n or rows). We will use the scanf() function to capture this value from the user's keyboard.

The Dynamic Logic

1.      Input: We declare an integer variable n and ask the user to provide a value.

2.      Space Loop: Instead of 5 - k, the formula becomes n - k.

3.      Flexibility: The program will now work whether the user enters 3, 10, or 50.

The Updated C Code

C

#include <stdio.h>

 

int main() {

    int i, j, k, n;

 

    // 1. Accept input from the keyboard

    printf("Enter the number of lines for the pyramid: ");

    scanf("%d", &n);

 

    // 2. Outer loop runs 'n' times

    for (k = 1; k <= n; k++) {

       

        // 3. Print spaces based on the user's input

        for (i = 1; i <= (n - k); i++) {

            printf(" ");

        }

 

        // 4. Print 'X' based on the odd-number formula

        for (j = 1; j <= (2 * k - 1); j++) {

            printf("X");

        }

 

        // Move to the next line

        printf("\n");

    }

 

    return 0;

}


How the Dynamics Change the Output

If you enter different values for n, the shape remains a perfect pyramid but changes scale:

If n = 3:

Plaintext

  X

 XXX

XXXXX

If n = 6:

Plaintext

     X

    XXX

   XXXXX

  XXXXXXX

 XXXXXXXXX

XXXXXXXXXXX

Key Programming Tip

When using scanf(), always ensure you use the address-of operator (&) before the variable name (e.g., &n). This tells the computer exactly where in the memory to store the number the user types.

Example 5.7: A C program to display a pattern

Answer:

 

#include <stdio.h>

int main()

{

int i, j, k;

for (k = 1; k <=5; k++)

{

for(i = 1; i<=(5-k); i++)

{

printf(" ");

}

for(j = 1; j <= (2*k - 1); j++)

{

printf("%d ", j);

}

printf("\n");

}

return 0;

}

 

Extend the programs of Example 5.7 to make it dynamic by accepting the number of lines as an input from the keyboard.

Answer:

To make Example 5.7 dynamic, we introduce a variable (typically n) to store the user's input. We then replace the hard-coded limit of 5 with this variable in both the outer loop and the space-calculating loop.

The Logic Adjustments

1.      Variable Declaration: We add int n; to hold the number of rows.

2.      Input Function: We use scanf("%d", &n); to read the integer from the keyboard.

3.      Dynamic Limits: * The outer loop now runs until k <= n.

o    The space loop prints (n - k) spaces.


 

 

The Updated C Code

C

#include <stdio.h>

 

int main()

{

    int i, j, k, n;

 

    // Prompt user for input

    printf("Enter the number of lines: ");

    scanf("%d", &n);

 

    // Outer loop for 'n' rows

    for (k = 1; k <= n; k++)

    {

        // Inner loop for leading spaces

        for (i = 1; i <= (n - k); i++)

        {

            printf(" ");

        }

 

        // Inner loop for numbers in each row

        for (j = 1; j <= (2 * k - 1); j++)

        {

            printf("%d ", j);

        }

 

        // Move to the next line

        printf("\n");

    }

 

    return 0;

}


Understanding the Change

When the program is dynamic, the "center" of the pyramid shifts based on n.

·         If you enter 3, the first row has $3-1 = 2$ spaces.

·         If you enter 10, the first row has $10-1 = 9$ spaces.

A Quick Formatting Tip

Because you are printing a space after the number (%d ), the pyramid will naturally lean slightly to the right as it grows. To keep it perfectly balanced for larger inputs, you can change the space loop to print two spaces: printf(" ");. This compensates for the two-character width (number + space) of the output.


 

4. What is a nested loop? Why do one use nested loops in our programs?

Answer:

A nested loop is a loop inside another loop, where the inner loop runs completely for each single iteration of the outer loop, used to process multi-dimensional data (like grids/tables), generate patterns, or handle grouped items, making code efficient for complex, layered tasks like iterating through rows and columns. 

What is a Nested Loop?

·         It's a programming structure where one loop (the inner loop) is placed within the body of another loop (the outer loop).

·         For every single time the outer loop executes, the inner loop runs from start to finish. 

Why Use Nested Loops?

·         Multi-dimensional Data: Ideal for working with 2D arrays (like spreadsheets or matrices) where the outer loop handles rows and the inner loop handles columns, visiting each element.

·         Complex Patterns: Used to generate visual patterns, such as triangles or grids of characters (e.g., *).

·         Combinations & Groupings: Efficiently create combinations of items or perform actions on groups within groups (e.g., finding all pairs in a list).

·         Structured Repetition: Provides a structured way to repeat operations across different levels, like processing each day (outer) and then each period (inner) in a timetable.

·         Algorithmic Tasks: Essential for algorithms that require nested iterations, such as sorting algorithms or searching through layered data structures. 

Analogy: Think of a clock. The outer loop is the hour hand (moving once an hour), and the inner loop is the minute hand (completing 60 cycles for each hour the outer loop advances). 


 

5. Do we need to use same type of loops as outer and inner loops? Justify your answer with some code segments.

Answer:

No, you don't need to use the same type of loops (for, while, do-while) for your outer and inner loops; any combination works, as the inner loop executes fully for each iteration of the outer loop, making it useful for tasks like iterating over rows and columns or processing data subsets, as shown in Python example and C# example where a for loop can contain a while loop. The choice depends on clarity and specific logic, not mandatory matching. 

Justification

·         Flexibility: Programming languages allow any loop type within another because the inner loop's execution is treated as a single block of code by the outer loop.

·         Suitability: You choose the loop type that best fits the condition for that specific level of iteration (e.g., for for known counts, while for conditional repetition).

·         Logic: The primary goal is clear logic; if iterating through data structures (like lists of lists) or creating patterns, different loops can express the process more naturally. 

Code Examples (Python)

Example 1: for outer loop with while inner loop (Printing patterns/matrix-like data)

python

# Outer loop iterates through rows (0, 1, 2)

for i in range(3):

    print(f"Outer loop iteration: {i}")

    # Inner loop iterates for each row, stopping when j reaches a certain condition

    j = 0

    while j < 2: # Executes 2 times for each outer iteration

        print(f"  Inner loop: {j}")

        j += 1

    print("-" * 10)

Output: Prints 3 outer loops, each containing 2 inner loops. 

Example 2: while outer loop with for inner loop (Processing data conditionally)

python

# Outer loop continues as long as condition is true

count = 0

while count < 2:

    print(f"Outer while loop: {count}")

    # Inner loop for a fixed number of items (e.g., 3 colors)

    for color in ['Red', 'Green', 'Blue']:

        print(f"  Inner for loop: {color}")

    count += 1

    print("-" * 10)

Output: Demonstrates running a fixed set of actions (for loop) multiple times (controlled by while). 

Example 3: Common for (rows) and for (columns) (Grid/Matrix)

python

# Very common for grid-like structures

for row in range(2):

    for col in range(3):

        print(f"({row},{col})", end=" ")

    print() # Newline after each row

Output: (0,0) (0,1) (0,2) (1,0) (1,1) (1,2)


 

Answer No. 2:

The short answer is no. You do not need to use the same type of loops for the outer and inner loops. This is known as nested loops, and you can mix and match for, while, and do-while loops (depending on your programming language) however you see fit.

The choice of loop depends entirely on the logic of your problem, not on what the outer loop is doing.


Why we mix loop types

We choose a loop type based on how we need to iterate:

·         for loops are best when you know exactly how many times you need to run (e.g., iterating through a list or a grid).

·         while loops are best when you are waiting for a specific condition to change (e.g., waiting for a user to type "exit" or a math calculation to reach a threshold).

Scenario 1: while inside a for

Imagine you have a list of numbers (outer for loop), and for each number, you want to keep dividing it by 2 until it is less than 1 (inner while loop).

Python

numbers = [10, 5, 20]
 
for num in numbers:
    print(f"Processing number: {num}")
    # Inner loop is a 'while' because we don't know 
    # how many divisions it will take beforehand.
    while num > 1:
        num = num / 2
        print(f" Current value: {num}")

Scenario 2: for inside a while

Imagine a game that keeps running until the player quits (outer while loop). Inside the game, every turn, the player "attacks" 3 enemies (inner for loop).

Python

game_over = False
 
while not game_over:
    print("--- New Turn ---")
    
    # Inner loop is a 'for' because the number 
    # of enemies is fixed/known.
    for enemy in range(1, 4):
        print(f"Attacking enemy {enemy}!")
    
    # Logic to break the outer loop
    action = input("Type 'q' to quit or enter to continue: ")
    if action == 'q':
        game_over = True

Summary Table

Outer Loop

Inner Loop

Is it allowed?

Common Use Case

for

for

Yes

Standard grid/matrix processing.

for

while

Yes

Processing a list where each item needs conditional logic.

while

for

Yes

A main program loop that runs a fixed sequence of tasks.

while

while

Yes

Complex algorithms like searching a maze.

Would you like me to help you write a specific nested loop for a project or problem you're working on?

 

6. Can we put a third loop inside the inner loop of a nested loop constract? Write a C program to justify your answer.

Answer:

 

Yes, it is possible to place a third (or more) loop inside the inner loop of a nested loop construct in C programming. There is no language-specific restriction on the depth of nesting [1]. 

The only practical limitations are readability and maintainability of the code, and ensuring that the logic handles the complexity correctly. 

Here is a C program that demonstrates a triply nested loop, printing combinations of numbers from 1 to 3 for each of the three loops:

 

#include <stdio.h>

 

int main() {

    int i, j, k;

 

    printf("Starting the triple nested loop example:\n\n");

 

    // Outer loop

    for (i = 1; i <= 3; i++) {

        // Inner loop

        for (j = 1; j <= 3; j++) {

            // Third, innermost loop

            for (k = 1; k <= 3; k++) {

                printf("i = %d, j = %d, k = %d\n", i, j, k);

            }

            printf("\n"); // Add a newline after the innermost loop finishes its iteration

        }

        printf("----------------------\n"); // Separator for the outer loop iterations

    }

 

    printf("\nFinished the triple nested loop example.\n");

 

    return 0;

}

 

 

Justification and Output

When you compile and run the above program, the output will look like this (abbreviated for brevity):

 

 

Starting the triple nested loop example:

 

i = 1, j = 1, k = 1

i = 1, j = 1, k = 2

i = 1, j = 1, k = 3

 

i = 1, j = 2, k = 1

i = 1, j = 2, k = 2

i = 1, j = 2, k = 3

 

i = 1, j = 3, k = 1

i = 1, j = 3, k = 2

i = 1, j = 3, k = 3

----------------------

i = 2, j = 1, k = 1

i = 2, j = 1, k = 2

i = 2, j = 1, k = 3

 

... (continues for i=2 and i=3) ...

The output confirms that all 27 combinations (

3×3×33 cross 3 cross 3

3×3×3

) are executed, proving that the third loop runs successfully inside the second (inner) loop [1].