반응형

이번 강의에서는 C 언어의 핵심 요소 중 하나인 함수에 대해 배워보겠습니다.

이미 우리는 이전 글에서 변수, 자료형, 연산자, 조건문과 반복문에 대해 학습했으며,

이러한 지식을 바탕으로 더 체계적이고 효율적인 프로그램을 작성하는 방법을 배울 것입니다.

C 프로그래밍 언어 독학 시리즈의 전편을 아직 보지 못하신 분들은 아래 링크를 참고해 주세요!

C 언어 독학 #1 (기초, 쉬운 설명, Hello world)

C 언어 독학 시리즈 #2 (변수, 자료형, 연산자, 기본 입출력, 실습예제)

C언어 독학 완전 기초부터 마스터까지 #3 (조건문과 반복문, 조건문과 반복문을 이용한 실습 예제)

1. 함수란 무엇인가?

프로그래밍에서 함수는 특정 작업을 수행하는 코드 블록입니다. 함수는 코드를 재사용 가능하게 하고, 가독성을 높이며, 프로그램의 구조를 더 체계적으로 만듭니다.

C 언어에서 함수는 **입력(매개변수)**을 받아 **출력(반환값)**을 생성하며, 필요한 경우 아무 입력도 받지 않거나 아무 것도 반환하지 않을 수도 있습니다.

함수의 기본 구조

반환형 함수이름(매개변수) {
    // 실행될 코드
    return 반환값;
}

2. 기본 함수 사용해보기

C 언어에는 printf, scanf 같은 표준 라이브러리 함수가 있지만, 사용자 정의 함수를 직접 만들어 사용할 수도 있습니다.

예제: 간단한 덧셈 함수

#include <stdio.h>

// 함수 정의
int add(int a, int b) {
    return a + b; // 두 숫자의 합 반환
}

int main() {
    int x = 5, y = 10;
    int result = add(x, y); // 함수 호출
    printf("결과: %d\n", result);
    return 0;
}

실행 결과
결과: 15

3. 함수의 구성 요소

  1. 반환형(Return Type)
    함수가 반환하는 값의 데이터 타입입니다. 예를 들어, int, void, float 등이 있습니다.
    • int: 정수 반환
    • void: 반환값이 없음
  2. 함수 이름(Function Name)
    함수의 이름은 코드에서 호출될 때 사용됩니다. 변수 이름처럼 의미 있는 이름을 붙이는 것이 좋습니다.
  3. 매개변수(Parameter)
    함수가 입력으로 받을 데이터입니다. 여러 개의 매개변수를 쉼표(,)로 구분할 수 있습니다.
  4. 함수 본문(Body)
    함수가 실행하는 코드 블록입니다.
  5. 반환값(Return Value)
    함수가 작업을 끝내고 호출한 곳으로 돌려주는 값입니다. 반환값이 없을 경우 void를 사용합니다.

4. 함수의 종류

1. 반환값이 있고, 매개변수가 있는 함수

int multiply(int a, int b) {
    return a * b;
}


2. 반환값이 없고, 매개변수가 있는 함수

void printMessage(char message[]) {
    printf("%s\n", message);
}

3. 반환값이 있고, 매개변수가 없는 함수

int getRandomNumber() {
    return 42; // 임의의 숫자 반환
}

4. 반환값도 없고, 매개변수도 없는 함수

void greet() {
    printf("Hello, World!\n");
}

5. 함수 사용 시 주의사항

  • 함수 이름은 고유해야 합니다.
  • 매개변수와 반환값의 타입을 정확히 정의해야 합니다.
  • main 함수는 항상 프로그램의 시작점이며, 반드시 포함되어야 합니다.

6. 실습: 구구단 출력 함수 만들기

문제

사용자 정의 함수를 사용하여 입력받은 숫자의 구구단을 출력하세요.

코드

#include <stdio.h>

// 구구단 출력 함수
void printMultiplicationTable(int n) {
    for (int i = 1; i <= 9; i++) {
        printf("%d x %d = %d\n", n, i, n * i);
    }
}

int main() {
    int number;
    printf("구구단을 출력할 숫자를 입력하세요: ");
    scanf("%d", &number);
    printMultiplicationTable(number); // 함수 호출
    return 0;
}

실행 결과

구구단을 출력할 숫자를 입력하세요: 7
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 9 = 63

이번 강의에서는 C 언어에서 함수를 정의하고 사용하는 방법을 배웠습니다.

다음 강의에서는 **배열(Array)**과 함수의 연계를 통해 더욱 복잡한 프로그램을 작성해 보겠습니다.

지금까지 배운 내용을 활용하여 간단한 프로그램을 작성해 보세요! 독학의 핵심은 직접 실행해 보는 것입니다. 😊


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

 

반응형
반응형

이번 강의에서는 C언어의 핵심 구조 중 하나인 조건문과 반복문에 대해 배워보겠습니다.

이미 우리는 이전 글에서 변수, 자료형, 연산자에 대해 배웠으며,

이러한 지식을 바탕으로 프로그램의 흐름을 제어하는 방법을 학습할 것입니다.


C 프로그래밍 언어 독학 시리즈 전편을 아직 안 보신 분은 아래 링크를 참고해 주세요!

C 언어 독학 #1 (기초, 쉬운 설명, Hello world)

C 언어 독학 시리즈 #2 (변수, 자료형, 연산자, 기본 입출력, 실습예제)


"C언어를 배우는 것은 마치 산을 오르는 것과 같다.

정상에 오를 때까지는 힘들고 도전적이지만, 정상에 서면 전에 보지 못했던 경치와 가능성을 볼 수 있다."

