Bird
Raised Fist0
Cprogramming~20 mins

Two-dimensional arrays in C - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
2D Array Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of nested loops filling 2D array
What is the output of this C program that fills a 2D array and prints it?
C
#include <stdio.h>

int main() {
    int arr[2][3];
    int val = 1;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            arr[i][j] = val++;
        }
    }
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
A1 2 3 4 5 6 \n
B1 3 5 \n2 4 6 \n
C0 1 2 \n3 4 5 \n
D1 2 3 \n4 5 6 \n
Attempts:
2 left
💡 Hint
Look at how the nested loops assign values row by row.
🧠 Conceptual
intermediate
1:30remaining
Memory layout of 2D arrays in C
In C, how is a two-dimensional array like int arr[2][3] stored in memory?
AAs a contiguous block in row-major order (rows stored one after another)
BAs a contiguous block in column-major order (columns stored one after another)
CAs separate blocks for each row scattered in memory
DAs pointers to pointers with each row allocated separately
Attempts:
2 left
💡 Hint
Think about how C stores arrays by default.
🔧 Debug
advanced
1:30remaining
Identify the error in 2D array initialization
What error will this code produce when compiled? int arr[2][3] = { {1, 2}, {3, 4, 5, 6} };
ARuntime error: array index out of bounds
BCompilation error: missing semicolon
CCompilation error: too many initializers for array
DNo error, compiles and runs fine
Attempts:
2 left
💡 Hint
Check the number of elements in each inner initializer list.
📝 Syntax
advanced
1:30remaining
Correct syntax to declare a pointer to 2D array
Which option correctly declares a pointer to a 2D array of integers with 3 columns?
Aint (*ptr)[3];
Bint *ptr[3];
Cint **ptr;
Dint ptr(*)[3];
Attempts:
2 left
💡 Hint
Remember the parentheses placement for pointer to array.
🚀 Application
expert
2:30remaining
Sum of diagonal elements in a square 2D array
Given a 3x3 integer array, which code snippet correctly calculates the sum of the main diagonal elements?
A
int sum = 0;
for (int i = 0; i &lt; 3; i++) {
    sum += arr[i][3 - i];
}
B
int sum = 0;
for (int i = 0; i &lt; 3; i++) {
    sum += arr[i][i];
}
C
int sum = 0;
for (int i = 0; i &lt; 3; i++) {
    sum += arr[3][i];
}
D
int sum = 0;
for (int i = 0; i &lt; 3; i++) {
    sum += arr[i][i + 1];
}
Attempts:
2 left
💡 Hint
Main diagonal elements have equal row and column indices.

Practice

(1/5)
1. What is a two-dimensional array in C?
easy
A. An array of arrays, storing data in rows and columns
B. A single list of numbers stored in a line
C. A function that returns multiple values
D. A variable that holds only one value

Solution

  1. Step 1: Understand array structure

    A two-dimensional array stores data in a grid format with rows and columns.
  2. Step 2: Compare options

    Only An array of arrays, storing data in rows and columns describes this structure as an array of arrays.
  3. Final Answer:

    An array of arrays, storing data in rows and columns -> Option A
  4. Quick Check:

    2D array = array of arrays [OK]
Hint: Think of a table with rows and columns [OK]
Common Mistakes:
  • Confusing 2D arrays with single arrays
  • Thinking 2D arrays are functions
  • Assuming 2D arrays hold only one value
2. Which of the following is the correct way to declare a 3x3 integer two-dimensional array in C?
easy
A. int arr(3,3);
B. int arr[3][3];
C. int arr[3,3];
D. int arr{3}{3};

Solution

  1. Step 1: Recall C array declaration syntax

    In C, arrays use square brackets with sizes inside, like arr[rows][columns].
  2. Step 2: Check each option

    Only int arr[3][3]; uses correct syntax: int arr[3][3];
  3. Final Answer:

    int arr[3][3]; -> Option B
  4. Quick Check:

    Use square brackets for array sizes [OK]
Hint: Use square brackets for array sizes, not parentheses [OK]
Common Mistakes:
  • Using parentheses instead of square brackets
  • Using commas inside brackets
  • Using curly braces for declaration
3. What will be the output of the following C code?
int arr[2][2] = {{1, 2}, {3, 4}};
printf("%d", arr[1][0]);
medium
A. 3
B. 1
C. 2
D. 4

Solution

  1. Step 1: Understand array initialization

    The array arr has two rows: first row {1, 2}, second row {3, 4}.
  2. Step 2: Access element arr[1][0]

    Row index 1 is second row, column index 0 is first element in that row, which is 3.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    arr[1][0] = 3 [OK]
Hint: Remember indexing starts at 0 for rows and columns [OK]
Common Mistakes:
  • Confusing row and column indexes
  • Starting index at 1 instead of 0
  • Mixing up elements in initialization
4. Identify the error in the following C code snippet:
int matrix[2][3];
matrix[2][1] = 5;
medium
A. Wrong data type for matrix
B. No error, code is correct
C. Syntax error due to missing semicolon
D. Index out of bounds error on matrix[2][1]

Solution

  1. Step 1: Check array size and valid indexes

    matrix is declared with 2 rows (0 and 1) and 3 columns (0 to 2).
  2. Step 2: Analyze matrix[2][1]

    Row index 2 is invalid because valid rows are 0 and 1 only, causing out of bounds error.
  3. Final Answer:

    Index out of bounds error on matrix[2][1] -> Option D
  4. Quick Check:

    Row index must be less than 2 [OK]
Hint: Array indexes start at 0 and go to size-1 [OK]
Common Mistakes:
  • Using index equal to array size
  • Ignoring zero-based indexing
  • Assuming no error for out-of-range access
5. Given the 2D array declaration int grid[3][3] = {{1,2,3},{4,5,6},{7,8,9}};, which code snippet correctly calculates the sum of all elements?
hard
A. int sum=0; for(int i=1;i<3;i++) for(int j=1;j<3;j++) sum += grid[i][j]; printf("%d", sum);
B. int sum=0; for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) sum += grid[i][j]; printf("%d", sum);
C. int sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) sum += grid[i][j]; printf("%d", sum);
D. int sum=0; for(int i=0;i<3;i++) sum += grid[i]; printf("%d", sum);

Solution

  1. Step 1: Understand array size and loops

    grid has 3 rows and 3 columns, so indexes go from 0 to 2.
  2. Step 2: Check loop bounds and summation

    int sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) sum += grid[i][j]; printf("%d", sum); uses correct loop bounds (i<3, j<3) and sums all elements correctly.
  3. Step 3: Analyze other options

    int sum=0; for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) sum += grid[i][j]; printf("%d", sum); uses <=3 causing out-of-bounds access; the option starting loops at 1 misses first row and column elements; the option trying sum += grid[i] is invalid for 2D arrays.
  4. Final Answer:

    int sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) sum += grid[i][j]; printf("%d", sum); -> Option C
  5. Quick Check:

    Use correct loop bounds and access grid[i][j] [OK]
Hint: Loop from 0 to size-1 for both rows and columns [OK]
Common Mistakes:
  • Using <= instead of < in loops
  • Starting loops at 1 instead of 0
  • Trying to add entire row instead of elements
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard