*파이썬과 C언어의 함수 비교
| 항목 | Python 함수 | C언어 함수 |
| 함수 선언 키워드 | def | 자료형 사용 |
| 자료형 선언 | 필요 없음 | 반드시 필요 |
| 코드 블록 구분 | 들여쓰기 | { } 중괄호 |
| 반환값 선언 | 자동 처리 | 반환 자료형 명시 |
| 문법 난이도 | 쉬움 | 상대적으로 복잡 |
| 실행 속도 | 비교적 느림 | 빠름 |
| 메모리 제어 | 자동 | 개발자가 직접 관리 |
| 초보자 난이도 | 쉬움 | 어려움 |
| 사용 분야 | AI, 데이터분석, 자동화 | 시스템, 게임, 임베디드 |
*테트리스 게임 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define W 10
#define H 20
int map[H][W];
int x = W / 2, y = 0;
void draw()
{
system("cls");
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (i == y && j == x)
printf("■");
else if (map[i][j])
printf("■");
else
printf(" .");
}
printf("\n");
}
printf("\nA:왼쪽 D:오른쪽 S:빠르게\n");
}
int collision(int nx, int ny)
{
if (nx < 0 || nx >= W || ny >= H)
return 1;
if (map[ny][nx])
return 1;
return 0;
}
void clearLine()
{
for (int i = H - 1; i >= 0; i--) {
int full = 1;
for (int j = 0; j < W; j++) {
if (!map[i][j]) {
full = 0;
break;
}
}
if (full) {
for (int k = i; k > 0; k--) {
for (int j = 0; j < W; j++) {
map[k][j] = map[k - 1][j];
}
}
for (int j = 0; j < W; j++)
map[0][j] = 0;
i++;
}
}
}
int main()
{
while (1) {
draw();
if (_kbhit()) {
char key = _getch();
if (key == 'a' && !collision(x - 1, y))
x--;
if (key == 'd' && !collision(x + 1, y))
x++;
if (key == 's' && !collision(x, y + 1))
y++;
}
Sleep(300);
if (!collision(x, y + 1)) {
y++;
}
else {
map[y][x] = 1;
x = W / 2;
y = 0;
clearLine();
if (collision(x, y)) {
printf("\nGAME OVER\n");
break;
}
}
}
return 0;
}
+) 단축키
ctrl+M+O : 함수 단위 소스 접기
ctrl+M+L : 함수 단위 소스 펼치기
*argument/parameter, 리턴 값

- 출처: c언어 프로그래밍 강의 자료|한성현 교수님
*함수
- 특정한 작업을 하도록 만들어진 독립적인 단위 모듈
- 큰 프로그램 하나를 여러 개의 함수로 분할하여 구현하는 구조적인 프로그래밍 방식의 기본이다.
*main() 함수
int main()
{
return 0;
}
- c언어의 main() 함수는 한번만 사용할 수 있으며 없으면 실행이 되지 않는다.
*많이 사용하는 C 표준 라이브러리 함수 TOP 30
| 순위 | 함수 | 설명 | 헤더파일 |
| 1 | printf() | 화면 출력 | <stdio.h> |
| 2 | scanf() | 키보드 입력 | <stdio.h> |
| 3 | strlen() | 문자열 길이 | <string.h> |
| 4 | strcpy() | 문자열 복사 | <string.h> |
| 5 | strcmp() | 문자열 비교 | <string.h> |
| 6 | fgets() | 문자열 입력 | <stdio.h> |
| 7 | malloc() | 동적 메모리 할당 | <stdlib.h> |
| 8 | free() | 메모리 해제 | <stdlib.h> |
| 9 | memset() | 메모리 초기화 | <string.h> |
| 10 | memcpy() | 메모리 복사 | <string.h> |
| 11 | fopen() | 파일 열기 | <stdio.h> |
| 12 | fclose() | 파일 닫기 | <stdio.h> |
| 13 | fprintf() | 파일 출력 | <stdio.h> |
| 14 | fscanf() | 파일 입력 | <stdio.h> |
| 15 | exit() | 프로그램 종료 | <stdlib.h> |
| 16 | atoi() | 문자열 → 정수 변환 | <stdlib.h> |
| 17 | atof() | 문자열 → 실수 변환 | <stdlib.h> |
| 18 | rand() | 난수 생성 | <stdlib.h> |
| 19 | srand() | 난수 시드 설정 | <stdlib.h> |
| 20 | time() | 현재 시간 | <time.h> |
| 21 | getchar() | 문자 1개 입력 | <stdio.h> |
| 22 | putchar() | 문자 1개 출력 | <stdio.h> |
| 23 | puts() | 문자열 출력 | <stdio.h> |
| 24 | gets() | 문자열 입력 (현재 비권장) | <stdio.h> |
| 25 | toupper() | 대문자 변환 | <ctype.h> |
| 26 | tolower() | 소문자 변환 | <ctype.h> |
| 27 | isdigit() | 숫자 여부 검사 | <ctype.h> |
| 28 | sqrt() | 제곱근 계산 | <math.h> |
| 29 | pow() | 거듭제곱 계산 | <math.h> |
| 30 | qsort() | 정렬 | <stdlib.h> |
*함수 정의, 호출 ★
- 전광판 함수

- 두 배 해서 출력하는 함수

- 두 배 해서 리턴하는 함수

- 두 수를 더해서 리턴하는 함수

- 자판기 함수

- 자판기 함수2

→ 문자열일 경우 const char* 사용
*함수 선언, 호출, 정의 구조 ★

→ 함수의 머리 부분을 하나의 문장;(세미콜론 필수)으로 만드는 것을
함수 선언 또는 함수 원형(prototype)이라고 한다.
*파이썬 튜터
→ 프로그래밍 결과를 시각적으로 보여주는 사이트
*재귀 함수
→ 함수 내에서 자기 자신을 호출하는 함수
*실매개변수, 형식매개변수
- argument : 실매개변수
함수를 호출할 때 사용하는 매개변수
- parameter : 형식매개변수
함수 정의에서 사용하는 매개변수
'c언어 > 복습 과제' 카테고리의 다른 글
| c프로그래밍 13주차 (0) | 2026.05.27 |
|---|---|
| c프로그래밍 11주차 (0) | 2026.05.13 |
| c프로그래밍 10주차 (0) | 2026.05.06 |
| c프로그래밍 9주차 (0) | 2026.04.29 |
| c프로그래밍 7주차 (0) | 2026.04.15 |