조건문

조건문은 주어진 조건에 따라 다른 코드를 실행하게 하는 구조입니다.

C언어에서는 주로 if, else, else if, switch 문을 사용합니다.

if문
if 문은 마치 도로의 분기점과 같습니다.
어떤 조건을 만족하면 한 길로 가고, 그렇지 않으면 다른 길로 갑니다.
조건의 복잡성에 따라 여러 개의 분기로 나뉠 수 있습니다.
#include <stdio.h>

int main() {
    int score = 85;
    if (score >= 90) {
        printf("A학점입니다.\n");
    } else if (score >= 80) {
        printf("B학점입니다.\n");
    } else {
        printf("C학점 이하입니다.\n");
    }
    return 0;
}

위 내용을 응용하여 나이에 따른 입장료 계산을 해보도록 하겠습니다.

#include <stdio.h>

int main() {
    int age;
    printf("나이를 입력하세요: ");
    scanf("%d", &age);

    if (age < 13) {
        printf("어린이 입장료는 2000원입니다.\n");
    } else if (age <= 19) {
        printf("청소년 입장료는 3000원입니다.\n");
    } else {
        printf("성인 입장료는 5000원입니다.\n");
    }
    return 0;
}
switch 문
switch 문은 마치 기차역의 스위치처럼 특정 변수의 값에 따라 다른 트랙으로 기차를 보내는 역할을 합니다.
각 케이스는 특정한 역에 해당하며, 해당 역에 정차할 때만 실행됩니다.
#include <stdio.h>

int main() {
    char grade = 'B';
    switch (grade) {
        case 'A':
            printf("우수한 성적입니다.\n");
            break;
        case 'B':
            printf("좋은 성적입니다.\n");
            break;
        default:
            printf("노력이 필요합니다.\n");
            break;
    }
    return 0;
}

위 내용을 응용하여 요일에 따른 스케줄 출력을 해보도록 하겠습니다.

#include <stdio.h>

int main() {
    int day;
    printf("요일을 입력하세요 (1=월요일, ..., 7=일요일): ");
    scanf("%d", &day);

    switch(day) {
        case 1:
            printf("월요일: 팀 회의가 있습니다.\n");
            break;
        case 2:
            printf("화요일: 프로젝트 작업의 날입니다.\n");
            break;
        case 3:
            printf("수요일: 영어 학습 시간입니다.\n");
            break;
        case 4:
            printf("목요일: 체육활동이 있습니다.\n");
            break;
        case 5:
            printf("금요일: 자유 연구 시간입니다.\n");
            break;
        case 6:
            printf("토요일: 휴식일입니다.\n");
            break;
        case 7:
            printf("일요일: 가족과 시간을 보냅니다.\n");
            break;
        default:
            printf("잘못된 입력입니다.\n");
            break;
    }
    return 0;
}

반복문

반복문은 특정 조건이 만족하는 동안 코드 블럭을 반복 실행합니다.

C언어에서는 for, while, do-while 문을 사용합니다.

for 문
for 문은 마치 달력의 날짜를 하나씩 넘기는 것과 같습니다.
시작점, 종료점, 그리고 얼마나 빠르게 넘길지(증가량)를 정해놓고 반복합니다.
#include <stdio.h>

