
전역변수
#include <stdio.h>
int main() {
int x = 10, y = 10;
if (x > 5) {
y = 20;
printf("x: %d, y: %d\n", x, y);
}
if (x > 9) {
x = 20;
printf("x: %d, y: %d\n", x, y);
}
if (x > 10) {
x = 10;
y = 20;
printf("x: %d, y: %d\n", x, y);
}
printf("x: %d, y: %d\n", x, y);
return 0;
}
x: 10, y: 20
x: 20, y: 20
x: 10, y: 20
x: 10, y: 20
지역변수
#include <stdio.h>
int main() {
int x = 10, y = 10;
if (x > 5) {
int y = 20; // 지역 변수 y (main의 y와는 다름)
printf("x: %d, y: %d\n", x, y); // x:10, y:20
}
if (x > 9) {
int x = 20; // 지역 변수 x (main의 x와는 다름)
printf("x: %d, y: %d\n", x, y); // x:20, y:10
}
if (x > 10) {
x = 10;
y = 20;
printf("x: %d, y: %d\n", x, y);
}
printf("x: %d, y: %d\n", x, y); // x:10, y:10
return 0;
}
x: 10, y: 20
x: 20, y: 10
x: 10, y: 10
변수 범위 (스코프)
`int y = 20;`
→ 이건 if 블록 안에서만 쓰이는 지역 변수
→ 바깥의 y에는 영향 X
`int x = 20;`
→ 이건 두 번째 if 블록 안에서만 쓰이는 지역 변수
→ 바깥의 x에는 영향 X
x > 10 조건 → 현재 x = 10 → 거짓 → 실행 안 됨
같은 이름의 변수 / Global 변수 / Static 변수
같은 이름의 변수
#include <stdio.h>
int fun(int n) {
n = n + 1;
return n;
}
int main() {
int n = 10;
n = fun(n);
n = fun(n);
printf("%d", n);
return 0;
}
10
실행 결과: 10 왜냐하면 fun(n)을 호출했지만, 리턴값을 저장하지 않음.
그래서 n은 계속 10이다.
전역변수(Global)
#include <stdio.h>
int n = 10; // 전역 변수 선언
int fun(int a) {
n = a + 1;
return n;
}
int main() {
fun(n);
fun(n);
printf("%d", n);
return 0;
}
n 위치가 전역(global) 변수이다. 그래서 함수 내부에서 n 바로 접근해서 수정 가능하다.
정적변수(Static)
#include <stdio.h>
void fun() {
static int a = 10; // static: 함수가 끝나도 값 유지
int b = 10; // 일반 지역 변수: 함수 끝나면 초기화됨
a++;
b++;
printf("%d, %d\n", a, b);
}
int main() {
fun(); // 첫 호출
fun(); // 두 번째 호출
fun(); // 세 번째 호출
return 0;
}
11, 11
12, 11
13, 11
변수 | 특성 | 동작 |
a | static 변수 | 함수가 끝나도 값이 유지됨, 호출마다 + 1 |
b | 일반 지역 변수 | 매번 10으로 초기화, 호출마다 +1 → 항상 11 |

논리연산자 주의사항
#include <stdio.h>
int main() {
int x = 10, y = 20;
if (x++ >= 11 && y++ > 20) {
printf("T = x: %d, y: %d\n", x, y);
} else {
printf("F = x: %d, y: %d\n", x, y);
}
return 0;
}
F = x: 11, y: 20
if (x++ >= 11 && y++ > 20) 일때 앞 조건이 거짓이면 뒤는 평가 ❌
✅ && (논리 AND) 연산자:
앞이 거짓이면 뒤는 평가하지 않음 (short-circuit)
if (x >= 10 && y > 20)
앞 조건 x >= 10이 false면
→ y > 20은 보지 않고 건너뜀
✅ || (논리 OR) 연산자:
앞이 참이면 뒤는 평가하지 않음 (short-circuit)
if (x >= 10 || y > 20)
앞 조건 x >= 10이 true면
→ y > 20은 보지 않고 건너뜀
연산자 | 앞 조건이 false일때 | 앞 조건이 true일때 |
&& | 뒤 조건 평가 ❌ | 뒤 조건 평가 ⭕ |
|| | 뒤 조건 평가 ⭕ | 뒤 조건 평가 ❌ |
비트연산자

