기초프로그래밍

OJ 7장
  • 7-1
    /* 
        키보드에서 10개의 정수를 입력받아 배열에 저장하고, 저장된 수 만큼 * 를 출력하는 프로그램 
    */
    
    < 입력 예시 1>
    input the 10 integer values : 7 2 5 9 3 4 12 6 8 3
    
    <출력 예시 1> 
     7 : *******
     2 : **
     5 : *****
     9 : *********
     3 : ***
     4 : ****
    12 : ************
     6 : ******
     8 : ********
     3 : ***
    
    
    
    <입력 예시2>
    input the 10 integer values : 9 3 5 12 8 6 5 10 7 3
    
    <출력 예시2>
     9 : *********
     3 : ***
     5 : *****
    12 : ************
     8 : ********
     6 : ******
     5 : *****
    10 : **********
     7 : *******
     3 : ***
  • 7-2
    /*
    3명의 학생들의 국어, 영어, 수학 점수를 입력받고 총점과 평균을 계산하여 배열에 저장할 수 있도록 
    3행 5열로 만들고, 각 학생들의 성적을 출력하는 프로그램
    단, 정수형 배열에 평균이 저장되므로 평균은 정수이다.
    */
    
    <입력 예1>
    1th kor eng mat score : 70 60 70
    2th kor eng mat score : 80 80 70
    3th kor eng mat score : 60 50 50
    
    <출력 예1>
    kor     eng    mat    sum    avg
    70      60      70      200     66
    80      80      70      230     76
    60      50      50      160     53
    
    
    <입력 예2>
    1th kor eng mat score : 85 70 65
    2th kor eng mat score : 70 85 55
    3th kor eng mat score : 90 75 85
    
    <출력 예2>
    kor     eng    mat    sum    avg
    85      70      65      220     73
    70      85      55      210     70
    90      75      85      250     83
  • 7-3
    /*
    정렬(sorting)은 데이터를 일정한 순서로 배열하는 것을 말한다.
    5개의 정수를 입력받아 버블 정렬로 출력하는 프로그램을 작성하시오.
    */
    
    <입력 예1>
    input the 5 values : 7 4 3 9 2
    
    <출력 예1>
    After bubble sorting : 2 3 4 7 9
    
    
    <입력 예2>
    input the 5 values : 9 2 4 7 5
    
    <출력 예2>
    After bubble sorting : 2 4 5 7 9
    
OJ 8장
  • 8-1
    아래 main 함수에 사용되는 함수 2개를 정의하라. draw_box는 예시처럼 상자를 그리고 area함수는 면적을 계산한다.
    int main(){
    	int h, w = 0;
    	char c1, c2;
    	scanf("%d %d %c %c", &h, &w, &c1, &c2);
    	draw_box(h, w, c1, c2 );
    	printf("area is %f\n", area(h,w));
    }
    
    입출력 예시1
    7 8 X ?
    XXXXXXXX
    X??????X
    X??????X
    X??????X
    X??????X
    X??????X
    XXXXXXXX
    area is 56.000000
    
    입출력 예시 2
    3 5 0 1
    00000
    01110
    00000
    area is 15.000000
  • 8-2
    아래 main 함수에 사용되는 함수를 입출력 예시를 보고 정의하라. 
    전역변수를 사용하여 ‘-’과 ‘*’이 함수에서 몇 번 출력되는지 세어라. 
    main 함수는 변경 불가이다.
    int main(){
    	int s;
    	count1 = 0;
    	count2 = 0;
    	while(1){
    		scanf("%d", &s);
    		if( 0 >= s || s>9) break;
    		print_line(s); 
    	}
    	printf("the number of - prints is %d\n", count1);
    	printf("the number of * prints is %d\n", count2);
    }
    
    입출력 예시 1:
    7
    *-----*
    5
    *---*
    9
    *-------*
    4
    *--*
    33
    the number of - prints is 17
    the number of * prints is 8
    
    입출력 예시 2:
    5
    *---*
    4
    *--*
    6
    *----*
    0
    the number of - prints is 9
    the number of * prints is 6
  • 8-3
    높이와 넓이를 입력 받아 ‘*’와 ‘r’로 상자를 그리는 recursive_box 순환호출 재귀함수를 작성하라.
    입출력을 확인하고, 반복문은 사용 금지, main함수는 변경 불가이다.
    힌트: static 변수에 넓이 값을 저장해서 사용할 수 있으며, 넓이는 0보다 커야 한다.
    int main(){
    	int height, width;
    	while(1){
    		scanf("%d %d", &height, &width);
    		if( 0 >= width || 0 >= height) break;
    		recursive_box(height, width);
    	}
    }
    
    입출력 예시 1:
    4 8
    *******r
    *******r
    *******r
    *******r
    3 5
    ****r
    ****r
    ****r
    3 7
    ******r
    ******r
    ******r
    3 6
    *****r
    *****r
    *****r
    0 0
    
    입출력 예시 2:
    2 6
    *****r
    *****r
    4 3
    **r
    **r
    **r
    **r
    0 0
  • 8-4
    static 변수를 활용해서 숫자의 합을 출력하는 순환호출 print_sum 재귀함수를 정의하라. main 함수 및 입출력 예시를 참고.
    반복문은 사용할 수 없으며, main 함수는 변경 불가이다. 
    힌트: static 변수에 합을 저장할 수 있다. 합을 print_sum을 처음 호출할 때 0으로 초기화하고 
    print_sum이 마지막으로 순환호출 할 때 -1값으로 대입하면 반복문 사용 없이 구현 가능하다.
    void main(){
    	int n;
    	while(1){
    		scanf("%d", &n);
    		if( 0 >= n) break;
    		print_sum(n);
    	}
    }
    
    입출력 예시 1:
    5
    5+4+3+2+1+0=15
    6
    6+5+4+3+2+1+0=21
    3
    3+2+1+0=6
    0
    
    입출력 예시 2:
    4
    4+3+2+1+0=10
    12
    12+11+10+9+8+7+6+5+4+3+2+1+0=78
    0
OJ 9장
  • 9-1
    (BP2025) 9장(1) : swap() 함수 활용(p356)
    
    1부터 50사이의 정수를 순서대로 10개 입력 받는다(1부터 50사이의 수가 아니면 반복한다). 
    void swap(int *px, *py) 함수를 작성하고 이를 이용하여 입력받은 10개의 수를 증가하는 순으로 출력하는 프로그램을 작성하라. 
    
    ## 입력 예시
    15 28 14 19  36 23 9 3 1 47
    
    ## 출력 예시
    1 3 9 14 15 19 23 28 36 47
    
    ## 입력 예시
    1 2 3 4 5 6 7 8 9 1
    
    ## 출력 예시
    1 1 2 3 4 5 6 7 8 9
  • 9-2
    (BP2025) 9장 (2): 배열과 포인터
    
    ## 문제 설명
    사용자로부터 5개의 정수를 입력받아 배열에 저장한다. 포인터 변수 pt를 선언하고 pt에 배열의 주소값을 입력한다.
    이후 포인터를 이용하여 배열 각 원소의 값을 모두 더하여 출력하는 프로그램을 작성하라. 
    (반드시 포인터를 이용하여 배열의 값을 더하는 프로그램이 작성되어야 한다.) 
    
    ## 입력 예시
    5 10 20 30 60
    
    ## 출력 예시
    125
    
    ## 입력 예시
    6 3 5 8 1
    
    ## 출력 예시
    23
  • 9-3
    (BP2025) 9장 (3) : 유용한 배열 함수작성 LAB. 변형(p365)
    
    ## 문제 설명
    크기가 5인 int형 배열 v의 원소를 입력받고 원소의 평균과 표준편차를 출력하는 함수
    double get_array_avg(int *v, int n), double get_array_std(int *v, double avg, int n) 함수를 작성하라.
    get_array_std 함수의 매개변수는 배열, 평균, 배열의 크기이다.
    평균과 표준편차를 출력하여라. (출력은 소수점 2자리까지 반올림하여 출력)
    
    ## 입력 예시 
    10 20 30 40 50
    
    ## 출력 예시 
    30.00 14.14
    
    ## 입력 예시 
    5 6 3 2 1
    
    ## 출력 예시 
    3.40 1.85
  • 9-4
    (BP2025) 9장 (4): 프로그래밍 연습문제 1번 변형(p370)
    
    ## 문제 설명
    5개의 원소를 갖는 1차원 배열을 받아서 배열 요소들의 합을 계산하는 함수
    int get_arry_sum(int *A, int size)을 구현하고 합을 출력하는 프로그램을 작성하라.
    
    ## 입력 예시 
    50 -69 85 20 -100
    
    ## 출력 예시 
    -14
    
    ## 입력 예시
    1 2 3 4 5
    
    ## 출력 예시 
    15
    
  • 9-5
    (BP2025) 9장 (5): 프로그래밍 연습문제 2번 변형(p370)
    
    ## 문제 설명
    크기가 5인 정수 배열을 입력받고, 포인터를 이용하여 배열에 저장된 값을 역순으로 출력하는 프로그램을 작성하라.
    반드시 포인터를 이용하는 프로그램을 작성하라.
    
    ## 입력 예시 
    1 2 3 4 5
    
    ## 출력 예시 
    5 4 3 2 1
    
    ## 입력 예시 
    25 36 86 95 45
    
    ## 출력 예시 
    45 95 86 36 25
    
  • 9-6
    (BP2025) 9장 (6) : 배열과 포인터 변형
    
    ## 문제 설명
    크기가 n(<=10)인 정수형 배열 v의 원소들을 오름차순 혹은 내림차순으로 정렬하는 함수
    void sort_array(int *v, int n, int m)을 작성하라. 
    함수에서 v는 배열의 이름, n은 배열의 크기이며, m은 0또는 1의 값을 갖는다.
    0은 오름차순을 의미하며, 1은 내림 차순을 의미한다.
    입력의 첫 번째 줄은 n(배열의 크기)과 m(오름 차순 또는 내림 차순)이며 두 번째 줄은 배열의
    n개의 데이터가 입력된다.
    
    ## 입력 예시 
    5 0
    12 25 45 65 23
    
    ## 출력 예시 
    12 23 25 45 65
    
    ## 입력 예시 
    5 1
    12 25 45 65 23
    
    ## 출력 예시 
    65 45 25 23 12
    
    ## 입력 예시 
    3 1
    -58 -65 -63
    
    ## 출력 예시 
    -58 –63 -65
OJ 10장
  • 10-1
    이름을 입력 받고 이름을 공간 없는 대문자로 변경하는 함수를 정의하라.
    입출력 예시를 확인하고 main 함수는 수정 불가이다.
    int main(){
    	char str[128];
    	scanf("%[^\n]s", str);
    	standard_name(str);
    	printf("%s\n", str);
    }
    
    입출력 예시 1:
    Leo 14th
    LEO14TH
    
    입출력 예시 2:
    Harry S Truman
    HARRYSTRUMAN
    
  • 10-2
    새로운 비밀 번호를 입력 받아 번호에, 대문자, 소문자, 숫자 문자, 길이가 8 이상 있는지 확인하는 코드를 작성하라. 
    경고 메시지는 순서대로… “upper case char needed” “lower case char needed” “number char needed” “minimum 8 char” 이다.
    입출력 예시를 확인하고 main 함수는 수정 불가이다.
    int main(){
    	char str[128];
    	while(1){
    		printf("enter new password: ");
    		scanf("%s", str);
    		if( check_password(str) ){
    			break;
    		}
    	}
    	printf("i hate these rules\n");
    }
    
    입출력 예시 1:
    enter new password: ??
    upper case char needed
    lower case char needed
    number char needed
    minimum 8 char
    enter new password: iLikeThis
    number char needed
    enter new password: iLikeThis99
    i hate these rules
    
    입출력 예시 2:
    enter new password: thisdoesnot
    upper case char needed
    number char needed
    enter new password: HELPSECURITY
    lower case char needed
    number char needed
    enter new password: aB12345678
    i hate these rules
  • 10-3
    사용자로 부터 문자열과 양수를 입력받은 후 문자열을 양수만큼 오른쪽으로 rotate 시켜주는 프로그램을 완성하시오.
    
    # 입출력 예시 1
    hello 1
    ohell
    
    # 입출력 예시 2
    test 2
    stte
    
    # 입출력 예시 3
    amazing 3
    ingamaz
  • 10-4
    사용자로 부터 문자열을 입력받은 후 해당 문자열의 길이가 세로의 길이인 직각 삼각형을 출력해주세요.
    
    # 입출력 예시 1
    hello
    h
    he
    hel
    hell
    hello
    
    # 입출력 예시 2
    test 
    t
    te
    tes
    test
    
    # 입출력 예시 3
    hi
    h
    hi