int main() {
    for (int i = 1; i <= 5; i++) {
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

위 내용을 응용하여 1부터 10까지의 합 계산을 해보도록 하겠습니다.

#include <stdio.h>

int main() {
    int sum = 0;
    for (int i = 1; i <= 10; i++) {
        sum += i;
    }
    printf("1부터 10까지의 합은 %d입니다.\n", sum);
    return 0;
}
while 문
while 문은 마치 조건을 충족하는 동안 무한 루프 도로를 도는 자동차와 같습니다.
주어진 조건이 참인 동안 계속해서 루프를 돕니다.
#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 5) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    return 0;
}

위 내용을 응용하여 사용자로부터 0이 입력될 때까지 숫자 입력 받기를 해보도록 하겠습니다.

#include <stdio.h>

int main() {
    int number;
    printf("숫자를 입력하세요 (0으로 종료): ");
    scanf("%d", &number);

    while (number != 0) {
        printf("입력한 숫자: %d\n", number);
        printf("다시 숫자를 입력하세요 (0으로 종료): ");
        scanf("%d", &number);
    }
    printf("프로그램을 종료합니다.\n");
    return 0;
}

이제 위 내용을 모두 포함한 실습 예제를 하나 만들어보겠습니다.

조건문과 반복문을 모두 활용하여 하나의 통합된 프로그램을 구성할 것이며, 아래 기능을 포함할 것입니다

  1. 사용자로부터 날짜(요일)와 나이를 입력받습니다.
  2. 요일에 따른 스케줄을 출력합니다 (switch 문 사용).
  3. 나이에 따른 입장료를 계산합니다 (if 문 사용).
  4. 1부터 입력받은 날짜까지의 합을 계산합니다 (for 문 사용).
  5. 사용자로부터 0이 입력될 때까지 추가 숫자를 입력받아 출력합니다 (while 문 사용)

 

C코드 구현
#include <stdio.h>

int main() {
    int day, age, number, sum = 0;

    // 요일 입력받기
    printf("요일을 입력하세요 (1=월요일, ..., 7=일요일): ");
    scanf("%d", &day);

    // 스케줄 출력 (switch 문)
    switch(day) {
        case 1: printf("월요일: 팀 회의가 있습니다.\n"); break;
        case 2: printf("화요일: 프로젝트 작업의 날입니다.\n"); break;
        case 3: printf("수요일: 영어 학습 시간입니다.\n"); break;
        case 4: printf("목요일: 체육활동이 있습니다.\n"); break;
        case 5: printf("금요일: 자유 연구 시간입니다.\n"); break;
        case 6: printf("토요일: 휴식일입니다.\n"); break;
        case 7: printf("일요일: 가족과 시간을 보냅니다.\n"); break;
        default: printf("잘못된 입력입니다. 프로그램을 종료합니다.\n"); return 1;
    }

    // 나이 입력받기
    printf("나이를 입력하세요: ");
    scanf("%d", &age);

    // 입장료 계산 (if 문)
    if (age < 13) {
        printf("어린이 입장료는 2000원입니다.\n");
    } else if (age <= 19) {
        printf("청소년 입장료는 3000원입니다.\n");
    } else {
        printf("성인 입장료는 5000원입니다.\n");
    }

    // 1부터 day까지의 합 계산 (for 문)
    for (int i = 1; i <= day; i++) {
        sum += i;
    }
    printf("1부터 %d까지의 합은 %d입니다.\n", day, sum);

    // 0이 입력될 때까지 숫자 입력받기 (while 문)
    printf("숫자를 입력하세요 (0으로 종료): ");
    scanf("%d", &number);
    while (number != 0) {
        printf("입력한 숫자: %d\n", number);
        printf("다시 숫자를 입력하세요 (0으로 종료): ");
        scanf("%d", &number);
    }
    printf("프로그램을 종료합니다.\n");
    return 0;
}

우리는 위 예제를 통해 아래와 같은 c언어 구현 스킬을 배워봤습니다.

1. 요일에 따른 스케줄 출력 (switch 문 활용)

  • 조건 분기 처리: switch 문을 통해 특정 변수의 값(요일)에 따라 다른 동작을 수행하도록 프로그램을 제어합니다. 이를 통해 여러 조건에 대해 각각의 로직을 구현하는 방법을 연습할 수 있습니다.
  • 값에 따른 특정 케이스 처리: 각 요일마다 다른 메시지를 출력하며, switch 문의 case 레이블을 사용하는 방법을 실습합니다.
  • 디폴트 케이스 처리: default 레이블을 사용하여 입력 값이 유효 범위를 벗어났을 때의 예외 처리를 구현합니다.

2. 나이에 따른 입장료 계산 (if 문 활용)

  • 조건 로직 구현: 다중 if-else if-else 구조를 사용하여 복잡한 조건 로직을 구현합니다. 이는 프로그램에서 다양한 조건에 따라 다른 행동을 취해야 할 때 매우 유용합니다.
  • 조건 표현식: 다양한 비교 연산자(<, <=, else)를 사용하여 특정 조건을 평가하고 그에 따라 다른 동작을 수행합니다.

3. 1부터 day까지의 합 계산 (for 문 활용)

  • 반복문 사용: for 문을 사용하여 특정 범위의 값에 대해 반복 작업을 수행합니다. 이는 데이터의 집합이나 범위에 대해 일련의 연산을 반복적으로 적용할 때 필수적입니다.
  • 변수 증가와 누적 계산: 반복문 내에서 변수를 하나씩 증가시키면서, 누적 합계를 계산하는 방법을 연습합니다.

4. 0이 입력될 때까지 숫자 입력받기 (while 문 활용)

  • 조건 반복 처리: while 문을 사용하여 사용자로부터 계속해서 입력을 받고, 특정 조건(number != 0)이 만족될 때까지 반복합니다.
  • 사용자 입력 처리와 조건 평가: 사용자로부터 입력받은 값을 즉시 처리하고, 프로그램의 흐름을 사용자 입력에 따라 조절하는 방법을 연습합니다.

오늘 배운 조건문과 반복문을 통해 프로그램의 흐름을 자유자재로 제어할 수 있는 기초를 마련했습니다.

다음 강의에서는 배열과 포인터에 대해 자세히 다룰 예정이니,

이번 강의 내용을 복습하고 연습문제를 풀어보면서 확실하게 이해하시면 좋을 것 같습니다.

Happy coding!

 

https://jdcyber.tistory.com/79

 

C 언어 독학 시리즈 #4: 함수(Function)의 이해와 활용

이번 강의에서는 C 언어의 핵심 요소 중 하나인 함수에 대해 배워보겠습니다.이미 우리는 이전 글에서 변수, 자료형, 연산자, 조건문과 반복문에 대해 학습했으며,이러한 지식을 바탕으로 더 체

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

지금까지 우리는 파이썬의 기본적인 설치 방법,

개발 환경 설정, 기본 명령어와 자료형,

그리고 기본적인 연산과 변수 사용법에 대해 배웠습니다.


못 보신 분들은 아래 글을 순차적으로 읽고 오는 것을 추천드립니다.

파이썬 독학 #1 파이썬 (Python)이란? 설치 (쉬운 설명, 정의, IDLE, IDE, 특징, M1)

파이썬 독학 #2 (쉬운 설명, 개발환경 설정, vscode, 기본 명령어, Hello world)

파이썬 독학 #3 기초 (쉬운 설명, 자료형, 사칙 연산, 인덱싱, 포맷팅, 슬라이싱, 변수)


이번 글에서는 진도를 더 나가는 것은 잠시 쉬어가면서

이러한 기초적인 개념들을 활용하여 간단한 프로그램을 작성하는 방법을 소개하고자 합니다.

이를 통해 여러분이 실제로 코드를 작성하고 실행하는 과정을 경험해 보며,

파이썬 프로그래밍에 대한 이해를 한층 더 깊게 할 수 있을 것입니다.


프로그램 1: 사용자의 이름과 나이를 입력받아 인사하기

 

첫 번째 프로그램에서는 사용자로부터 이름과 나이를 입력받아,

그 정보를 바탕으로 사용자에게 인사하는 간단한 스크립트를 작성해보겠습니다.

이 프로그램은 input 함수를 사용하여 사용자의 입력을 받고,

print 함수와 f-string을 사용하여 사용자에게 인사 메시지를 출력합니다.

# 사용자로부터 이름과 나이 입력받기
name = input("이름을 입력하세요: ")
age = input("나이를 입력하세요: ")

# 입력받은 정보로 인사 메시지 출력하기
print(f"안녕하세요, {name}님! 당신은 {age}살이군요!")
  • 입력: 이름 "홍길동", 나이 "20"
  • 출력: "안녕하세요, 홍길동님! 당신은 20살이군요!"
  • 사용된 함수: input(), print()
  • 설명:
    • input() 함수는 사용자로부터 이름과 나이를 입력받는 데 사용되며, 입력 받은 값을 변수에 저장합니다.
    • print() 함수와 f-string을 사용하여, 저장된 변수를 포함하는 인사 메시지를 화면에 출력합니다.

프로그램 2: 간단한 계산기 만들기

 

두 번째 프로그램에서는 사용자로부터 두 개의 숫자와 수행하고 싶은 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 입력받아

해당 연산의 결과를 출력하는 계산기 프로그램을 만들어보겠습니다.

이 프로그램은 사용자의 입력에 따라 조건문을 사용하여 적절한 연산을 수행하고, 그 결과를 출력합니다.

# 사용자로부터 두 숫자와 연산자 입력받기
num1 = float(input("첫 번째 숫자를 입력하세요: "))
num2 = float(input("두 번째 숫자를 입력하세요: "))
operator = input("연산자를 입력하세요(+, -, *, /): ")

# 입력받은 연산자에 따라 조건문을 사용하여 연산 수행
if operator == '+':
    result = num1 + num2
elif operator == '-':
    result = num1 - num2
elif operator == '*':
    result = num1 * num2
elif operator == '/':
    result = num1 / num2
else:
    print("지원되지 않는 연산자입니다.")

# 연산 결과 출력
print(f"결과: {result}")
  • 입력: "첫 번째 숫자 "10", 두 번째 숫자 "5", 연산자 "+"
  • 출력: "결과: 15.0"
  • 사용된 함수: input(), print()
  • 사용된 개념: 조건문 (if, elif, else), 형변환 (float())
  • 설명:
    • 사용자로부터 숫자와 연산자를 입력받기 위해 input() 함수가 사용됩니다.
    • 입력받은 숫자 문자열을 실수로 변환하기 위해 float() 함수가 사용됩니다.
    • 사용자가 입력한 연산자에 따라 적절한 연산을 수행하기 위해 if 조건문이 사용됩니다.
    • 연산 결과는 print() 함수를 사용하여 출력됩니다.

프로그램 3: 짝수와 홀수 판별기

 

사용자로부터 숫자를 입력받아,

그 숫자가 짝수인지 홀수인지 판별하는 간단한 프로그램입니다.

number = int(input("숫자를 입력하세요: "))

if number % 2 == 0:
    print(f"{number}는 짝수입니다.")
else:
    print(f"{number}는 홀수입니다.")
  • 입력: 숫자 "3"
  • 출력: "3는 홀수입니다."
  • 사용된 함수: input(), print()
  • 사용된 개념: 조건문 (if, else), 형변환 (int())
  • 설명:
    • 사용자로부터 숫자를 입력받기 위해 input() 함수가 사용되며, 이때 입력값은 int()를 사용하여 정수로 변환됩니다.
    • 숫자가 짝수인지 홀수인지 판별하기 위해 if 조건문과 나머지 연산자 %가 사용됩니다.
    • 판별 결과는 print() 함수를 사용하여 출력됩니다.

프로그램 4:간단한 할인율 계산기

 

사용자로부터 상품의 가격과 할인율을 입력받아,

할인된 가격을 계산하는 프로그램입니다.

price = float(input("상품의 원래 가격을 입력하세요: "))
discount = float(input("할인율을 입력하세요(%): "))

discounted_price = price * (1 - discount / 100)

print(f"할인된 가격은 {discounted_price}입니다.")
  • 입력: 상품 가격 "10000", 할인율 "20"
  • 출력: "할인된 가격은 8000.0입니다."
  • 사용된 함수: input(), print()
  • 사용된 개념: 산술 연산, 형변환 (float())
  • 설명:
    • 상품 가격과 할인율을 입력받기 위해 input() 함수가 사용되며, float()를 사용하여 입력값을 실수로 변환합니다.
    • 할인된 가격을 계산하기 위해 산술 연산자 *와 -가 사용됩니다.
    • 계산된 할인된 가격은 print() 함수를 사용하여 출력됩니다.

프로그램 5:간단한 퀴즈 프로그램

 

사용자에게 간단한 퀴즈를 제시하고,

입력받은 답변을 기반으로 점수를 계산하는 프로그램입니다.

score = 0

answer1 = input("파이썬의 창시자는 누구인가요? ")
if answer1.lower() == "귀도 반 로섬":
    score += 1

answer2 = input("파이썬이 처음 발표된 년도는? ")
if answer2 == "1991":
    score += 1

print(f"당신의 점수는 {score}/2입니다.")
  • 입력: 첫 번째 질문의 답 "귀도 반 로섬", 두 번째 질문의 답 "1991"
  • 출력: "당신의 점수는 2/2입니다."
  • 사용된 함수: input(), print()
  • 사용된 개념: 조건문 (if), 문자열 메소드 (lower())
  • 설명:
    • 퀴즈의 답을 입력받기 위해 input() 함수가 사용됩니다.
    • 입력받은 답이 정답과 일치하는지 비교하기 전, 모든 문자를 소문자로 변환하기 위해 lower() 메소드가 사용됩니다.
    • 점수 계산을 위해 조건문 if가 사용되며, 점수는 print() 함수를 사용하여 출력됩니다.

프로그램 6:간단한 ToDo 리스트

 

사용자로부터 할 일 항목들을 입력받아 리스트에 저장하고,

모든 할 일을 출력하는 프로그램입니다.

todo_list = []

while True:
    item = input("할 일을 입력하세요 (종료하려면 q를 입력): ")
    if item == 'q':
        break
    todo_list.append(item)

print("\n당신의 할 일 리스트:")
for item in todo_list:
    print(f"- {item}")
  • 입력: 할 일 항목들 "코딩 공부하기", "운동하기"
  • 출력: 당신의 할 일 리스트: - 코딩 공부하기 - 운동하기
  • 사용된 함수: input(), print()
  • 사용된 개념: 반복문 (while), 리스트 (list)
  • 설명:
    • 할 일 항목을 입력받기 위해 input() 함수와 while 반복문이 사용됩니다.
    • 입력받은 항목들은 리스트에 추가되며, list.append() 메소드가 사용됩니다.
    • 모든 할 일 항목들은 반복문을 사용하여 print() 함수로 출력됩니다.

프로그램 7:기온 변화기

 

섭씨온도를 화씨온도로 변환하는 간단한 프로그램입니다.

celsius = float(input("섭씨 온도를 입력하세요: "))
fahrenheit = (celsius * 9/5) + 32

print(f"화씨 온도는 {fahrenheit}입니다.")
  • 입력: 섭씨 온도 "25"
  • 출력: "화씨 온도는 77.0입니다."
  • 사용된 함수: input(), print()
  • 사용된 개념: 산술 연산, 형변환 (float())
  • 설명:
    • 섭씨 온도를 입력받기 위해 input() 함수가 사용되며, float()를 사용하여 입력값을 실수로 변환합니다.
    • 화씨 온도로 변환하기 위해 산술 연산이 수행되며, 변환된 온도는 print() 함수를 사용하여 출력됩니다.

이번 시간에는 파이썬의 기초 개념을 활용해 간단한 프로그램들을 작성하는 방법을 살펴보았습니다.

사용자 입력을 받는 input() 함수부터 조건문과 반복문,

그리고 기본적인 데이터 구조인 리스트까지,

이러한 개념들은 파이썬 프로그래밍의 기본을 이룹니다.

각 예제를 통해 이 개념들이 실제 코드에서 어떻게 활용되는지를 보여드렸으며,

이를 통해 여러분의 파이썬 실력이 한층 더 성장하기를 바랍니다.

 

파이썬 학습은 연습을 통해 더욱 발전할 수 있습니다.

오늘 배운 내용을 바탕으로 자신만의 작은 프로젝트를 시작해 보거나,

다양한 예제를 직접 코드로 작성해 보며 이해도를 높여가시길 권장합니다.

또한, 문제를 해결하면서 마주치는 오류나 난관들도 학습의 중요한 부분임을 잊지 마세요.

오류를 해결하는 과정에서 프로그래밍 실력은 크게 성장합니다.

 

다음 시간에는 파이썬의 더 심화된 주제나,

여러분이 실제로 활용할 수 있는 더 다양한 프로그래밍 기법을 다룰 예정입니다.

지금까지 배운 기초가 튼튼하다면,

앞으로 배울 내용들을 더 쉽게 이해하고 자신의 것으로 만들 수 있을 겁니다.

계속해서 호기심을 갖고,

새로운 것을 배우려는 자세를 유지해 주세요.

그럼 다음 시간에 또 만나요.

Happy Python Programming!
https://jdcyber.tistory.com/70

 

파이썬 독학 #5: 데이터 구조 마스터하기 - 튜플, 딕셔너리, 집합

지금까지 우리는 파이썬의 기본적인 설치 방법, 개발 환경 설정, 기본 명령어와 자료형, 그리고 기본적인 연산과 변수 사용법에 대해 배우고,해당 내용을 응용하여 간단한 프로그램 작성까지 해

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

 

이번 시간에는 C언어의 기초 중 기초인 변수, 자료형, 연산자에 대해 알아보고,

기본적인 입출력 방법과 함께 간단한 실습 예제를 통해 실력을 쌓아보겠습니다.

언어독학 시리즈 1편을 아직 안 보신 분은 아래 링크를 참고해 주세요!


"C언어를 배우는 것은 마치 산을 오르는 것과 같다.

정상에 오를 때까지는 힘들고 도전적이지만, 정상에 서면 전에 보지 못했던 경치와 가능성을 볼 수 있다."

 

우리는 어떤 프로그래밍 언어를 배워야 할까요?

각 언어의 특징을 모르시는 분들은

아래 글을 먼저 읽고 와주시기 바랍니다.

https://jdcyber.tistory.com/13

 

개발자 입문부터 풀스택까지 로드맵 (공부 순서를 어떻게 해야 하나요?)

앞서 2가지 프로그래밍 언어를 소개하는 글을 통해서 어떤 프로그래밍 언어를 배워야 하는지 그 프로그래밍 언어는 어떤 것에 특화가 되어있고 목표로 잡은 것이 어떤 것이냐에 따라 달라진다

jdcyber.tistory.com


변수와 자료형

프로그래밍에서 변수란 데이터를 저장하는 공간입니다.

C언어에서는 변수를 사용하기 전에 그 변수의 타입(자료형)을 명시해야 합니다.

자료형에는 여러 종류가 있는데, 대표적으로 int (정수), float (실수), char (문자) 등이 있습니다.

프로그래밍에서 변수를 생각해볼 때, 우리는 그것을 데이터를 보관할 수 있는 상자로 비유할 수 있습니다.
마치 집에서 다양한 물건들을 보관하기 위해 서로 다른 크기와 형태의 상자들을 사용하는 것처럼,
프로그래밍에서도 데이터를 저장하기 위해 변수라는 '상자'를 사용합니다.
C언어에서는 이 상자(변수)에 무엇을 담을지 결정하기 전에, 그 상자의 유형(자료형)을 명확히 해야 합니다.
이는 마치 우리가 물건을 담기 전에, 옷을 담을지, 책을 담을지, 신발을 담을지 상자의 용도를 정하는 것과 비슷합니다.
자료형이라는 것은, 단순히 상자의 크기나 모양을 정하는 것이 아니라,
그 안에 담길 '데이터의 종류'를 정하는 것입니다.
예를 들어, 'int'는 정수를 저장하는 상자로, 1, 2, 100과 같은 정수들을 보관할 때 사용합니다.
'float'는 소수점이 있는 숫자, 예를 들어 3.14나 0.5 같은 실수를 저장할 때 쓰이는 상자입니다.
'char'는 문자를 저장할 때 사용하는 상자로, 'A', 'b', '3' 같은 단일 문자를 보관하는 데 적합합니다.

이처럼 프로그래밍에서 변수와 자료형을 사용하는 것은,
우리가 일상에서 다양한 물건들을 보관하고 관리하기 위해 적절한 상자를 선택하는 과정과 매우 유사합니다.

 


변수란?
변수는 데이터를 저장하기 위한 공간의 이름입니다.
프로그램에서는 이 변수를 통해 데이터를 저장하고, 저장된 데이터를 추후에 참조하거나 변경할 수 있습니다.
간단히 말해서, 변수는 데이터를 담는 컨테이너라고 할 수 있습니다.
자료형이란?
자료형(Data Type)은 변수에 저장될 데이터의 종류를 정의합니다.
자료형에는 크게 기본 자료형과 파생 자료형이 있으며, 기본 자료형에는 정수형, 실수형, 문자형 등이 포함됩니다.
자료형은 프로그램이 효율적으로 데이터를 처리할 수 있도록 도와주며, 메모리 사용을 최적화하는 역할도 합니다.

 

변수 선언
변수 선언이란 프로그램에게 변수를 사용하기 위한 준비를 지시하는 것입니다. 변수 선언 시에는 변수의 이름과 자료형을 명시해야 합니다. 이 과정에서 변수에 저장될 데이터의 유형을 결정하게 되며, 이를 통해 컴파일러는 해당 변수에 메모리를 할당합니다.

 

변수 선언 방법

정수형 (int): 정수 값을 저장하는 데 사용됩니다. 예: int age = 30;
실수형 (float, double): 소수점을 포함하는 값을 저장하는 데 사용됩니다. 예: float salary = 4567.89;
문자형 (char): 단일 문자를 저장하는 데 사용됩니다. 예: char grade = 'A';

 

변수 선언 예제

int count; // 정수형 변수 count 선언
float temperature; // 실수형 변수 temperature 선언
char initial; // 문자형 변수 initial 선언

 

변수를 선언하는 동시에 초기값을 할당할 수도 있습니다. 초기값을 할당하는 것을 초기화라고 합니다.

int count = 10; // 정수형 변수 count를 선언하고 10으로 초기화
float temperature = 36.5; // 실수형 변수 temperature를 선언하고 36.5로 초기화
char initial = 'J'; // 문자형 변수 initial을 선언하고 'J'로 초기화

 

변수 이름 규칙

변수 이름을 지을 때는 다음과 같은 규칙을 따라야 합니다:

문자, 숫자, 밑줄 문자(_)를 포함할 수 있지만, 숫자로 시작할 수는 없습니다.

대소문자를 구분합니다. 예를 들어, age와 Age는 서로 다른 변수입니다.

예약어(키워드)를 사용할 수 없습니다. 예: int, return 등


연산자

연산자는 데이터를 가공하기 위한 기호입니다. C언어에서는 다양한 연산자를 제공하는데,

이를 적절히 활용하여 데이터를 처리할 수 있습니다.

대표적인 연산자로는 산술 연산자(+, -, *, /, %), 관계 연산자(==, !=, >, <, >=, <=),

논리 연산자(&&, ||, !) 등이 있습니다.


아래 예제들은 각각의 연산자가 어떻게 작동하는지 기본적인 이해를 돕기 위한 것입니다.

프로그래밍을 하면서 이러한 연산자들을 조합하고 응용하여 다양한 문제를 해결할 수 있습니다.

 

산술 연산자

산술 연산자는 수학적 계산을 위해 사용됩니다.

가장 기본적인 산술 연산자에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)가 있습니다.

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    int result;

    result = a + b;
    printf("a + b = %d\n", result);

    result = a - b;
    printf("a - b = %d\n", result);

    result = a * b;
    printf("a * b = %d\n", result);

    result = a / b;
    printf("a / b = %d\n", result);

관계 연산자

관계 연산자는 두 값을 비교하는 데 사용됩니다.

여기에는 같음(==), 다름(!=), 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=) 등이 있습니다.

#include <stdio.h>

int main() {
    int a = 5, b = 10;

    printf("a == b: %d\n", a == b);
    printf("a != b: %d\n", a != b);
    printf("a > b: %d\n", a > b);
    printf("a < b: %d\n", a < b);
    printf("a >= b: %d\n", a >= b);
    printf("a <= b: %d\n", a <= b);

    return 0;
}

 


논리 연산자

논리 연산자는 논리적인 조합을 평가하는 데 사용됩니다.

주요 논리 연산자로는 논리적 AND(&&), 논리적 OR(||), 논리적 NOT(!)이 있습니다.

#include <stdio.h>

int main() {
    int a = 1, b = 0;

    printf("a && b: %d\n", a && b);
    printf("a || b: %d\n", a || b);
    printf("!a: %d\n", !a);
    printf("!b: %d\n", !b);

    return 0;
}

기본 입출력

C언어에서는 printf와 scanf 함수를 통해 기본적인 입출력을 수행할 수 있습니다.

printf 함수는 데이터를 화면에 출력하고, scanf 함수는 사용자로부터 입력을 받습니다.

#include <stdio.h>

int main() {
    int number;
    printf("숫자를 입력하세요: ");
    scanf("%d", &number); // 사용자로부터 정수 입력 받기
    printf("입력한 숫자는 %d입니다.\n", number);
    return 0;
}

실습 예제: 기본적인 계산기 만들기
이제 배운 내용을 토대로 간단한 계산기를 만들어 보겠습니다. 이 계산기는 두 개의 정수를 입력받아 더하기, 빼기, 곱하기, 나누기의 결과를 보여줍니다.
#include <stdio.h>

int main() {
    int num1, num2;
    printf("첫 번째 숫자를 입력하세요: ");
    scanf("%d", &num1);
    printf("두 번째 숫자를 입력하세요: ");
    scanf("%d", &num2);

    printf("%d + %d = %d\n", num1, num2, num1 + num2);
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
    printf("%d * %d = %d\n", num1, num2, num1 * num2);
    printf("%d / %d = %d\n", num1, num2, num1 / num2);

    return 0;
}

 

위 예제를 통해 변수, 자료형, 연산자, 기본 입출력을 실습해 보았습니다.

프로그래밍은 배운 내용을 직접 코딩하며 익히는 것이 가장 중요합니다.

다양한 예제를 통해 지속적으로 연습해 보세요.


오늘 우리는 C언어의 기초적인 개념들을 함께 배워보았습니다.