✅ 비트연산 할 때 0이 아닌 모든 값은 참이다 (-1도 참)
조건문(Else-if) 주의사항
if 조건1:
실행문1
elif 조건2:
실행문2
elif 조건3:
실행문3
else:
기본실행문
조건 중 맨 처음 true가 되는 블록 하나만 실행돼요.
나머지 else if, else는 건너뜀
#include <stdio.h>
int main() {
int num = 7;
if (num > 10) {
printf("10보다 크다\n");
} else if (num > 5) {
printf("5보다 크다\n");
} else if (num > 0) {
printf("0보다 크다\n");
} else {
printf("0 이하이다\n");
}
return 0;
}
5보다 크다
num > 10은 false
num > 5는 true → 여기서 실행되고 종료
뒤에 있는 조건 (num > 0)도 true지만, 절대 실행되지 않음
반면 if만 쓰면?
if (num > 10) {
// ...
}
if (num > 5) {
// ...
}
이렇게 하면 모든 조건을 각각 검사한다.
즉, 참인 조건은 모두 실행된다.
반복문(for) 주의사항
#include <stdio.h>
int main() {
int n, sum = 0;
n = 3;
for (int i = 1; i <= n; sum = sum + i, i++) {
// 빈 블록, 아무 동작 없음
}
printf("%d", sum);
return 0;
}
i 먼저 증가하고 sum에 더하기
n = 3
s = 0 2 5 9
i = 1 2 3 4
'정보처리기사' 카테고리의 다른 글
[서브넷] 네트워크 주소 구하는 법 (정보처리기사 실기 25년 1차) (1) | 2025.05.13 |
---|---|
[C언어] 포인터, Call by Reference, 2차원 배열 행 대표주소, 구조체 정리 (0) | 2025.04.19 |
[2024년 3회] 정보처리기사 실기 복원 문제 해설 (이건 누가 낸 문제야?🤯) (6) | 2025.04.07 |
[정보처리기사] 비트연산자 정리 - AND, OR, XOR, NOT, 왼쪽 시프트(<<), 오른쪽시프트(>>) 연산 (6) | 2025.04.06 |
[정보처리기사] 동기/비동기 전송, 흐름제어, 오류 제어, OSI 참조 모델, 프로토콜 등 (10) | 2025.04.05 |

전역변수
#include <stdio.h> int main() { int x = 10, y = 10; if (x > 5) { y = 20; printf("x: %d, y: %d\n", x, y); } if (x > 9) { x = 20; printf("x: %d, y: %d\n", x, y); } if (x > 10) { x = 10; y = 20; printf("x: %d, y: %d\n", x, y); } printf("x: %d, y: %d\n", x, y); return 0; }
x: 10, y: 20
x: 20, y: 20
x: 10, y: 20
x: 10, y: 20
지역변수
#include <stdio.h> int main() { int x = 10, y = 10; if (x > 5) { int y = 20; // 지역 변수 y (main의 y와는 다름) printf("x: %d, y: %d\n", x, y); // x:10, y:20 } if (x > 9) { int x = 20; // 지역 변수 x (main의 x와는 다름) printf("x: %d, y: %d\n", x, y); // x:20, y:10 } if (x > 10) { x = 10; y = 20; printf("x: %d, y: %d\n", x, y); } printf("x: %d, y: %d\n", x, y); // x:10, y:10 return 0; }
x: 10, y: 20
x: 20, y: 10
x: 10, y: 10
변수 범위 (스코프)
int y = 20;
→ 이건 if 블록 안에서만 쓰이는 지역 변수
→ 바깥의 y에는 영향 X int x = 20;
→ 이건 두 번째 if 블록 안에서만 쓰이는 지역 변수
→ 바깥의 x에는 영향 X
x > 10 조건 → 현재 x = 10 → 거짓 → 실행 안 됨
같은 이름의 변수 / Global 변수 / Static 변수
같은 이름의 변수
#include <stdio.h> int fun(int n) { n = n + 1; return n; } int main() { int n = 10; n = fun(n); n = fun(n); printf("%d", n); return 0; }
10
실행 결과: 10 왜냐하면 fun(n)을 호출했지만, 리턴값을 저장하지 않음.
그래서 n은 계속 10이다.
전역변수(Global)
#include <stdio.h> int n = 10; // 전역 변수 선언 int fun(int a) { n = a + 1; return n; } int main() { fun(n); fun(n); printf("%d", n); return 0; }
n 위치가 전역(global) 변수이다. 그래서 함수 내부에서 n 바로 접근해서 수정 가능하다.
정적변수(Static)
#include <stdio.h> void fun() { static int a = 10; // static: 함수가 끝나도 값 유지 int b = 10; // 일반 지역 변수: 함수 끝나면 초기화됨 a++; b++; printf("%d, %d\n", a, b); } int main() { fun(); // 첫 호출 fun(); // 두 번째 호출 fun(); // 세 번째 호출 return 0; }
11, 11
12, 11
13, 11
변수 | 특성 | 동작 |
a | static 변수 | 함수가 끝나도 값이 유지됨, 호출마다 + 1 |
b | 일반 지역 변수 | 매번 10으로 초기화, 호출마다 +1 → 항상 11 |

