프로그램의 논리적인 흐름을 도형과 화살표를 이용해 도식화한 것
– 사람이 프로그램의 흐름을 더 쉽게 이해할 수 있도록 돕는 시각적 도구
복잡한 C 프로그램의 논리 구조를 이해하고 설계할 때 사용

1.시작과 끝
2.준비
3.조건
4.처리/행동
5.입출력
예시코드
#include <stdio.h>
int main() {
int number;
// 숫자 입력
printf("숫자를 입력하세요: ");
scanf("%d", &number);
// 짝수/홀수 판단
if (number % 2 == 0) {
printf("Even Number\n");
} else {
printf("Odd Number\n");
}
return 0;
}
기초 용어
주석 (Comment)
코드에 대한 설명. 컴파일되지 않음.
// 한 줄 주석, / 여러 줄 주석 /
문장 (Statement)
하나의 작업을 수행하는 코드 줄. ;으로 끝남 a = 10;
자료형(data type)이란 저장되는 데이터의 종류에 따른 형태로, 저장되는 값의 종류와 범위에 따라 다르게 표현됨


상수 (Constant)
값이 변하지 않는 데이터
const int max = 100;
변수 (Variable)
바뀔수 있음, 데이터를 저장하는 이름 붙은 공간
int age = 20;
자료형 크기 확인 sizeof()
C에서는 sizeof() 연산자를 사용하면 자료형의 크기를 확인할수 있음
printf("int: %lu bytes\n", sizeof(int));
printf("float: %lu bytes\n", sizeof(float));
형 변환(Type Casting)
데이터형을 명시적으로 바꾸는 것
int x = 5;
float y = (float)x / 2; // 정수를 실수로 변환
오버플로우(overflow)란 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상
오버플로우가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있음.
반대의 경우로 언더플로우(underflow)가 있는데 이는 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상을 가리킴
정수형 오버플로우
정수형 변수는 고정된 크기(예: int는 4바이트)만큼만 값을 표현 가능
최대값을 초과하면 가장 작은 값으로 순환됨 (이진수 표현 때문)
#include <stdio.h>
#include <limits.h>
int main() {
int x = INT_MAX; // 32비트 기준: 2147483647
x = x + 1;
printf("%d\n", x); // 출력: -2147483648 (오버플로우 발생)
return 0;
}
부동소수점 오버플로우
#include <stdio.h>
#include <float.h>
int main() {
float f = FLT_MAX * 1000.0f;
printf("%f\n", f); // 출력: inf (무한대)
return 0;
}
언더플로우 (Underflow)
0에 매우 가까운 작은 수가 0으로 사라질 때 발생
부동소수점 언더플로우
float는 너무 작은 수는 정확히 표현 불가
부동소수점의 정밀도 한계로 0으로 반올림됨
#include <stdio.h>
#include <float.h>
int main() {
float f = 1.0e-46f; // float의 최소값보다 작음
printf("%e\n", f); // 출력: 0.000000e+00
return 0;
}
기수법은 숫자를 표현하는 방법으로, 몇을 밑으로 하여 자릿수를 구성하느냐에 따라 구분
| 기수법 | 밑 (Base) | 사용 숫자 | 예시 |
|---|---|---|---|
| 2진수 (Binary) | 2 | 0, 1 | 0b1010 → 10 (10진수) |
| 10진수 (Decimal) | 10 | 0~9 | 123, 2024 |
| 16진수 (Hexadecimal) | 16 | 0 | 0x1A → 26 (10진수) |
C에서 표기 방법
출력 방법 (printf)
10진수 (%d)
그냥 숫자 그대로
2진수
직접 표기는 X (bit 연산 등으로 처리)
사용자 정의 함수 필요
8진수 (%o)
숫자 앞에 0 붙임
16진수 (%x 또는 %X)
숫자 앞에 0x 또는 0X
진수 간 변환 예시
| 10진수 | 2진수 | 16진수 |
|---|---|---|
| 10 | 1010 | A |
| 15 | 1111 | F |
| 26 | 11010 | 1A |
| 255 | 11111111 | FF |
컴퓨터 메모리는 데이터와 명령어를 저장하는 공간
주로 RAM(주기억장치)를 의미하며, 데이터를 임시로 보관하여 CPU가 빠르게 접근할 수 있도록 함
메모리 단위
비트(Bit) : 가장 작은 정보 단위
0 또는 1 중 하나의 값을 표현
바이트(Byte) : 1바이트 = 8비트
한 문자를 저장하는 기본 단위
8개 비트, 256개 수 표현
| 단위 | 크기 | 설명 |
|---|---|---|
| Bit (b) | 1 | 0 또는 1 |
| Byte (B) | 8 bits | 문자 1개, 기본 저장 단위 |
| KB | 1024 B | 텍스트 문서 |
| MB | 1024 KB | 이미지, 소프트웨어 |
| GB | 1024 MB | 동영상, OS |
| TB | 1024 GB | 대용량 저장 |
| PB | 1024 TB | 데이터 센터급 |
포인터를 통해 스택/힙 접근을 하게 되므로 구조 이해가 중요
메모리 구조 이해는 메모리 누수, 버퍼 오버플로우, 세그먼트 오류(segfault) 등을 막는 데 핵심적

void hello() {
printf("Hi!\n"); // 이 함수 자체는 코드 영역에 저장됨
}
ⓐ 초기화된 데이터 영역
초기값이 있는 전역/정적 변수
int global_var = 10; // 여기 저장됨
ⓑ 미초기화 데이터 영역 (BSS Segment)
초기값 없는 전역/정적 변수
static int count; // 0으로 초기화되어 BSS에 저장
int* p = malloc(sizeof(int) * 10); // 10개 int 공간 동적 할당
// 메모리 누수(leak) 발생 가능성 존재
void func() {
int local = 5; // 스택에 저장
}
// 스택 오버플로우(Stack Overflow)는 재귀 호출 시 발생 가능
요약
| 영역 | 저장 내용 | 관리 방식 | 생성 시기 |
|---|---|---|---|
| 코드 영역 | 함수 코드, 명령어 | 자동 | 프로그램 시작 시 |
| 데이터 영역 | 전역/정적 변수 (초기화 여부에 따라) | 자동 | 프로그램 시작 시 |
| 힙 영역 | 동적 할당 변수 (malloc) | 수동(free) | 런타임 중 |
| 스택 영역 | 지역 변수, 매개변수, 함수 호출 정보 | 자동 | 함수 호출 시 |
Ref
Chatgpt
플로우차트
https://www.genspark.ai/spark/c%EC%96%B8%EC%96%B4%EB%A1%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-flow-chart-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9E%91%EC%84%B1-%EB%B0%A9%EB%B2%95/2914305d-9a69-4b6b-a8ca-ae3a705620f2
데이터형
https://ittrue.tistory.com/51
메모리
https://thenaeul.wordpress.com/2020/11/08/c%EC%96%B8%EC%96%B4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD/