본문 바로가기
C++/유튜브 어소트락 게임아카데미 C++무료강의

4 함수

by GREEN나무 2025. 3. 26.
728x90

 

💻 4강: 함수

🟢 프로그램 실행 흐름

  • 프로그램이 실행되면 main() 함수가 먼저 실행됩니다.
  • main() 함수가 종료되면 프로그램도 종료됩니다.

🟢 증감연산자 사용법

  • 특별한 이유가 없다면 전위형(++변수)을 사용하는 것이 권장됩니다.

🟢 반복문 사용법

🔎 For문

for (초기값; 유지조건; 반복자 변경) {
  // 실행할 코드
}

for (int i = 0; i < 10; ++i) {
  printf("output test\n");

  continue; // 이후 코드 건너뛰고 다음 반복으로
  break;    // 반복문 종료
}

🔎 While문

while (유지 조건) {
  // 실행할 코드
}

🖥️ 함수 – 콘솔창 printf(), scanf()

🔎 전처리

  • #include를 사용해 헤더 파일을 포함하여 기능을 확장합니다.
#include <stdio.h>

🔎 콘솔 출력 (printf())

printf("출력할 내용");

서식 지정자 (Format Specifiers)

서식 지정자 설명 예시 (printf() 출력)
%d 정수 (10진수) printf("%d", 123); 123
%i 정수 (10진수) printf("%i", 123); 123
%u 부호 없는 정수 (10진수) printf("%u", 123); 123
%o 8진수 printf("%o", 83); 123
%x 16진수 (소문자) printf("%x", 255); ff
%X 16진수 (대문자) printf("%X", 255); FF
%f 실수 (소수점 형태) printf("%.2f", 3.14159); 3.14
%e 지수 표기법 (소문자) printf("%e", 123.45); 1.234500e+02
%E 지수 표기법 (대문자) printf("%E", 123.45); 1.234500E+02
%g 자동으로 소수점/지수 표기 printf("%g", 123.45); 123.45
%G g의 대문자 버전 printf("%G", 123.45); 123.45
%c 문자 (char) printf("%c", 'A'); A
%s 문자열 (char 배열) printf("%s", "Hello"); Hello
%% 퍼센트 기호 출력 printf("%%"); %
%p 포인터 주소 출력 printf("%p", ptr); 0x7ffdabcd1234

이스케이프 시퀀스 (Escape Sequences)

이스케이프 시퀀스 설명 예시 (printf() 출력)
\n 개행 (줄 바꿈) printf("Hello\nWorld"); HelloWorld
\t printf("A\tB"); A B
\\ 백슬래시 출력 printf("\\"); \
\" 큰따옴표 출력 printf("\"Hello\""); "Hello"
\' 작은따옴표 출력 printf("\'Hello\'"); 'Hello'
\r 캐리지 리턴 (커서 맨 앞으로 이동) printf("Hello\rWorld"); World
\b 백스페이스 (이전 문자 삭제) printf("AB\bC"); AC
\f 폼 피드 (새 페이지) 사용 거의 없음
\v 수직 탭 printf("A\vB"); AB
\a 경고음 (벨 소리) 소리 발생 (환경에 따라 다름)
\0 널 문자 (문자열 끝) 사용자가 직접 확인 어려움

🔎 콘솔 입력 (scanf())

scanf("%d", &변수);

1. 기본 데이터형 서식 지정자

서식 지정자 데이터형 설명 및 예시
%d int 정수(10진수)를 입력받습니다. 예시: scanf("%d", &a);
%u unsigned int 부호 없는 정수(10진수)를 입력받습니다. 예시: scanf("%u", &b);
%ld long 긴 정수를 입력받습니다. 예시: scanf("%ld", &c);
%lu unsigned long 부호 없는 긴 정수를 입력받습니다. 예시: scanf("%lu", &d);
%lld long long 매우 긴 정수를 입력받습니다. 예시: scanf("%lld", &e);
%llu unsigned long long 부호 없는 매우 긴 정수를 입력받습니다. 예시: scanf("%llu", &f);
%o int 8진수를 입력받습니다. 예시: scanf("%o", &g);
%x int 16진수(소문자)를 입력받습니다. 예시: scanf("%x", &h);
%X int 16진수(대문자)를 입력받습니다. 예시: scanf("%X", &i);

 

 

2. 실수형 서식 지정자

서식 지정자 데이터형 설명 및 예시
%f float 소수점 형태의 실수를 입력받습니다. 예시: scanf("%f", &x);
%lf double 배정밀도 실수를 입력받습니다. 예시: scanf("%lf", &y);
%Lf long double 확장 배정밀도 실수를 입력받습니다. 예시: scanf("%Lf", &z);
%e float 지수 표기법(소문자)를 사용한 실수를 입력받습니다. 예시: scanf("%e", &x);
%E float 지수 표기법(대문자)를 사용한 실수를 입력받습니다. 예시: scanf("%E", &x);

 

 

3. 문자 및 문자열 서식 지정자

