Multiple input and output in C - Time & Space Complexity
When a program takes several inputs and produces several outputs, we want to know how the time it takes changes as the inputs grow.
We ask: How does the work increase when we have more inputs to handle?
Analyze the time complexity of the following code snippet.
#include <stdio.h>
void process(int a[], int n, int b[], int m) {
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
for (int j = 0; j < m; j++) {
printf("%d ", b[j]);
}
}
int main() {
int arr1[] = {1, 2, 3};
int arr2[] = {4, 5};
process(arr1, 3, arr2, 2);
return 0;
}
This code prints all elements from two separate arrays, each with its own size.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Two separate loops printing elements of each array.
- How many times: First loop runs
ntimes, second loop runsmtimes.
As the sizes of the two arrays grow, the total work grows by adding the work for each array.
| Input Size (n, m) | Approx. Operations |
|---|---|
| 10, 5 | About 15 operations |
| 100, 50 | About 150 operations |
| 1000, 500 | About 1500 operations |
Pattern observation: The total work grows roughly by adding the sizes of both inputs.
Time Complexity: O(n + m)
This means the time grows in a straight line with the sum of both input sizes.
[X] Wrong: "The time complexity is O(n * m) because there are two inputs."
[OK] Correct: The loops run one after another, not inside each other, so their times add, not multiply.
Understanding how multiple inputs affect time helps you explain your code clearly and shows you can think about real problems with several parts.
"What if the two loops were nested instead of separate? How would the time complexity change?"
Practice
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d", a, b);Solution
Step 1: Understand scanf with multiple inputs
The scanf function reads two integers from the user input and stores them in variables a and b.Step 2: Understand printf with multiple outputs
The printf function prints the values of a and b in the same order they were read.Final Answer:
Reads two integers from input and prints them in the same order. -> Option CQuick Check:
scanf and printf with two %d = same two integers [OK]
- Forgetting & before variables in scanf
- Mixing order of variables in printf
- Using wrong format specifiers
Solution
Step 1: Check scanf format string and arguments
The format string should have three %d separated by spaces, and variables must be passed by address using &.Step 2: Identify correct option
scanf("%d %d %d", &a, &b, &c); uses correct format string and & before variables, so it is correct.Final Answer:
scanf("%d %d %d", &a, &b, &c); -> Option AQuick Check:
Use & with variables in scanf [OK]
- Omitting & before variables
- Using commas inside format string incorrectly
- Using pointers incorrectly with *
int x, y;
scanf("%d %d", &x, &y);
printf("%d %d %d", x, y, x + y);
Input:
3 7Solution
Step 1: Read input values
scanf reads 3 into x and 7 into y.Step 2: Calculate and print output
printf prints x (3), y (7), and x + y (3 + 7 = 10).Final Answer:
3 7 10 -> Option BQuick Check:
3 + 7 = 10 [OK]
- Mixing order of variables in printf
- Confusing concatenation with addition
- Not using & in scanf
int a, b;
scanf("%d %d", a, b);
printf("%d %d", a, b);
Solution
Step 1: Check scanf arguments
scanf requires addresses of variables, so &a and &b are needed.Step 2: Identify error
Code passes variables a and b directly, causing undefined behavior or crash.Final Answer:
Missing & before variables in scanf. -> Option DQuick Check:
scanf needs & before variables [OK]
- Forgetting & in scanf
- Assuming variables auto-pass by address
- Confusing scanf and printf syntax
Solution
Step 1: Check input reading correctness
scanf must use &a and &b to read two integers correctly.Step 2: Check output matches sum and product
printf should print sum (a + b) first, then product (a * b) separated by space.Final Answer:
int a, b; scanf("%d %d", &a, &b); printf("%d %d", a + b, a * b); -> Option AQuick Check:
scanf with & and printf sum then product [OK]
- Forgetting & in scanf
- Swapping sum and product order
- Using wrong operators in printf
Ready to prove it?
Pass the test and this pattern moves unknown