논리연산자 주의사항
#include <stdio.h> int main() { int x = 10, y = 20; if (x++ >= 11 && y++ > 20) { printf("T = x: %d, y: %d\n", x, y); } else { printf("F = x: %d, y: %d\n", x, y); } return 0; }
F = x: 11, y: 20
if (x++ >= 11 && y++ > 20) 일때 앞 조건이 거짓이면 뒤는 평가 ❌
✅ && (논리 AND) 연산자:
앞이 거짓이면 뒤는 평가하지 않음 (short-circuit)
if (x >= 10 && y > 20)
앞 조건 x >= 10이 false면
→ y > 20은 보지 않고 건너뜀
✅ || (논리 OR) 연산자:
앞이 참이면 뒤는 평가하지 않음 (short-circuit)
if (x >= 10 || y > 20)
앞 조건 x >= 10이 true면
→ y > 20은 보지 않고 건너뜀
연산자 | 앞 조건이 false일때 | 앞 조건이 true일때 |
&& | 뒤 조건 평가 ❌ | 뒤 조건 평가 ⭕ |
|| | 뒤 조건 평가 ⭕ | 뒤 조건 평가 ❌ |
비트연산자

✅ 비트연산 할 때 0이 아닌 모든 값은 참이다 (-1도 참)
조건문(Else-if) 주의사항
if 조건1: 실행문1 elif 조건2: 실행문2 elif 조건3: 실행문3 else: 기본실행문
조건 중 맨 처음 true가 되는 블록 하나만 실행돼요.
나머지 else if, else는 건너뜀
#include <stdio.h> int main() { int num = 7; if (num > 10) { printf("10보다 크다\n"); } else if (num > 5) { printf("5보다 크다\n"); } else if (num > 0) { printf("0보다 크다\n"); } else { printf("0 이하이다\n"); } return 0; }
5보다 크다
num > 10은 false
num > 5는 true → 여기서 실행되고 종료
뒤에 있는 조건 (num > 0)도 true지만, 절대 실행되지 않음
반면 if만 쓰면?
if (num > 10) { // ... } if (num > 5) { // ... }
이렇게 하면 모든 조건을 각각 검사한다.
즉, 참인 조건은 모두 실행된다.
반복문(for) 주의사항
#include <stdio.h> int main() { int n, sum = 0; n = 3; for (int i = 1; i <= n; sum = sum + i, i++) { // 빈 블록, 아무 동작 없음 } printf("%d", sum); return 0; }
i 먼저 증가하고 sum에 더하기
n = 3
s = 0 2 5 9
i = 1 2 3 4
'정보처리기사' 카테고리의 다른 글
[서브넷] 네트워크 주소 구하는 법 (정보처리기사 실기 25년 1차) (1) | 2025.05.13 |
---|---|
[C언어] 포인터, Call by Reference, 2차원 배열 행 대표주소, 구조체 정리 (0) | 2025.04.19 |
[2024년 3회] 정보처리기사 실기 복원 문제 해설 (이건 누가 낸 문제야?🤯) (6) | 2025.04.07 |
[정보처리기사] 비트연산자 정리 - AND, OR, XOR, NOT, 왼쪽 시프트(<<), 오른쪽시프트(>>) 연산 (6) | 2025.04.06 |
[정보처리기사] 동기/비동기 전송, 흐름제어, 오류 제어, OSI 참조 모델, 프로토콜 등 (10) | 2025.04.05 |