우선, 변수와 자료형의 정의와 중요성을 이해하고,

다양한 자료형(int, float, char 등)을 사용해 변수를 선언하는 방법을 배웠습니다.

이러한 기초를 바탕으로, 프로그램 내에서 데이터를 저장하고 조작하는 방법을 익혔습니다.

또한, 산술 연산자, 관계 연산자, 논리 연산자 등

다양한 연산자들을 통해 데이터를 계산하고 비교하는 방법에 대해서도 살펴보았습니다.

각 연산자의 사용법과 예제를 통해, 프로그램 내에서의 데이터 처리와

조건문 작성에 필요한 기본적인 논리를 구축할 수 있는 기반을 마련했습니다.

 

프로그래밍 학습은 마치 건물을 짓는 것과 같습니다.

오늘 우리가 다룬 변수와 자료형, 연산자는 튼튼한 기초를 마련하는 첫걸음입니다.

이 기초 위에 더 복잡한 로직을 구축하고, 다양한 프로그래밍 문제를 해결하는 능력을 키워갈 수 있을 것입니다.

이해가 바로 되지 않는 부분이 있다면, 걱정하지 마시고 여러 번 반복해서 연습해 보세요.

프로그래밍은 이론적인 지식보다 실제로 코드를 작성해 보며 배우는 것이 훨씬 효과적입니다.