OJ 11장
  • 11-1
    (BP2025) 11장 (1) 구조체 응용
    
    ## 문제 설명
    학생 명단과 점수를 입력하면 높은 점수를 얻은 m명의 학생 명단을 출력한다. 다음 조건을 만족하는 성적처리 프로그램을 작성해 보자.
    
    ## 입력 예
    - 첫째 줄에 데이터의 개수 n (3 <= n <= 100)과 출력 인원 m (1 <= m <= n)이 공백으로 구분되어 입력된다.
    - 둘째 줄부터 학생 이름과 점수(0~100)가 공백으로 구분되어 입력된다. 
    - 영문 이름의 길이는 최대 9글자 이내로 한다.
    
    ## 출력 예
    - 상위 점수 m명의 학생 명단을 출력한다.
    - 출력 순서는 점수가 높은 학생이 먼저 출력되며, 점수가 같을 경우는 입력 순서가 빠른 순서로 출력한다.
    
    ## 입력 예시 1
    4 2
    joo 95
    kim 59
    lee 90
    son 100
    
    ## 출력 예시 1
    son
    joo
    
    ## 입력 예시 2
    5 3
    kim 75
    lee 60
    joo 80
    lim 78
    cho 55
    
    ## 출력 예시 2
    joo
    lim
    kim
  • 11-2
    (BP2025) 11장 (2) 공용체 응용 (p.441)
    
    ## 문제 설명
    삼각형, 사각형, 원을 동시에 표현할 수 있는 공용체를 사용한다. 
    삼각형은 밑변과 높이, 사각형은 가로와 세로, 원은 반지름만 저장하도록 한다. 
    현재의 공용체가 표현하고 있는 도형의 종류는 열거형 변수를 이용하여 나타낸다. 
    원의 면적을 계산할 때는 3.14로 계산한다. 
    도형의 종류와 도형의 데이터를 입력받아, 도형의 면적을 계산하는 프로그램을 작성하라.
    
    - 조건1: 공용체를 사용해야 함.
    - 조건2: 열거형 변수를 사용해야 함.
    
    아래의 코드 힌트를 사용할 것.
    
    ## 입력 예
    - 첫 번째 줄은 도형의 타입이 주어진다. 
    - 0은 삼각형, 1는 사각형, 2는 원을 의미한다.
    
    - 두번째 줄은 도형별 데이터가 주어진다. 
    삼각형의 경우: 밑변 높이 (삼각형의 넓이 = (밑변*높이)/2)
    사각형의 경우: 가로 세로 (사각형의 넓이 = 밑변 * 높이)
    원의 경우: 반지름 (원의넓이 = 반지름*반지름*3.14)
    
    ## 출력 예
    도형의 면적
    
    ## 입력 예시 1
    0
    10.0 5.0
    
    ## 출력 예시 1
    25.000000
    
    ## 입력 예시 2
    1
    4.0 4.0
    
    ## 출력 예시 2
    16.0000000
    
    ## 입력 예시 3
    2
    5.0
    
    ## 출력 예시 3
    78.500000
    
    [코드 힌트]
    enum type {TRI, REC, CIR};
    
    struct Triangle {
    	double w;
    	double h;
    };
    struct Rectangle {
    	double x;
    	double y;
    };
    struct Circle {
    	double r;
    };
    union P {
    	struct Triangle T;
    	struct Rectangle R;
    	struct Circle C;
    };
    struct Polygon {
    	enum type kind;
    	union P poly;
    };
    int main()
    {
        ???
        ???
    
        return 0;
    }
  • 11-3
    (BP2025) 11장 (3) 복소수의 덧셈 (p.455, 3번 응용)
    
    ## 문제 설명
    두 개의 복소수를 더하는 프로그램을 작성해 보자. 단, 복소수를 구조체로 정의하고 구현하라. a, b, c, d는 실수이다. 
    
    a+bi와 c+di의 덧셈은 다음과 같다.
    (a + bi) + (c + di) = (a + c) + (b + d)i
    
    ## 입력 예
    입력은 아래와 같이 주어진다. 
    첫 번째 줄에는 첫 번째 복소수가 두 번째 줄에는 두 번째 복소수가 아래의 형식으로 주어진다. (복소수 입력에는 공백이 없음)
    
    a+bi
    c+di
    
    ## 출력 예
    (a+c)+(b+d)i
    (복소수 출력에도 공백이 없음)
    
    ## 입력 예시 1
    2.0+4.0i
    6.0+3.0i
    
    ## 출력 예시 1
    8.00+7.00i
    
    ## 입력 예시 2
    3.9-2.0i
    -0.9+1.5i
    
    ## 출력 예시 2
    3.00-0.50i
  • 11-4
    (BP2025) 11장 (4) 구조체를 이용한 시간 표현 (p.455, 4번 응용)
    
    ## 문제 설명
    구조체를 이용하여 현재 시간을 표현하는 프로그램을 작성한다. 
    사용자로부터 2개의 시간을 입력받아서 두 시간 사이의 차이를 계산하여 출력한다. 
    단, 입력받는 2개의 시간은 어떤 것이 먼저이고, 어떤 것이 나중인지 모른다. 
    시(hour)로 주어지는 숫자는 0보다 크고 23보다 작다. 
    분(min)으로 주어지는 숫자는 0보다 크고 59보다 작다. 초(sec)로 주어지는 숫자는 0보다 크고 59보다 작다.
    
    ## 입력 예
    시 분 초 
    시 분 초 
    
    ## 출력 예
    시 분 초 
    
    ## 입력 예시 1
    2 30 55
    3 40 59
    
    ## 출력 예시 1
    1 10 4
    
    ## 입력 예시 2
    16 30 50
    12 10 30
    
    ## 출력 예시 2
    4 20 20
  • 11-5
    (BP2025) 11장 (5) 구조체 배열 (p.456, 5번 응용)
    
    ## 문제 설명
    사원을 나타내는 구조체 employee가 이름(영문 문자열), 사번(정수), 전화번호(숫자 문자열), 나이(정수) 등으로 구성된다. 
    다음의 사원 10명의 정보를 구조체 배열로 저장하고, 주어진 검색 조건에 따라 검색의 결과를 출력하는 프로그램을 작성하자.
    
    Jeon  123 2345-7890 32
    Kim   125 3458-9990 22
    Lee   133 7345-9870 45
    Bae   140 5321-1234 54
    Kang  205 4916-5052 48
    Lee     245 2039-3458 25
    Kim   777 4708-2323 34
    Smith 900 6408-3298 39
    Park  428 3482-9283 21
    Kim   973 8934-2738 25
    
    ## 입력 예
    입력은 아래의 포맷으로 구성된다. 
    {검색의 종류} {각 검색 종류에 따른 검색 조건}
    
    {검색 종류}는 아래의 숫자 중 하나이며, 각 번호는 이름, 사번, 전화번호, 나이의 범위를 의미한다.
    1 ➝ 이름, 2 ➝ 사번, 3 ➝ 전화번호, 4 ➝ 나이 범위
    
    {각 검색 종류에 따른 검색 조건}의 형식은 아래와 같다.
    1  Kim --> Kim이란 이름을 가진 사람을 모두 찾아, 그 사람들의 정보를 출력
    2  133 --> 사번 133을 가진 사람을 찾아, 그 사람의 정보를 출력
    3  5321-1234 전화번호 5341-1234를 가진 사람을 찾아 그 사람의 정보를 출력
    4  20 30 --> 나이 20살 이상 30살 이하의 사람들을 찾아 그 사람들의 정보를 출력
    
    ## 출력 예
    검색 조건에 맞는 사람 또는 사람들의 정보를 출력, 해당 조건에 맞는 사람이 없을 때는 -1을 출력한다. 
    
    ## 입력 예시 1
    2 133
    
    ## 출력 예시 1
    lee 133 7345-9870 45
    
    ## 입력 예시 2
    4 20 30
    
    ## 출력 예시 2
    Kim 125 3458-9990 22
    Lee 245 2039-3458 25
    Park 428 3482-9283 21
    Kim 973 8934-2738 25
  • 11-6
    (BP2025) 11장 (6) 구조체 내의 공용체 배열 응용 (p.456, 5번 응용)
    
    ## 문제 설명
    사원을 나타내는 정보 employee가 이름(영문 문자열, 최대 9자), 사번(3자리 정수) 또는 전화번호(지정된 숫자 형식 문자열, xxxx-xxxx), 나이(정수) 등으로 구성된다. 
    즉 사번 또는 전화번호 중 하나만 주어진다.
     
    이를 구조체로 정의하고 그 안에서 공용체를 사용하여 사번 또는 전화번호 중에서 하나만을 사용할 수 있도록 구현하라.
    
    입력으로 주어지는 n명의 사원원 정보를 구조체 배열로 저장하고, 주어진 검색 조건에 따라 검색의 결과를 출력하는 프로그램을 작성하자.
    
    ## 입력 예
    - 입력은 다음의 포맷으로 구성된다. 
    
    {n} {검색의 종류} {각 검색 종류에 따른 검색 조건}
    {name 1} {사번}/{전화번호} {나이}
    {name 2} {사번}/{전화번호} {나이}
    ...
    {name n} {사번}/{전화번호} {나이}
    
    - 입력의 첫번째 줄은 {n} {검색의 종류} {각 검색 종류에 따른 검색 조건}으로 구성된다. 
    {n}은 입력되는 직원의 수이며, 0 < n <= 10 이다. 
    {검색 종류}는 아래의 숫자 중 하나이며, 각 번호는 이름, 나이의 범위를 의미한다.
    1 ➝ 이름, 2 ➝ 나이의 범위
    
    {각 검색 종류에 따른 검색 조건}의 형식은 아래와 같다.
    1 Kim ➝ Kim이란 이름을 가진 사람을 모두 찾아, 그 사람들의 정보를 출력
    2 20 30 ➝ 나이 20살 이상 30살 이하의 사람들을 찾아 그 사람들의 정보를 출력
    
    - 입력의 두번째 줄부터 n + 1번째 줄까지 {name 1} {사번}/{전화번호} {나이}의 형식으로 주어진다. 
    
    {name 1}은 영문 이름이다. 
    {사번}/{전화번호}는 사번(정수) 또는 전화번호{문자열}이다. 어떤 것인지 판단하여 공용체에 저장해야 한다.
    {나이}는 정수이다. 
    
    ## 출력 예
    검색 조건에 맞는 사람 또는 사람들의 정보를 출력, 해당 조건에 맞는 사람이 없을 때는 -1을 출력한다. 
    
    
    ## 입력 예시 1
    3 1 Kim
    Jeon 2345-7890 32
    Kim 125 22
    Lee 133 45
    
    ## 출력 예시 1
    Kim 125 22
    
    ## 입력 예시 2
    5 2 20 30
    joo 140 54
    lee 205 48
    kim 4708-2323 34
    cyc 900 39
    
    ## 출력 예시 2
    kim 2039-2458 25
    
    [코드 힌트]
    - 공용체를 포함하는 구조체를 선언하는 법
    enum type {WN, PN}; // WN: 사번, PN: 전화번호
    
    union WPN {  // 사번과 전화번호에 대한 union
        int wn;
        char pn[10];
    };
    struct info {  // union의 타입과 값을 저장하기 위한 구조체
        enum type kind;
        union WPN n_info;
    };
    struct employee {  // union을 포함하는 employee에 대한 구조체
        char name[10];
        struct info num;
        int age;
    };
    
    int main()
    {
        ???
        ???
    
        return 0;
    }
