Analyze a for-loop with a post-printf expression and boolean control variable: what prints? #include<stdio.h> int main() { int x=1, y=1; for(; y; printf("%d %d ", x, y)) { y = x++ <= 5; } printf(" "); return 0; }

Difficulty: Medium

Correct Answer: 2 1 3 1 4 1 5 1 6 1 7 0

Explanation:

Introduction / Context:This problem tests comprehension of for-loop structure where the “increment” expression performs the printing, and the loop’s body updates the boolean control variable y based on a post-increment of x.

Given Data / Assumptions:

  • Initial values: x=1, y=1.
  • Loop continues while y is nonzero.
  • Post-expression prints the current x and y after the body runs.

Concept / Approach:The statement y = x++ <= 5; evaluates the comparison using the old value of x, then increments x. The printing occurs after this assignment in each iteration. Thus, the printed x is one greater than the value used in the comparison.

Step-by-Step Solution:Iter 1: body sets y = (1 <= 5) → 1; x becomes 2. Print “2 1”.Iter 2: y = (2 <= 5) → 1; x=3. Print “3 1”.Iter 3: y = (3 <= 5) → 1; x=4. Print “4 1”.Iter 4: y = (4 <= 5) → 1; x=5. Print “5 1”.Iter 5: y = (5 <= 5) → 1; x=6. Print “6 1”.Iter 6: y = (6 <= 5) → 0; x=7. Print “7 0”.Now y is 0 → loop terminates.

Verification / Alternative check:Move the printf into the body before or after the assignment to see how sequencing changes the displayed values; the given order matches the post-expression behavior.

Why Other Options Are Wrong:Shorter sequences stop prematurely; options without the final “7 0” ignore the last iteration where y flips to 0.

Common Pitfalls:Forgetting that the post-increment applies after comparison; misplacing when the printf executes in a for-loop; assuming printf happens before the assignment.

Final Answer:2 1 3 1 4 1 5 1 6 1 7 0

More Questions from Control Instructions

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion