Bird
Raised Fist0
Cprogramming~20 mins

Scope of variables - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Scope Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of variable shadowing in nested blocks

What is the output of this C code?

C
#include <stdio.h>

int main() {
    int x = 5;
    {
        int x = 10;
        printf("%d\n", x);
    }
    printf("%d\n", x);
    return 0;
}
A10\n10\n
B10\n5\n
C5\n10\n
D5\n5\n
Attempts:
2 left
💡 Hint

Remember that inner blocks can have variables with the same name that hide outer ones.

❓ Predict Output
intermediate
2:00remaining
Output of static variable inside function

What will be printed when this program runs?

C
#include <stdio.h>

void counter() {
    static int count = 0;
    count++;
    printf("%d ", count);
}

int main() {
    counter();
    counter();
    counter();
    return 0;
}
A0 0 0
B0 1 2
C1 2 3
D1 1 1
Attempts:
2 left
💡 Hint

Static variables inside functions keep their value between calls.

❓ Predict Output
advanced
2:00remaining
Output of global and local variable with same name

What is the output of this program?

C
#include <stdio.h>

int val = 100;

void printVal() {
    int val = 50;
    printf("%d ", val);
}

int main() {
    printVal();
    printf("%d\n", val);
    return 0;
}
A50 100\n
B100 50\n
C50 50\n
D100 100\n
Attempts:
2 left
💡 Hint

Local variables hide global variables inside their scope.

❓ Predict Output
advanced
2:00remaining
Output of uninitialized local variable

What will this program print?

C
#include <stdio.h>

int main() {
    int x;
    printf("%d\n", x);
    return 0;
}
AUndefined value (garbage) printed
B0
CCompilation error due to uninitialized variable
DRuntime error
Attempts:
2 left
💡 Hint

Local variables are not automatically set to zero.

❓ Predict Output
expert
3:00remaining
Output of variable scope with extern and static

Given these two files, what is the output when compiled and run together?

file1.c

#include 

static int count = 5;

void printCount() {
    printf("%d\n", count);
}

file2.c

#include 

extern int count;

int main() {
    printCount();
    printf("%d\n", count);
    return 0;
}
A0\n0\n
B5\n5\n
CLinker error\n
D5\nLinker error\n
Attempts:
2 left
💡 Hint

Static variables have internal linkage and are not visible outside their file.

Practice

(1/5)
1. What is the scope of a variable declared inside a function in C?
easy
A. It can be accessed only in the main function.
B. It is global and can be accessed anywhere in the program.
C. It is local to that function and cannot be accessed outside.
D. It is accessible only in loops inside the function.

Solution

  1. Step 1: Understand variable declaration inside a function

    A variable declared inside a function is created when the function starts and destroyed when it ends.
  2. Step 2: Identify the scope of such variables

    These variables are local to the function and cannot be accessed outside it.
  3. Final Answer:

    It is local to that function and cannot be accessed outside. -> Option C
  4. Quick Check:

    Local variable scope = inside function only [OK]
Hint: Local variables stay inside their function only [OK]
Common Mistakes:
  • Thinking local variables are global
  • Assuming local variables exist outside function
  • Confusing local with static variables
2. Which of the following is the correct way to declare a global variable in C?
easy
A. int x; // declared outside any function
B. int x; inside main()
C. static int x; inside a function
D. int x; inside a loop

Solution

  1. Step 1: Identify global variable declaration

    Global variables are declared outside all functions, usually at the top of the file.
  2. Step 2: Check each option

    int x; // declared outside any function declares int x; outside any function, which is correct for global scope.
  3. Final Answer:

    int x; // declared outside any function -> Option A
  4. Quick Check:

    Global variables declared outside functions [OK]
Hint: Globals declared outside all functions [OK]
Common Mistakes:
  • Declaring globals inside functions
  • Using static inside functions for globals
  • Declaring variables inside loops thinking they are global
3. What will be the output of the following C code?
int x = 5;
void func() {
    int x = 10;
    printf("%d", x);
}
int main() {
    func();
    printf(" %d", x);
    return 0;
}
medium
A. 10 10
B. 5 10
C. 5 5
D. 10 5

Solution

  1. Step 1: Analyze variable scopes in func()

    Inside func(), a local variable x is declared with value 10, which hides the global x.
  2. Step 2: Check printf outputs

    First printf prints local x (10). Then main prints global x (5).
  3. Final Answer:

    10 5 -> Option D
  4. Quick Check:

    Local hides global inside function [OK]
Hint: Local variable hides global inside function [OK]
Common Mistakes:
  • Assuming global x prints inside func()
  • Mixing order of printed values
  • Ignoring local variable shadowing
4. Identify the error in the following C code snippet:
void func() {
    printf("%d", x);
}
int main() {
    int x = 5;
    func();
    return 0;
}
medium
A. x is not declared globally, so func() cannot access it
B. Variable x is used before declaration in func()
C. Missing return type for main()
D. Syntax error in printf statement

Solution

  1. Step 1: Check variable x usage in func()

    func() tries to print x but x is declared only inside main(), so func() cannot see it.
  2. Step 2: Understand variable scope rules

    Variables declared inside main() are local to main() only, not visible in other functions.
  3. Final Answer:

    x is not declared globally, so func() cannot access it -> Option A
  4. Quick Check:

    Local variables not visible outside their function [OK]
Hint: Functions can't access locals from other functions [OK]
Common Mistakes:
  • Thinking main()'s x is global
  • Ignoring variable scope rules
  • Assuming implicit global variables
5. Consider the following C code:
int x = 1;
void outer() {
    int x = 2;
    {
        int x = 3;
        printf("%d ", x);
    }
    printf("%d ", x);
}
int main() {
    outer();
    printf("%d", x);
    return 0;
}

What is the output when this program runs?
hard
A. 1 2 3
B. 3 2 1
C. 3 3 3
D. 2 3 1

Solution

  1. Step 1: Analyze innermost block variable

    The innermost block declares x = 3, so first printf prints 3.
  2. Step 2: Analyze outer block variable

    After inner block ends, the x = 3 goes out of scope, so next printf prints outer x = 2.
  3. Step 3: Analyze global variable in main()

    Finally, main prints global x = 1.
  4. Final Answer:

    3 2 1 -> Option B
  5. Quick Check:

    Inner blocks hide outer variables [OK]
Hint: Inner block variables override outer ones [OK]
Common Mistakes:
  • Ignoring block-level scope
  • Assuming all x print same value
  • Confusing order of prints
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