OJ 13장
  • 13-1
    int 배열 크기를 입력한 후, 입력 크기만큼 동적 메모리를 할당한다. 배열에 int 값들을 입력 받고, 
    찾는 int 값을 입력 받는다. 찾는 int 값이 배열에 몇개 있는지 출력하고, 동적 메모리를 반환한다. 
    입출력 예시를 확인해서 코드를 작성하라. 
    
    //입출력 예시 1, 입력은 3 23 56 77 77 순이다.
    Enter size: 3
    Enter 3 numbers: 23 56 77
    Find: 77
    1 number of 77
    
    //입출력 예시 2, 입력은 4 12 85 12 36 12 순이다.
    Enter size: 4
    Enter 4 numbers: 12 85 12 36
    Find: 12
    2 number of 12
  • 13-2
    아래 main 함수를 보면, 문자열을 입력 받아, 문자열을 int 배열에 카피하고 int 배열을 char로 출력하는 코드가 있다. 
    main 함수에서 사용되는 copy 함수를 정의하라. copy 함수는 문자열을 입력 받아 char들을 int 배열에 저장한다. 
    main 함수는 수정 불가하다.
    
    int main(){
    	char str[256];
    	scanf("%[^\n]", str);
    	//printf("%s\n", str);
    	
    	int* c = copy(str);
    	
    	int i = 0;
    	while( c[i] != 0){
    		printf("%c", c[i]);
    		i++;
    	}
    	printf("\n");
    	free(c);
    	return 0;
    }
    
    //입출력 예시 1
    char can be saved as int
    char can be saved as int
    
    //입출력 예시 2
    int can be printf as char
    int can be printf as char
  • 13-3
    아래 main 함수를 보면, 문자열을 입력 받는다. 
    입력 받은 문자열은 스페이스 문자와 ‘0’~‘9’ 숫자 문자만 입력 받는다고 가정한다. (다른 문자 입력을 예외 처리할 필요 없다.) 
    입력 받은 문자열에 있는 정수를 int로 변환해서 int 배열에 저장하는 to_int_array 함수를 구현하라. 
    size는 int 배열의 크기이며, main 함수는 수정 불가이다. main 함수와 입출력을 참고하라.
    
    int main(){
    	char str[256];
    	scanf("%[^\n]", str);
    	//printf("%s\n", str);
    	
    	int* array;
    	int size;
    	array = to_int_array( &size, str);
    	printf("size: %d\n", size);
    	for( int i = 0 ; i < size; i++){
    		printf("%d ", array[i]);
    	}
    	printf("\n");
    	free(array);
    	return 0;
    }
    
    //입출력 예시 1, 입력은 0 0 523 6621 415 이다.
    0 0 523 6621 415
    size: 5
    0 0 523 6621 415
    
    //입출력 예시 2, 입력은 5412 354 14 5 1 65 777 이다.
    5412 354 14 5 1 65 777
    size: 7
    5412 354 14 5 1 65 777
    
  • 13-4
    아래 main 함수에서는 unsigned int 3개를 입력 받는다. 
    to_str은 3개의 unsigned int 배열을 문자열로 변환해준다. 
    str_size는 스페이스와 숫자 char의 수이다. 
    main 함수는 수정 불가이며, main함수와 입출력을 참고하여 to_str함수를 구현하라.
    
    int main(){
    	unsigned int arr[3];
    	scanf("%u %u %u", arr, arr+1, arr+2);
    	
    	int str_size;
    	char *str = to_str( &str_size, arr);
    	printf("str_size: %d\n", str_size);
    	printf("%s\n", str);
    	free(str);
    	return 0;
    }
    
    //입출력 예시 1, 입력은 1 2 3이다.
    1 2 3
    str_size: 5
    1 2 3
    
    //입출력 예시 2, 입력은 214567 1245 0이다.
    214567 1245 0
    str_size: 13
    214567 1245 0
기말 족보
24-1 기초프로그래밍 기말 라코 

// 1번문제 
// 10개의 정수를 한번에 입력받아, 오름차순으로 정리하여 10의 자릿수 만큼 별 출력 

// 입력 예시 
// 30 20 50 60 29 8 10 70 80 44
// 출력예시 
//      (입력의 8에 해당)  
//*
//**
//*** 
//****
//*****
//******
//*******
//********


