Hayden's Archive

[C언어] C언어 입문 관련 코드 본문

Study/ETC

[C언어] C언어 입문 관련 코드

_hayden 2020. 7. 25. 11:36

https://www.edwith.org/boostcourse-cs-050

 

[부스트코스] 모두를 위한 컴퓨터 과학 (CS50 2019) 강좌소개 : edwith

- 부스트코스

www.edwith.org

 

요즘 하버드대학교 2019 CS50 강의를 듣고 있다. 이 강의는 컴퓨터 사이언스의 기본기를 다질 수 있는 명강의로 알려져 있는데 통학시간을 활용해서 재미있게 듣고 있다. 이 강의는 C 언어로 진행된다. C 언어는 2년 전에 잠깐 기초적인 부분만 배웠던 적이 있는데, 아무래도 C 언어보다는 자바, 파이썬을 훨씬 많이 사용해서 그 쪽이 더 손에 익다. 하지만 C 언어는 컴퓨터 과학의 뿌리가 되는 언어이기에, 비록 지금은 이외에도 할 일이 많고 배울 것도 많으니까 가볍게 배우고 있지만, 언젠간 C++과 함께 제대로 공부해보고 싶다. 어차피 개발자는 한 언어만 하면서 살 수 없고, 패러다임이 바뀌고 새롭게 요구되는 언어가 등장한다면 그 언어도 할 줄 알아야 한다. 결국 문법만 약간씩 다를 뿐 프로그래밍의 원리는 어느 언어든 같다. 

각설하고, 예전에 C언어를 배웠을 때 IDE로 Visual Studio를 사용했었다. Visual Studio를 설치할까 하다가 일단은 강의에서 사용하는 CS50 Sandbox( https://sandbox.cs50.io/  )를 사용하기로 했다. 이 툴은 클라우드 환경에서도 가볍게 쓸 수 있는 점이 유익하다.

이번 코드에서는 강의에서 나온 CS50 라이브러리를 함께 사용했다.

 

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

int main(void)
{
    int remain = 5; //재고
    int count = 0; //주문건수
    int sales = 0; //매출액
    while(true){
        if(remain==0){
            printf("품절되었습니다\n");
            break;
        }
        printf("====================================\n");
        int order = get_int("주문할 수박의 개수를 입력하세요(현재 재고 %d개) : ", remain);
        if(order<=0){
            printf("개수를 바르게 입력하세요\n");
        }
        else if(remain < order){
            printf("재고가 부족합니다.\n");
        }
        else{
            count++; 
            sales += order*10000*0.9;
            printf("주문건수 : %d건\n", count);
            printf("기존 재고량 : %d개\n", remain);
            remain -= order;
            printf("남은 재고량 : %d개\n", remain);
            printf("매출액(부가세포함) : %d원\n", sales);
        }
    }
}

 


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

int main(void)
{
    int deposit = get_int("예금액을 입력하세요 : ");
    printf("원금 : %d원\n", deposit);
    printf("1년 뒤 이자 : %0.1f원\n", deposit*0.012);
    printf("만기시 받게 될 총 금액 : %0.1f원\n", deposit*1.012);
}

 


자바의 Map 방식처럼 key와 value를 받는 자료형을 찾아서 쓸까 생각도 해보고 배열을 사용해볼까 생각도 해봤지만, 일단 CS50 해당 주차에 나왔던 내용으로 코드를 작성했다. 그렇다 보니 자연스럽게 조건문으로 쓰게 되었다. 바로 switch~case문을 떠올렸지만 C에서는 자바와 달리 case문 인자값으로 문자열을 받을 수 없다.(자바도 낮은 버전에서는 문자열을 받을 수 없는 걸로 안다) 그래서 if문을 쓰게 되었고, C 표준 라이브러리를 찾아서 string.h에 있는 strcmp로 문자열을 비교했다.

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

int main(void)
{
    string day = get_string("요일을 입력하세요:");
    if(strcmp(day, "월요일")==0){
        printf("월요일 : 청국장\n");
    }else if(strcmp(day, "화요일")==0){
        printf("화요일 : 비빔밥\n");
    }else if(strcmp(day, "수요일")==0){
        printf("수요일 : 된장찌개\n");
    }else if(strcmp(day, "목요일")==0){
        printf("목요일 : 칼국수\n");
    }else if(strcmp(day, "금요일")==0){
        printf("금요일 : 냉면\n");
    }else if(strcmp(day, "토요일")==0){
        printf("토요일 : 소불고기\n");
    }else if(strcmp(day, "일요일")==0){
        printf("일요일 : 오삼불고기\n");
    }
}