본문 바로가기
기획자 댜니의 뒤처지지 않기/컴퓨팅 사고력

부스트코스 CS50 | 2주차 C언어 학습 기록

by 알 수 없는 사용자 2021. 1. 30.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

지난주에 2주차 학습을 정리 못해서 이번주에 급하게 올립니다. 지난주엔 C언어를 공부했는데 상상했던것보단 그렇게 언어가 엄청 어려운 편은 아니였습니다. (제가 파이썬 기초를 이미 뗀 상태여서 그런걸까요? ㅎ)

 

이전과 동일하게 강의를 수강하고 그에 맞춘 팀미션을 진행했습니다. 2주차부터 본격적으로 코딩을 하는데 코치님이 말씀하신 손근육이 코드를 기억하게끔 연습에 매진하려고 합니다. 익숙해지면 그만큼 다른 문제가 다가올때 더 잘 대처할 수 있게 될 거라 생각합니다.

 

지금은 코칭스터디 2기 모집이 끝났지만 부스트코스에서 CS50 컴퓨터 과학 외의 다양한 IT 강의를 무료로 들을 수 있으니 관심 있으신 분들은 아래 링크를 클릭해주세요!

www.boostcourse.org/

CS50 컴퓨터 과학 학습 기록


1. 오늘 새로 알게된 내용

컴파일러

  • 우리가 직접 작성한 코드인 “소스 코드” 를 2진수로 작성된 “머신 코드”로 변환하여 컴퓨터가 이해할 수 있게 해주는 프로그램
  • $clang hello.c : C언어로 작성된 hello.c 소스코드를 컴퓨터가 이해할 수 있는 머신코드로 컴파일하기 위한 명령어

사용자 지정 함수

  • C언어에서 하단에 사용자 지정 함수를 작성하고 메인 함수에 사용하려면, 파일 상단에 코드를 정의해야 한다.

오버플로우

  • 변수가 담을 수 있는 최대 허용 범위를 벗어난 값을 저장해 예상치 못한 결과가 나오는 현상

2. 공부를 하며 고민한 내용

팀미션으로 C언어로 '재고 관리 프로그램'을 구현하는 미션을 선택하였다. 문제에선 재고량과 매출액을 구하고 '주문건수, 기존 재고량, 남은 재고량, 매출액(부가세포함)'을 구하는 것까지 요구하였지만, 나는 거기서 더 발전하여 '재고가 모두 소진 될 때까지 주문할 수 있는 프로그램'을 작성했다.

 

코딩을 하기 전에 나는 다음과 같은 사항을 먼저 고려했다.

  1. 결과로 화면에 무엇이 나타나야 하는지
  2. 문제에서 주어진 인자가 무엇인지
  3. 구하고자 하는 값을 구할려면 어떤 방식을 취해야하는지 (의사코드 작성)

작성한 코드:

#include <stdio.h>
#include <cs50.h>

int main(void) {
    int stock = 8; // 기존 재고량
    int price = 10000; // 가격
    int sales = 0; // 초기 판매량
    int revenue = 0; // 초기 매출액
     
    while(stock > 0)    //재고가 0이 될때까지 계속 주문
    {
        int order = get_int(">> 주문건수를 입력해주세요.\n"); // 주문 건수 입력
        
        if (order <= stock) {   //주문건수가 재고량보다 작거나 같은 경우
            stock = stock - order; // 남은 재고량
            sales = sales + order; // 현재까지 판매량
            revenue = order * price * 1.1; // 매출액

            printf("\n주문건수 : %i건\n", order);
            printf("기존 재고량 : %i개\n", stock + order);
            printf("남은 재고량 : %i개\n", stock);
            printf("현재까지 판매량: %i개\n", sales);
            printf("총매출액(부가세포함) : %.0f원\n\n", sales * price * 1.1);
        } else {    //주문건수가 재고량보다 많은 경우
            printf("\n재고가 부족하여 주문할 수 없습니다.\n");
            printf("현재 재고량 : %i\n\n", stock);
        }
    }
    printf("재고가 모두 소진되어 프로그램을 종료합니다.");
}

 

코드 실행 결과:

 

참고: 다른 사람들은 scanf()함수를 쓰기에 팀원에게 물어보니, scanf() 함수는 C언어의 표준 입력 함수이며 cs50강의에서는 scanf대신 cs50.h라이브러리의 get_int함수를 만들어서 사용하는 것이라 답변을 주었다.


3. 도움이 될 만한 내용, 자료

<2021년 1월 TIOBE Index순위>

네덜란드 소프트웨어 품질 보증 업체 티오베(TIOBE)에서 전세계 전문 엔지니어와 세계 주요 검색엔진의 서드파티 공급업체 등의 평가를 기준으로 프로그래밍 언ㅇ어 인기도를 조사한 결과, 2021년 1월엔 C언어가 1위를 차지하고 있다.


4. 회고

지금까지 코딩을 배울때 책이나 유튜브 강의를 보고 따라하는 경우가 많았는데, 이번 CS50강의를 들으면서 만들고 싶은 프로그램의 의사코드를 작성하고 그에 맞춘 코딩을 진행하면서, 점점 컴퓨터 사고력이 무엇인지 깨달아 가는 느낌이 들었다.

 

프로그램을 기획할 때 나는 주로 사용자가 필요한 기능과 경험에 맞춰 화면을 설계하고 기능을 정의하곤 했는데, 내 기획서를 보고 개발자들이 이렇게 코딩을 하는걸까 하는 생각이 들었다. (기회가 되면 물어봐야 겠다.)

 

라이브강의를 들으면서 정말 많은 학생들이 개발자가 되고 싶어하는 것을 깨달았다. 이 강의가 C언어를 배우기 위한 강의가 아닌 '컴퓨팅 사고력 기르기'가 목적이라는 것을 학생들도 알았으면 좋겠다. C언어가 나오니 덜컥 겁을 내는 학생이 많이 보여 안타깝다. 강의를 들어보면 C언어를 기반으로 '프로그래밍'을 설명한다는 것에 초점이 맞춰져있다.

댓글