서식 지정자 데이터형 설명 및 예시
%c char 단일 문자를 입력받습니다. 예시: scanf("%c", &ch);
%s char[] 공백 전까지 문자열을 입력받습니다. 예시: scanf("%s", str);
%[ ] char[] 지정한 문자 집합에 해당하는 문자만 입력받습니다. 예시: scanf("%[A-Z]", str); (: "HELLO123" 입력 시 "HELLO"만 입력됨)

 

 

4. 기타 서식 지정자

서식 지정자 데이터형 설명 및 예시
%p void* 포인터 주소를 입력받습니다. 예시: scanf("%p", &ptr);
%n int* 지금까지 읽은 문자 수를 저장합니다. 예시: scanf("%d%n", &x, &count);
%% 없음 퍼센트 기호 자체를 입력받습니다. 예시: scanf("%%");

 

 

추가 설명

내용 설명 및 예시
공백 처리 %c%s는 공백 및 개행 문자를 처리하지 않으므로 입력 전에 " ""\n"을 추가하여 공백을 무시합니다. 예시: scanf(" %c", &ch);
버퍼 문제 해결 입력 후 버퍼에 남은 개행 문자(\n)fflush(stdin) 또는 getchar()로 제거합니다. 예시: cpp<br>scanf("%d", &a);<br>getchar(); // 개행 문자 제거<br>scanf("%c", &ch);<br>
배열 입력 시 주의점 %s는 공백 전까지만 입력받으므로, 여러 단어 입력 시 fgets() 또는 scanf("%[^\n]s", str);를 사용합니다. 예시: scanf("%[^\n]s", str);

 


추가 설명

  • 공백 처리
    • %c나 %s는 공백이나 개행 문자를 무시하지 않으므로, 입력 전에 " "나 "\n"을 추가하여 처리합니다.
      • 예시: scanf(" %c", &ch);
  • 버퍼 문제 해결
    • 입력 후 남은 개행 문자는 fflush(stdin)이나 getchar()로 제거합니다.
      • 예시:
      • scanf("%d", &a); getchar(); // 버퍼의 개행 문자 제거 scanf("%c", &ch);
  • 배열 입력 시 주의점
    • %s는 공백 전까지만 입력받으므로, 여러 단어를 입력받으려면 fgets() 또는 scanf("%[^\n]s", str);를 사용합니다.
      • 예시: scanf("%[^\n]s", str);

📂 자료구조 (Data Structure)

자료구조란?

  • 데이터를 어떤 방식으로 정리하고 효율적으로 다룰지를 고민하는 학문입니다.

🌟 주요 자료구조

🥞 스택 (Stack)

  • 후입선출 (LIFO, Last In First Out) 구조를 가집니다.
  • 예시 사용처 📞
    • 함수 호출 관리
    • 괄호 검사
    • 되돌리기 기능

🚶 큐 (Queue)

  • 선입선출 (FIFO, First In First Out) 구조를 가집니다.
  • 예시 사용처
    • 프린터 대기열
    • BFS(너비 우선 탐색)

🔄 재귀 함수 (Recursive Function)

📌 재귀 함수란?

  • 자기 자신을 호출하는 함수입니다.
  • 주로 트리 탐색, 피보나치 수열, 팩토리얼 계산 등에 사용됩니다.
  • 기본적으로 탈출 조건(Base Case)이 필요합니다.

피보나치 수열 (Fibonacci Sequence) 구현

#include <iostream>
using namespace std;

// 재귀 함수로 피보나치 수열 계산 🔄
int fibonacci(int n) {
    if (n <= 1) {
        return n; // F(0) = 0, F(1) = 1
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n;
    cout << "피보나치 수열의 n번째 항을 입력하세요: ";
    cin >> n;

    cout << "피보나치 수열의 " << n << "번째 항: " << fibonacci(n) << endl;
    return 0;
}
  • 시간 복잡도: O(2ⁿ) (비효율적)

팩토리얼 (Factorial) 구현

#include <iostream>
using namespace std;

// 재귀 함수로 팩토리얼 계산 🔄
int factorial(int n) {
    if (n <= 1) {
        return 1; // 0! = 1, 1! = 1
    }
    return n * factorial(n - 1);
}

int main() {
    int n;
    cout << "팩토리얼을 계산할 값을 입력하세요: ";
    cin >> n;

    cout << n << "! = " << factorial(n) << endl;
    return 0;
}
  • 시간 복잡도: O(n) (효율적)

📌 재귀함수 정리

  • 재귀 함수자기 자신을 호출하며, 문제를 작은 단위로 나누어 해결합니다.
  • 탈출 조건 (Base Case)이 필수이며, 없으면 무한 루프가 발생합니다.
  • 호출 스택 (Call Stack)을 사용하며, 호출된 함수는 스택에 쌓이고, 종료 후 제거됩니다.
  • 재귀 함수는 오버헤드가 발생할 수 있으므로, 반복문으로 대체하는 것이 성능 면에서 유리할 수 있습니다.

 

'C++ > 유튜브 어소트락 게임아카데미 C++무료강의' 카테고리의 다른 글

6. 구조체(Structure)  (0) 2025.03.30
5. 배열  (0) 2025.03.26
3. 연산자 및 전처리 구문  (0) 2025.03.24
2. 자료형  (0) 2025.03.17
C언어/C++ 무료강의 - 1_인트로  (0) 2025.03.14