오늘 배운 내용을 잘 정리해 보시고,

앞으로 배울 조건문, 반복문 등 더 다양한 개념들에도 도전해 보시기 바랍니다.

항상 기억하세요, 프로그래밍 능력은 하루아침에 갑자기 향상되지 않습니다.

꾸준한 학습과 연습을 통해 점차 발전해 나갈 수 있습니다.

오늘 배운 기초가 여러분이 더 큰 프로그래밍 세계로 나아가는 데 있어 든든한 발판이 되기를 바랍니다.

Happy coding!
C언어 독학 #3 (조건문과 반복문, 조건문과 반복문을 이용한 실습 예제)

 

C언어 독학 #3 (조건문과 반복문, 조건문과 반복문을 이용한 실습 예제)

이번 강의에서는 C언어의 핵심 구조 중 하나인 조건문과 반복문에 대해 배워보겠습니다.이미 우리는 이전 글에서 변수, 자료형, 연산자에 대해 배웠으며,이러한 지식을 바탕으로 프로그램의 흐

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

ACL 접근 제어 목록

(Access Control List)

허가되지 않은 이용자가 라우터나 네트워크의

특정 자원에 접근하려고 하는 것을 차단하는 기능입니다.

첫 번째 두 번째 실습에 이어 세 번째 시간입니다.

 

이 실습에서는 ACL (Access Control List)을 사용하여 특정 네트워크 트래픽을 필터링하는 방법을 다룹니다.

목표는 불필요하거나 위험한 접근을 제한하여 네트워크 보안을 강화함에 있습니다.

