부스트코스 CS50 코칭스터디2기 2주차

승아·2021년 1월 24일
0

CS50 코칭스터디2기

목록 보기
2/6

C언어

컴파일러

우리가 직접 작성한 코드는 "소스 코드"라고 불립니다. 이를 2진수로 작성된 "머신 코드"로 변환해야 컴퓨터가 이해할 수 있습니다. 이런 작업을 컴파일러라는 프로그램이 수행해줍니다.

소스 코드 -> << 컴파일러 >> -> 머신코드

샌드박스 명령어

$ clang hello.c

clang이라는 컴파일러로 hello.c라는 코드를 컴파일하라는 의미. 그 결과 a.out이라는 파일 생성

$ ./a.out

./ 명령어를 통해 a.out 프로그램 실행 (./에서 .은 현재 폴더를 나타냄)

$ clang -o string string.c -lcs50

여기서 -o string은 string.c를 string.out이라는 머신코드로 저장하도록 하는 명령어 -lcs50은 "link"라는 의미를 지닌 -l이라는 인자에 우리가 추가로 포함한 "cs50"파일을 합친 것. 이를 통해 컴파일시 cs50 파일을 연결하도록 알려줄 수 있다.

다소 복잡한 이런 과정 대신에, 아래 make 명령어를 통해 간단하게 컴파일을 수행할 수도 있다.

$ make string

CS50 라이브러리 내의 get 함수

  • get_char
  • get_double
  • get_float
  • get_int
  • get_long
  • get_string

형식 지정자

  • %c : char
  • %f : float,double
  • %i : int
  • %li : long
  • %s : string

오버플로우

그릇 사이즈는 한계가 있는데 그 한계를 넘어버릴 때 나타나는 문제.

팀미션 👩🏻‍💻

1. 재고량과 매출액을 구하는 문제

의사 코드
1 주문건수를 입력받는다
2 기존 재고량에서 주문 건수를 빼 남은 재고량을 구한다
3 남은 재고량이 0보다 작으면
4 남은 재고량에 맞게 입력해주세요를 출력한다
5 그렇지 않으면
6 수박가격에 부가세를 더한 값에 주문 건수를 곱한 후 기존의 매출액에 현재 매출액을 더한다
7 기존 재고량을 남은재고량으로 초기화한다
8 남은 재고량이 0 보다 크다면
9 1번째 줄로 돌아간다
10 그렇지 않으면
11 종료한다

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

// 주문시 재고를 감소시켜준다.
int order(int product, int count){
	product = product - count;
	return product;
}

// 판매량을 계산한다.
int getSalesRate(int price, int count){
	return price*count;	
}

// 부가가치세를 계산한다.
int getTax(int amount){
	return amount / 10;
}

// 오늘 하루 총 매출량에 대한 정보를 프린트해준다.
void printTodayCalculate(int orderCount, int originalCount, int afterOrderCount, int amount){
    printf("---------------------------------\n");
    printf("주문 건수 : %i\n", orderCount);
    printf("기존 재고량 : %i\n", originalCount);
    printf("남은 재고량 : %i\n", afterOrderCount);
    printf("매출액(부가세 포함): %i\n", amount);
    printf("---------------------------------\n");
    
    if(afterOrderCount == 0){
        printf("********************\n");
        printf("**** sold out ! ****\n");
        printf("********************\n");
    }
}

// 남은 재고량과 주문량을 비교하여 주문 가능한지 확인한다
bool validOrderCount(int remainStock, int orderCount){
	if(remainStock < orderCount) return true;
	else return false;
}

int main(void){
	int originalStock = 5;
	int watermelonePrice = 10000;
	int orderCount;
	int amount;
	int tax;
    int totalPrice = 0;
	int remainStock = originalStock;

	while(remainStock > 0){
        orderCount = get_int("주문시킬 양을 입력해주세요 : ");
		if(validOrderCount(remainStock, orderCount)){
			printf("주문량이 재고보다 많습니다 . 다시 주문해주세요 :  ");
			
		}else{
			remainStock = order(originalStock, orderCount);
			amount = getSalesRate(watermelonePrice, orderCount);
			tax = getTax(amount);
            totalPrice += amount + tax;
            printTodayCalculate(orderCount, originalStock, remainStock, totalPrice);
            originalStock = remainStock;
		}
	}
	
	return 0;
}

2. 예금액을 구하는 문제

의사 코드
1 예금할 금액을 입력받는다
2 예금할 금액과 예금할 금액에 1.2를 곱한값을 출력한다
3 종료한다

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

int main(void)
{
    double myMoney = get_double("예금할 금액 : ");
    double totalMoney = myMoney * 12;
    printf("매달 %0.f원씩 1년 동안 저금할 경우 받게 되는 금액은 %0.f원 입니다.\n", myMoney, totalMoney * 1.2 );
}

3. 요일별 메뉴를 출력하는 문제

의사 코드
1 요일을 입력받는다
2 만약 요일이 월요일이라면
3 월요일 : 청국장을 출력한다
4 그렇지 않고 요일이 화요일이라면
5 화요일 : 비빔밥을 출력한다
6 그렇지 않고 요일이 수요일이라면
7 수요일 : 된장찌개를 출력한다
8 그렇지 않고 요일이 목요일이라면
9 목요일 : 칼국수를 출력한다
10 그렇지 않고 요일이 금요일이라면
11 금요일 : 냉면을 출력한다
12 그렇지 않고 요일이 토요일이라면
13 토요일 : 소불고기를 출력한다
14 그렇지 않고 요일이 일요일이라면
15 일요일 : 오삼불고기를 출력한다
16 종료한다

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

int main(void)
{
    string answer = get_string("요일을 입력하세요 : ");

    if(strcmp(answer, "월요일") == 0){
        printf("월요일 : 청국장\n");
    }
    else if(strcmp(answer, "화요일") == 0 ){
        printf("화요일 : 비빔밥\n");
    }
    else if(strcmp(answer, "수요일") == 0){
        printf("수요일 : 된장찌개\n");
    }
    else if(strcmp(answer, "목요일") == 0){
        printf("목요일 : 칼국수\n");
    }
    else if(strcmp(answer, "금요일") == 0){
        printf("금요일 : 냉면\n");
    }
    else if(strcmp(answer, "토요일") == 0){
        printf("토요일 : 소불고기\n");
    }
    else{
        printf("일요일 : 오삼불고기\n");
    }
}

회고 ✍🏻

우리 팀은 각자의 코드를 올리면 팀원들이 리뷰해주는 방식으로 진행해보았다. 나의 코드에 대한 리뷰는 "함수를 사용해 가독성을 확보할 것"이었다. 사실 간단한 코드를 짤 때 함수를 굳이 사용해야 되나 라는 의문이 들었지만 함수를 사용한 팀원들의 코드를 보니 함수를 왜 사용해야되는지 한 눈에 알 수 있었다. 함수와 주석처리를 사용한 팀원들의 코드는 확실히 깔끔하고 이해하기 쉬웠다. 나의 코드를 나만 보는게 아니기 때문에 팀원들의 이해를 위해 함수 사용을 생활화하여 가독성과 효율성을 높이는 연습을 해야겠다.

0개의 댓글

관련 채용 정보