//2번문제 
// 사용자가 -1을 입력하기 전까지 저축액을 계속 입력받음. -1이 나오면 총 저축액을 출력함
// 단, 총 저축액 계산부분은 함수를 이용 할 것. 

// 입력예시 
// 얼마를 저축하시겠습니까 ? (종료는 -1) :  300 400 500 -1
// 출력예시 
// 지금까지의 저축액은 1200 입니다


//3번문제 
// char dic[5][2][100] ={
//     {"book","책"},
//     {"boy","소년"},
//     {"computer","컴퓨터"},
//     {"language","언어"},
//     {"rain","비"}
// };

// ^주어진 배열을 이용할 것 / string.h 사용할 것
// 영어단어를 한번만 입력받아, ^해당배열 중 일치 할시 , 해당 단어와 한글(뜻)을 출력함. 

//입력예시 1 
// 단어입력 : boy
// 출력 예시 1
// boy : 소년

// 입력예시 2
// 단어입력 :  soap
//출력예시 2
// 사전에서 발견되지 않았습니다.

//4번문제 
// struct O {
//char name[100];
//double price;
//int n;
//double total;
// };

// ^주어진 구조체를 이용할 것
// 상품의 이름, 가격, 개수를 한번 입력받아 저장한 뒤, 해당 상품의 이름/가격/개수/ 총 재고액(가격 * 개수) 을 출력할 것

//입력예시 
// 상품의 이름 : pen
// 상품의 가격 : 100
// 상품의 개수 : 20 

// 출력예시 
// 상품의 이름 : pen
// 상품의 가격 : 100
// 상품의 개수 : 20 
// 상품의 재고액 : 2000


OJ 2장
2-1
int 변수에 값을 scanf로 입력 받아 float 변수에 대입해서 출력하고 int 변수 값도 출력하라. 
아래 출력 예시와 같이 출력이 나오게 하라.

입출력 예시 1: 아래에서255이 입력이고 나머지는 출력이다.
get 255
data type 255.000000 255

입출력 예시2: 아래에서 314가 입력이고 나머지는 출력이다.
get 314
data type 314.000000 314
2-2
int, float, char 값을 순서대로 입력 받아, 3개의 변수를 + 연산자로 합하여 double 변수에 대입해서 출력하라.
(출력되는 값이 어떻게 계산되는지 생각해 보자)

입출력 예시 1: 아래에서0 0 8이 int float char 입력이며 나머지는 출력이다.
get 0 0 8
sum data type 56.000000

입출력 예시 2: 아래에서12 3.14 A가 int float char 입력이며 나머지는 출력이다.
get 12 3.14 A
sum data type 80.139999
2-3
float 값 2개를 입력 받아 int 변수에 대입해서 int 변수들의 합과 차이를 구하라.
입출력 예시를 보고 출력코드를 작성하라.
(float 값이 int 변수에 대입되면 어떤 정보가 생략되는지 생각해보자)

입출력 예시 1: 아래에서12.3 7.8이 2개의float 입력이며 나머지는 출력이다.
get 12.3 7.8
12.300000 + 7.800000 becomes 12 + 7 = 19
12.300000 + 7.800000 becomes 12 - 7 = 5

입출력 예시 2: 아래에서3.99 4.99가 2개의float 입력이며 나머지는 출력이다.
get 3.99 4.99
3.990000 + 4.990000 becomes 3 + 4 = 7
3.990000 - 4.990000 becomes 3 - 4 = -1
OJ 3장
3-1
## 문제 설명
sizeof 연산자를 이용해서 char형, short형, int형, long형, long long형, float형, double형,
long double형, char형 변수 cho, int형 변수 sun, double형 변수 chosun에 대한
자료형의 크기를 출력하는 프로그램을 작성하시오.

[참고]
- sizeof 연산자를 이용해서 char형, short형, int형, long형, long형, float형, double형, long double형 등 변수나 자료형 크기를 바이트 단위로 반환
- long형의 크기는 Windows에서는 4바이트, 리눅스에서는 8바이트

## 출력 예시
char형의 바이트 크기: 1
short형의 바이트 크기: 2
int형의 바이트 크기: 4
long형의 바이트 크기: 8
long long형의 바이트 크기: 8
float형의 바이트 크기: 4
double형의 바이트 크기: 8
long double형의 바이트 크기: 16
cho 변수의 바이트 크기: 1
sun 변수의 바이트 크기: 4
chosun 변수의 바이트 크기: 8
3-2
## 문제 설명
원/달러 환율과 달러를 입력받아 몇 원인지 출력하는 프로그램을 작성하시오.

## 입력 예시
1210
150

## 출력 예시
KRW = 181500
3-3
## 문제 설명
매달 입금하는 금액과 저축하는 개월수를 정수로 입력하여, 저축 기간을 년월로 표시하고
저축 총액을 출력하는 프로그램을 작성하시오.
단, 이자는 무시하며, 월 입금액은 최대 1000만원, 개월수는 최대 300월로 합니다.
(힌트: 변수의 크기에 따른 오버플로우 문제 해결 필요함)

## 입력 예시 1
50000 240

## 출력 예시 1
20년 0월 저축 총액 = 12000000

## 입력 예시 2
380000 39

## 출력 예시 2
3년 3월 저축 총액 = 14820000
3-4
## 문제 설명
가로 길이와 세로 길이를 입력받아 직사각형의 넓이와 둘레를 구하는 프로그램을 작성하시오.

## 입력 예시 1
10
20

## 출력 예시 1
직사각형의 넓이: 200
직사각형의 둘레: 60

## 입력 예시 2
25
50

