CS50 스터디 미션 2, 3주차 문제풀이

4 minute read

2주차 팀미션 (C언어 기초)

문제 1

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

int in_order(void);
int ch_stock(int x);

int main(void)
{
    int o = in_order();
    int s = ch_stock(5);
    float p = 10000;
    float op = o*p;
    float t = op*(10/100);

    printf("주문건수 : %i 건\n", o);
    printf("기존 재고량 : %i 개\n", s);
    printf("남은 재고량 : %i 개\n", s-o);
    printf("매출액(부가세 포함) : %.2f 원\n", op+t);
}

int in_order(void)
{
    int n;
    do
    {
        n = get_int("주문 건수를 입력해 주세요:\n");
    }
    //주문건수 조건 걸기 : 주문건수는 0보다 작을수 없음
    while( n < 0 );
    return n;
}

int ch_stock(int x)
{
    //재고수량 맞는지 확인하기
    char answer = get_char("기존 재고수량은 %i 개 입니다. 맞으면 y, 아니면 n을 입력하세요:\n", x);
    if ( answer == 'y' || answer == 'Y' )
    {
       return x;
    }
    //재고수량이 실제와 다르면 직접 입력받기
    else
    {
       return x = get_int("실재고를 입력해 주세요:\n");
    }
}

문제 2.

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

int main(void) {
    int targetAmount = get_int("목표 금액이 얼마인가요?\n"); // 목표 원금
    printf("원금 + 이자: %.0f원 입니다.\n", targetAmount*1.012); // 이자 + 원금
}
// 목표 금액이 얼마인가요?

// 10000

// 원금 + 이자: 10120원 입니다.

// 주문 건수를 입력해 주세요:
// 3
// 기존 재고수량은 5 개 입니다. 맞으면 y, 아니면 n을 입력하세요:
// n
// 실재고를 입력해 주세요:
// 5
// 주문건수 : 3 건
// 기존 재고량 : 5 개
// 남은 재고량 : 2 개
// 매출액(부가세 포함) : 30000.00 원

믄제 3.

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

int main(void) {
    // 요일별 메뉴 인덱스
    string menu[7];
    menu[0] = "월요일 : 청국장";
    menu[1] = "화요일 : 비빔밥";
    menu[2] = "수요일 : 된장찌개";
    menu[3] = "목요일 : 칼국수";
    menu[4] = "금요일 : 냉면";
    menu[5] = "토요일 : 소불고기";
    menu[6] = "일요일 : 오삼불고기";

    string inputDay = get_string("요일을 입력하세요: ");
    // 조건별로 인덱스 불러오기
    if (strcmp(inputDay, "월요일") == 0)
        printf("%s\n", menu[0]);
    else if (strcmp(inputDay, "화요일") == 0)
        printf("%s\n", menu[1]);
    else if (strcmp(inputDay, "수요일") == 0)
        printf("%s\n", menu[2]);
    else if (strcmp(inputDay, "목요일") == 0)
        printf("%s\n", menu[3]);
    else if (strcmp(inputDay, "금요일") == 0)
        printf("%s\n", menu[4]);
    else if (strcmp(inputDay, "토요일") == 0)
        printf("%s\n", menu[5]);
    else if (strcmp(inputDay, "일요일") == 0)
        printf("%s\n", menu[6]);
    return 0;
}

// 요일을 입력하세요: 월요일
// 월요일 : 청국장
// $ ./mission3
// 요일을 입력하세요: 목요일
// 목요일 : 칼국수

3주차 팀미션 (배열)

문제 1.

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

void guide(void);
void change_grade(int in_score);
int find_index(int in_score, int leng);
char ch_plus(int in_score, int plusmark);

int main(void)
{
    int in_score;

    guide();

    while( true )
    {
        in_score = get_int("성적을 입력 하세요 : ");

        if( in_score >= 0 && in_score <= 100 )
        {
            change_grade(in_score);
        }

        else if(in_score==999)
        {
            printf("학점 프로그램을 종료 합니다\n");
            break;
        }

        else
        {
            printf("** %i 성적을 올바르게 입력하세요. 범위는 0~100 입니다.\n", in_score);
        }
    }
}

void guide(void)
{
    printf("학점프로그램\n");
    printf("종료를 원하면 999를 입력하세요\n");
    printf("[학점 테이블]]\n");
    printf("점수 : A+  A   B+  B   C+  C   D+  D   F  \n");
	printf("학점 : 95  90  85  80  75  70  65  60  0  \n");
}

 void change_grade(int in_score)
 {

    int leng = 5;
    int plusmark=5; //
    char grades[] = {'A','B','C','D','F'};

    if( in_score < 60 ) {
        in_score = 0;
    }

     printf("성적은 %c%c 입니다\n", grades[find_index(in_score, leng)], ch_plus(in_score, plusmark));
 }

 int find_index(int in_score, int leng)
 {
    int scores[] = {90,80,70,60,0};
    int cg_grade1=(in_score/10)*10;

    for(int i = 0; i < leng ; i++ )
    {
        if( scores[i] == cg_grade1)
        {
            return index = i;
        }
    }
    return index;

char ch_plus(int in_score, int plusmark)
{

    int cg_grade2=in_score%10;

    if( in_score == 100 || cg_grade2 >= plusmark)
    {
        return '+';
    }
    else
    {
        return 0;
    }
}

/*
학점프로그램
종료를 원하면 999를 입력하세요
[학점 테이블]
점수 : A+ A  B+ B  C+ C  D+ D  F
학점 : 95 90 85 80 75 70 65 60 0
성적을 입력 하세요 : 0
성적은 F 입니다
성적을 입력 하세요 : 10
성적은 F 입니다
성적을 입력 하세요 : 20
성적은 F 입니다
성적을 입력 하세요 : 30
성적은 F 입니다
성적을 입력 하세요 : 70
성적은 C 입니다
성적을 입력 하세요 : 86
성적은 B+ 입니다
성적을 입력 하세요 : 97
성적은 A+ 입니다
성적을 입력 하세요 : 100
성적은 A+ 입니다
성적을 입력 하세요 : 123
** 123 성적을 올바르게 입력하세요. 범위는 0 ~ 100 입니다.
성적을 입력 하세요 :
*/

문제 2.

#include <stdio.h>
#define SIZE 500000

int main(int arge, char*argv[]) {
    int n;
    int nSum = 0;
    int sum = 0;

    scanf("%d", &n);

    // 1부터 N의 숫자중 K가 빠진 배열
    int partArr[SIZE];
    int lengthOfPartArr = n-1;                  // n - 1을 저장

    // 1 부터 N 까지의 정상적인 숫자의 합
    for (int j = 0; j <= n; j++) {
        nSum += j;
    }

    // 1 부터 N-1 까지의 숫자의 합
    for(int i = 0; i < lengthOfPartArr; i++){
        scanf("%d", &partArr[i]);
        sum += partArr[i];                       // 띄어쓰기가 있을 때 마다 partArr[i]에 하나씩 저장
    }

    printf("K = %d\n", nSum - sum);               // 1 ~ n 숫자를 더한 값에서 n-1의 숫자를 더한 값을 빼기


    // TODO: n과 partArr를 이용하여, K를 구하라
    return 0;
}

Tags:

Categories:

Updated:

Comments