ACL에 대한 자세한 개념은

아래 글을 참고해 주세요!

https://jdcyber.tistory.com/17

 

ACL (Access Control List) 이란? ACL 구성 가이드: 네트워크 보안 강화를 위한 필수 지침 (쉬운 설명, 예

ACL (Access Control List) 정의 및 개념 ACL (Access Control List) 은 네트워크 보안의 핵심 구성 요소로, 네트워크 장비에서 데이터 패킷의 흐름을 제어하는 데 사용되는 일련의 지침입니다. 이 규칙들은 특

jdcyber.tistory.com

 

 

(패킷 트레이서 예제 파일은 본 글에 첨부해 놨습니다.)

1번 조건

R1, R2, R3
각각의 내부 네트워크에서는 www.ilbe.com, www.toto24.com으로 접근되지 않도록 차단하여라.
 

2번 조건

R1
13.13.20.0/24, 13.13.30.0/24 네트워크만 '13.13.10.100' 웹, FTP 접근이 가능하도록 하여라.
'13.13.10.100'으로 접근하는 모든 ICMP는 차단하여라.
단, '13.13.10.100'은 '13.13.20.0/24', '13.13.30.0/24'로 Ping이 되어야 한다.
 

명령어

conf t
(각각의 내부 네트워크에서는 www.ilbe.com, www.toto24.com으로 접근되지 않도록 차단)
access-list 110 deny ip 13.13.10.0 0.0.255.255 host 141.101.121.208
access-list 110 deny ip 13.13.10.0 0.0.255.255 host 81.150.200.78
access-list 110 permit ip any any
!
int fa0/0
ip access -group 110 int
!
(13.13.20.0/24, 13.13.30.0/24 네트워크만 '13.13.10.100' 웹, FTP 접근이 가능도록 설정)
('13.13.10.100'으로 접근하는 모든 ICMP는 차단 단, '13.13.10.100'은 '13.13.20.0/24', '13.13.30.0/24'로 Ping 가능하도록 설정)
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 eq 80
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 eq 443
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 range 20 21
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 eq 80
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 eq 443
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 range 20 21
access-list 120 deny tcp any host 13.13.10.100 eq80
access-list 120 deny tcp any host 13.13.10.100 eq443
access-list 120 deny tcp any host 13.13.10.100 range 20 21
access-list 120 permit icmp 13.13.20.0 0.0.0.255 host 13.13.10.100 echo-reply
access-list 120 permit icmp 13.13.30.0 0.0.0.255 host 13.13.10.100 echo-reply
access-list 120 deny icmp any host 13.13.10.100
access-list 120 permit ip any any
!
int s0/0/0
ip access-group 120 in
 

확인

show ip access-lists

신중한 IP 주소 및 서비스 선정
  • 정밀한 대상 지정: ACL을 설정할 때, 차단하거나 허용해야 하는 특정 IP 주소, 네트워크, 또는 서비스(웹, FTP, ICMP 등)를 명확히 식별해야 합니다. 이는 불필요한 접근을 정확히 차단하고, 필요한 트래픽은 원활하게 통과시키는 데 중요합니다.
최소 권한 원칙 적용
  • 필요한 최소한의 접근만 허용: 네트워크 보안에서는 항상 최소 권한 원칙(Principle of Least Privilege)을 적용해야 합니다. 이는 사용자나 시스템이 자신의 업무를 수행하는 데 필요한 최소한의 권한만을 가지도록 하는 것입니다. ACL 설정 시, 이 원칙에 따라 필수적인 접근만 허용하고 나머지는 기본적으로 차단하는 방식을 채택해야 합니다.
서비스별 포트 번호 인식
  • 적절한 포트 사용: 웹(HTTP, HTTPS)이나 FTP 서비스에 대한 접근을 허용하거나 차단할 때, 각 서비스의 표준 포트 번호(예: HTTP는 80, HTTPS는 443, FTP는 20과 21)를 정확히 지정해야 합니다. 잘못된 포트 번호 설정은 의도하지 않은 서비스 접근을 허용하거나 차단할 수 있습니다.
정책 구현 후 검증
  • 설정 후 검증: ACL을 구성한 후에는 show ip access-lists 명령어를 사용하여 설정된 규칙을 검토하고, 실제 네트워크 트래픽이 의도한 대로 필터링되는지 확인해야 합니다. 또한, 허용된 접근과 차단된 접근 모두를 테스트하여 ACL이 정상적으로 작동하는지 검증해야 합니다.
문서화 및 지속적 관리
  • 구성 문서화: ACL 설정을 문서화하여 관리하면 나중에 네트워크 변경이나 문제 해결 시 큰 도움이 됩니다. 구성 변경 사항을 기록해 두면, 미래의 보안 감사나 네트워크 개선 작업에 유용한 참고 자료가 됩니다.
  • 지속적인 업데이트와 관리: 네트워크 환경은 지속적으로 변화하므로, ACL도 새로운 보안 위협, 변경된 네트워크 구성, 새로운 서비스 요구 사항에 맞게 주기적으로 검토하고 업데이트해야 합니다.

ACL 실습을 진행할 때, 위의 지침들을 철저히 따르는 것이 중요합니다.

이를 통해 네트워크 보안을 강화하고, 불필요한 접근을 효과적으로 차단할 수 있습니다.

또한, 실습 과정에서 발생할 수 있는 다양한 문제를 예방하고, 보안 정책을 효과적으로 구현할 수 있습니다.


 

패킷 트레이서 예제 파일


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형

+ Recent posts