## 출력 예시 2
직사각형의 넓이: 1250
직사각형의 둘레: 150
3-5
## 문제 설명
다음 조건을 만족하는 프로그램을 작성하시오.
 - 문자형 연산 'A' + 2 결과를 문자로 출력
 - 문자형 연산 'A' + 5 결과를 문자로 출력
 - 문자형 연산 'S' - 1 결과를 문자로 출력
 - 문자형 연산 'S' - 3  결과를 문자로 출력


## 출력 예시
C
F
R
P
OJ 4장
4-1
// 양수를 입력받아, 비트 NOT 연산자 ~ 를 이용하여 음수를 출력하는 프로그램을 작성하시오.
// 비트 NOT 연산자는 변수 안의 각 비트들을 반전 시킨다 (1의 보수)
// 컴퓨터는 2의 보수로 음수를 만든다.

[입력]
positive number : 5

[출력]
negative number : -5
-------------------------------
[입력]
positive number : 35

[출력]
negative number : -35
4-2
/* 거스름돈 계산하기
물건 가격과 지불 금액을 입력받고, 거스름돈에 대해서 5000원, 1000원, 500원, 100원, 50원, 10원, 1원을
각각 얼마씩 지불해야 하는지 계산하는 프로그램을 작성하시오 

        int price;   // 물건값
	int pay;     // 손님이 낸 금액
	int change; //거스름돈
*/

[입력]
price : 11570
pay : 20000

[출력]
change : 8430

5000won : 1
1000won : 3
500won : 0
100won : 4
50won : 0
10won : 3
1won : 0
-----------------------------

[입력]
price : 11111
pay : 15000

[출력]
change : 3889

5000won : 0
1000won : 3
500won : 1
100won : 3
50won : 1
10won : 3
1won : 9
4-3
/* 사용자에게 2개의 실수(two real values)를 입력 받아서 정수부를 더한 값(sum of integer parts)을 출력하는 프로그램을 작성하시오.

  예)  실수값이 12.78965 일때, 정수부는 12이고 실수부는 0.78965이다.

*/


[입력]
two real values : 5.12345 
8.45678

[출력]
sum of integer parts : 13
----------------------------------------

[입력]
two real values : 53.78965 
95.12345

[출력]
sum of integer parts : 148
4-4
/* 구(sphere)의 반지름(radius)을 입력 받아 구의 표면적(surface of area)과 부피(volume)을 구하는 프로그램을 작성하시오. 
단, 출력은 소수점 3자리이다.
 
# define  PI  3.141592

표면적: S = 4 * PI * radius * radius
부피:  V = (4.0/3.0) * PI * radius * radius * radius
*/


[입력] 
radius of the sphere : 5

[출력]
surface area : 314.159
volume : 523.599

------------------------------------

[입력]
radius of the sphere : 13

[출력]
surface area : 2123.716
volume : 9202.770
4-5
/*
숫자(양수)를 입력 받아 왼쪽으로 3비트(3-bit left shift) 이동한 후, 오른쪽으로 2비트(2-bit right shift) 이동한 결과를 출력하는 프로그램을 작성하시오.
*/

[입력]
number : 19

 [출력]
3-bit left shift and 2-bit right shift : 38

--------------------------------------------------

[입력]
number : 43

[출력]
3-bit left shift and 2-bit right shift : 86

---------------------------------------------------

[입력]
number : 24

[출력]
3-bit left shift and 2-bit right shift : 48
OJ 5장
5-1
‘i’, ‘f’, ‘d’, ‘c’ 중 하나를 입력 받아서,
‘i’를 입력 받은면 int 값을 입력 받아 출력, 
‘f’는 float 값을 입력 받아 %f로 출력, 
‘d’는 double을 입력 받아 %.20lf로 출력,
‘c’는 char을 입력 받아서 %c로 출력하라. 
‘i’, ‘f’, ‘d’, ‘c’ 하고 다른 값이 입력되면 “please follow instructions”를 출력하라. 
(hint: char을 2번째 입력 받을 때 enter값이 char변수에 들어가지 않게 조심하자. char 입력 문제 3장 내용 참조.) 
입출력 예시를 참조하라.

입출력 예시 1:  p가 입력 
enter data type i, f, d, c: p
please follow instructions

입출력 예시 2: c, X가 입력
enter data type i, f, d, c: c
enter value: X
value is X

입출력 예시 3: d, 12.33이 입력 
enter data type i, f, d, c: d
enter value: 12.33
value is 12.33000000000000007105
//오답정리

