본문 바로가기

C언어_VisualStudio_실습

[C언어] 사용자 정의 함수의 예제 : 큰 값 출력 함수, 구구단 출력 함수, 양수 입력 받는 함수, 아스키코드 출력 함수

오늘은 이전 글인 사용자 정의 함수의 각 종류별로 간단하게 예제를 풀어볼 것이다. :-)

이전 글은 여기서 확인할 수 있다! https://cwithvisual.tistory.com/entry/%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%ED%95%A8%EC%88%98

 

사용자 정의 함수

함수의 대한 기본 설명은 다음 글을 참고하면 된다. https://cwithvisual.tistory.com/entry/%ED%91%9C%EC%A4%80-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%ED%95%A8%EC%88%98 #8 C /..

cwithvisual.tistory.com

사용자 정의 함수

큰 값 출력 함수, 구구단 출력 함수, 양수 입력 받는 함수, 아스키코드 출력 함수


 

1. 입력도 있고 반환도 있는 함수

2. 입력은 있지만 반환은 없는 함수

3. 입력은 없고 반환은 있는 함수

4. 입력도 없고 반환도 없는 함수

 


 

< 1. 입력도 있고 반환도 있는 함수 >

[문제]

정수 두 개를 입력받아서 큰 값을 반환하는 max 함수를 만들어라.

단, main함수는 다음과 같다.

int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d", max(a, b));
    return 0;
}

 

[풀이]

다음 4가지를 생각해보자.

  1. 함수 이름은? max
  2. 반환하는 값의 자료형은? int
  3. 전달받는 값에 대한 정보는? int형, x, y
  4. 함수 내부는? 조건문을 이용하여, x>y일 경우 x반환, 아닐 경우 y반환

조건문(if 문) 참고) https://cwithvisual.tistory.com/entry/%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EC%A0%95%EB%A6%AC-if-if-else-else-if-else

 

조건문 정리 : if / if ~ else / else if / else

오늘은 조건문을 정리해보자. :-) 조건문 프로그램이 단조롭게 순차적으로 실행되는 것은 아니다. 조건에 따라 실행 순서를 바꿔줄 수 있는데 이때 사용하는 게 조건문이다. 조건문에는 if문과 sw

cwithvisual.tistory.com

이것에 기반하여 함수를 작성해보면 다음과 같다.

int max(int x, int y) {
    if (x > y) return x;
    else return y;
}

 

코드를 정리하면 다음과 같다.

#include <stdio.h>

int max(int x, int y) {
    if (x > y) return x;
    else return y;
}

int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d", max(a, b));
    return 0;
}

 

< 2. 입력은 있지만 반환은 없는 함수 >

[문제]

구구단을 출력하는 print_gugudan 함수를 만들어라.

정수 하나를 입력받으며, 입력받은 정수에 해당하는 구구단을 출력한다. 즉, 반환 값이 없다.

단, main함수는 다음과 같다.

int main(void) {
    int dan;
    scanf("%d", &dan);
    print_gugudan(dan);
    return 0;
}

 

[풀이]

다음 4가지를 생각해보자.

  1. 함수 이름은? print_gugudan
  2. 반환하는 값의 자료형은? 없다. void
  3. 전달받는 값에 대한 정보는? int형 n
  4. 함수 내부는? 반복문(for문)을 사용하여 작성

참고) for문은 다음 글을 참고하면 된다.

 

이것에 기반하여 함수를 작성해보면 다음과 같다.

void print_gugudan(int n) {
    for (int i = 1; i <= 9; i++) printf("%dX%d=%d\n", n, i, n * i);
}

코드를 정리하면 다음과 같다.

#include <stdio.h>

void print_gugudan(int n) {
    for (int i = 1; i <= 9; i++) printf("%dX%d=%d\n", n, i, n * i);
}

int main(void) {
    int dan;
    scanf("%d", &dan);
    print_gugudan(dan);
    return 0;
}

 

 

< 3. 입력은 없고 반환은 있는 함수 >

[문제]

사용자로부터 양수를 하나 입력받는 get_positive_number를 만들어라.이 함수는 전달 받는 값은 없고 반환만 있는 경우이다.사용자에게 숫자를 입력 받는데, 만약 사용자가 음수를 입력하면 양수를 입력할 때까지 숫자를 입력받도록 한다. 사용자가 양수를 입력하면 그 값을 반환한다. 단, main 함수는 다음과 같다.

int main(void) {
    printf("positive number: %d", get_positive_number());
    return 0;
}

 

[풀이]

다음 4가지를 생각해보자.

  1. 함수 이름은? get_positive_number
  2. 반환하는 값의 자료형은? 양수이므로 int
  3. 전달받는 값에 대한 정보는?없다. void 
  4. 함수 내부는? 양수를 입력 받을 때까지 반복해야 하므로 반복문(while문)을 사용하여 작성

참고) while문은 다음글을 참고하면 된다.

 

이것에 기반하여 함수를 작성해보면 다음과 같다.

int get_positive_number(void) {
    int n = 0;
    while (n <= 0) {
        printf("positive number? ");
        scanf("%d", &n);
    }
    return n;
}

 

정리하면 다음과 같다.

 

#include <stdio.h>

int get_positive_number(void) {
    int n = 0;
    while (n <= 0) {
        printf("positive number? ");
        scanf("%d", &n);
    }
    return n;
}

int main(void) {
    printf("positive number: %d", get_positive_number());
    return 0;
}

 

 

< 4. 입력도 없고 반환도 없는 함수 >

[문제]

아스키 코드를 출력하는 print_ascii 함수를 만들어라.

이 함수는 입력도 없고 반환도 없다. 대문자 A부터 대문자 Z까지, 소문자 a부터 소문자 z까지의 아스키코드를 출력하는 함수이다. 

단, main함수는 다음과 같다.

int main(void) {
    print_ascii();
    return 0;
}

 

[풀이]

다음 4가지를 생각해보자.

  1. 함수 이름은? print_ascii 
  2. 반환하는 값의 자료형은? 없다. void
  3. 전달받는 값에 대한 정보는? 없다.void 
  4. 함수 내부는? A부터 Z까지, a부터 z까지 아스키코드를 출력하는 것이므로 반복문(for문)을 사용하여 작성한다. 

참고) for문은 다음 글을 참고하면 된다.

 

이것에 기반하여 함수를 작성해보면 다음과 같다.

void print_ascii(void) {
    char ch;
    for (ch = 'A'; ch <= 'Z'; ch++)
        printf("%c : %d\n", ch, ch);
    printf("----------\n");
    for (ch = 'a'; ch <= 'z'; ch++)
        printf("%c : %d\n", ch, ch);
}

 

코드를 정리하면 다음과 같다.

 

#include <stdio.h>

void print_ascii(void) {
    char ch;
    for (ch = 'A'; ch <= 'Z'; ch++)
        printf("%c : %d\n", ch, ch);
    printf("----------\n");
    for (ch = 'a'; ch <= 'z'; ch++)
        printf("%c : %d\n", ch, ch);
}


int main(void) {
    print_ascii();
    return 0;
}