/* if(s == 'c') 부분을 실행했을 때 입출력이 안되었다.
그 이유는 처음 s값을 입력받을 때의 엔터값이 char c에 들어가벼렸기 때문이다.
문자를 두번 입력받아야 하는 경우에는 다음 입력을 위해 꼭 엔터값을 받는 문장을 넣도록 하자.
*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	char s;
	char empty;
	printf("enter data type i, f, d, c: ");
	scanf("%c", &s);
	scanf("%c", &empty);

	if (s == 'c') {
		char c;
		printf("enter value: ");
		scanf("%c", &c);
		printf("value is %c\n", c);
	}
	else if (s == 'f') {
		float n;
		printf("enter value: ");
		scanf("%f", &n);
		printf("value is %f\n", n);
	}
	else if (s == 'd') {
		double n;
		printf("enter value: ");
		scanf("%lf", &n);
		printf("value is %lf\n", n);
	}
	else if (s == 'i') {
		int n;
		printf("enter value: ");
		scanf("%d", &n);
		printf("value is %d\n", n);
	}
	else {
		printf("please follow instructions\n");
	}

	return 0;
}
5-2
int값 4개를 입력 받아서, 4개 값 중에 같은 값이 있으면, 입력 받은 순서대로 출력하라. 
똑 같은 값을 2번 출력해서는 안된다. 
같은 값이 없으면 “all unique”을 출력한다

입출력 예시 1
enter 4 values: 1 2 3 4
all unique

입출력 예시 2
enter 4 values: 1 2 3 3
repeated value 3

입출력 예시 3
enter 4 values: 3 3 3 3
repeated value 3

입출력 예시 4
enter 4 values: 5 5 4 4
repeated value 5 4

입출력 예시 5
enter 4 values: 4 5 5 4
repeated value  4 5

입출력 예시 6
enter 4 values: 5 3 3 3
repeated value 3
5-3
double 값 5개를 입력 받아서, 제일 큰 수 2개를, 입력 받은 순서대로 출력하라. 
입력 받은 값들이 전부 다른 값이라고 가정하자.
	
입출력 예시 1
enter 5 values: 1 2 3 4 5
two big numbers 4.000000 5.000000

입출력 예시 2
enter 5 values: 5 4 3 2 1
two big numbers 5.000000 4.000000

입출력 예시 3
enter 5 values: 3 4 2 5 1
two big numbers 4.000000 5.000000

입출력 예시 4
enter 5 values: 3 5 2 4 1
two big numbers 5.000000 4.000000

입출력 예시 1
enter 5 values: 4 1 2 3 5
two big numbers 4.000000 5.000000
OJ 6장
6-1
# 문제 설명
사용자로부터 정수 x, y(x < y)를 입력받아 x부터 y까지의 합을 구하는 프로그램을
작성하라. for 문은 조건식이 거짓이 될 때까지 계속 실행된다.

# 입력 예시 1
1 10

# 출력 예시 1
55

# 입력 예시 2
-10 1

# 출력 예시 2
-54
6-2
사용자로부터 입력받은 임의의 정수가  0 아니면 입력한 값을 누적해서 더하고 
만약에 사용자가 0을 입력하면 지금까지 계산 값을 출력한다. do ~ while 문을 사용한다.

# 입력 예시 1
5
-7
20
6
0

# 출력 예시 1
24

# 입력 예시 2
1
1
2
2
-5
-5
-10
0

# 출력 예시 2
-14
6-3
홀수를 입력 받아, 홀수 크기의 피라미드를 그려보자. 
피라미드는 " ^ " 와 " * " 문자를 사용한다.

## 입력예시1 
5

## 출력 예시 1
^^*^^
^***^
*****

##입력 예시2
9

##출력 예시 2
^^^^*^^^^
^^^***^^^
^^*****^^
^*******^
6-4
# 문제 설명

 2부터 9 사이의 정수 a와 b를 입력받아  1부터 100까지의 자연수 중에서 a의 배수이면서 동시에 b의 배수를 출력한다.
범위를 벗어난  정수가 입력되면 “Try again”이 출력되고, 다시 옳은 정수를 입력하도록 한다.
(참고) 반복문과 break 문을 사용하여 입력받는 두 값이 2부터 9 사이의 값이 될 때까지 반복한다.

# 입력 예시 1
5 9

# 출력 예시 1
45 90

# 입력 예시 2 (11 3 입력하면 “2부터 9 사이의 숫자” 이어야 하므로, “Try again”이 출력, 다시 5 6을 입력하면 30 60 90 출력 됨)
11 3
5 6

# 출력 예시 2
Try again     
30 60 90
6-5
100부터 1000 사이의 수 x를 입력하면 1부터 x까지의 모든 정수에 포함한 3의 개수를 카운트하여 출력하는 프로그램을 작성해보자. 
예를 들어 x가 100이고 1부터 100 사이의 3의 개수를 구할 때, 33은 2개로 계산되어야 한다. 만일 x가 100~1000 사이 범위 외는 출력값이 없다.

# 입력 예시 1
120

# 출력 예시 1
22

## 입력 예시 2
70

# 출력 예시 2
(출력 없음)
중간 족보
// 01번 문제  kor,eng,math 점수입력 후 총 합 구하기
// 입력형태 > kor,eng,math 점수 : 
// 출력형태 > 총합 =
//02번 문제 서로 다른 정수 3개 입력 후 크기비교해서 큰것부터 나열
// 입력 형태 > 첫째 줄에 A와 B,C가 주어진다. A,B,C는 공백 한칸으로 구분되어져 있다. 
// 출력 형태 > 오름차순으로 한줄로 정렬하여 출력해라 (<,>을 사용 할 것)
//03번 문제 삼각형 세변 입력 받은후
// 삼각형인지, 정삼각형인지,이등변삼각형인지,직각삼각형인지,그냥 삼각형 인지 판별
// 입력 형태 > 첫 째 줄에 a,b,c가 주어진다. a,b,c는 공백 한칸으로 구분되어진다 
// 출력 형태 > "~ 삼각형 입니다." ( ~에는 삼각형 종류 출력 )
// hint > 삼각형의 조건 생각하기
// 04번 문제
// 1. 인치 Inches -> 센티미터 Centimeter 
// 2. 화씨 fahrenheit-> 섭씨 celcius 
// ^ 출력 후 1,2 중 한 값을 입력해서 선택함

// centimeter = inch * 2.54;
// celsius = (fahrenheit - 32) * 5.0 / 9.0;

// 그 후 수를 입력해서 선택한 식에 맞게 계산, 변환 후 출력
// 이때, 1,2 를 제외한 수를 입력받으면 다시 입력받으라는 멘트 출력
// 입력 형태 > 1. 2.중 선택하여 인치 또는 화씨를 입력한다 
// 출력 형태 > 변환된 값을 출력한다 

/*
//05번 문제 피라미드 문제 a,b입력받음(이때 a,b는 양수인 정수이고,합이 10이하여야함)
// a=줄수, 칸수
// b=처음 시작되는 숫자
/* 
ex> 6 4 입력시
     4
    45
   456
  4567
 45678
456789
 */