책 내용 질문하기
알고리즘을 c언어, 자바,python으로 바꾸기
도서
2020 시나공 정보처리기능사 실기 : NCS 기반 전면 개편
페이지
354
조회수
387
작성일
2020-07-01
작성자
탈퇴*원
첨부파일

#include <stdio.h>

void align(int a[]){

    int temp;

    for(int i=0;i<4;i++)

       if (a[j]>a[j+1]{

            temp=a[j];

            a[j]=a[j+1];

            a[j+1]=temp;

        }

 

}

 

main() {

 int a[]={85, 75,50,100,95};

  align(a);

   for (int i=0;i<5;i++)

 

   printf("%d" ,a[i];

}

 

위 문제에서 임시변수를 이용하여 선택정렬하는 문제를 찾았보았는데 교과서 p354,p353에서 찾을 수 있었는데요.결론적으로 말하면 제가 알고리즘을 c언어, 자바, python으로 바꿀 수 없다는 걸 발견하게 되었습니다. 좀 가르쳐 주세요. (선택정렬을 c언어, 자바, python으로)

 

그리고 위 문제를 계기로 왜 main 위에 void가 오며, void의 의미, return 등의 의미 궁금합니다. 

 위 문제 답이 50 75 85 95 100 인데요. 좀 풀어주세요. 

답변
2020-07-01 11:26:21

안녕하세요 길벗수험서 운영팀입니다.

 

void는 함수의 반환값이 없다는 것을 의미하고, return은 함수에서 값을 반환할 때 사용합니다.

일반적으로 함수(main, align)는 수행이 종료되면 특정 값을 반환하게 되는데, 이를 리턴값이라고 합니다.

 

만약 func라는 함수가 있어 이렇게 선언되었다고 가정하죠.

int func() {

 return 3;

}

main() {

 int a = func();

 printf("%d", a);

}

 

이 경우 func 함수는 int(정수)형 자료를 반환하는 함수이고, 호출문을 보니 반환값을 a에 저장하라고 하고 있네요.

위 코드의 결과로 3이 출력되게 됩니다.

(main과 같이 void, int 등의 자료형이 생략된 경우 int가 반환되는 것이라고 가정합니다. 다만 main 함수의 경우 특별히 반환값이 없어도 자동으로 처리되죠.)

 

선택정렬을 C, java, python으로 변환한 코드는 아래 첨부해드리니 참고해보시기 바랍니다.

 

행복한 하루되세요 :)

 

353쪽의 순서도와는 다르게 값을 비교할 때 참이면 매번 교환하는 것이 아닌 주소를 기억해 마지막에만 교환하는 형식입니다.

 

[Java]

public class Test {

    static void arr(int[] a) {

        int sw, temp, n = a.length;

        for(int i = 0; i < n - 1; i++) {

            sw = i;

            for(int j = i + 1; j < n; j++)

                if(a[j] < a[sw])

                    sw = j;

            temp = a[i];

            a[i] = a[sw];

            a[sw] = temp;

        }

    }

    public static void main(String[] args) {

        int n[] = { 85,75,50,100,95 };

        arr(n);

        for(int i:n)

            System.out.printf("%d ", i);

    }

}

 

 

C에서 배열의 길이를 구하는 함수가 있지만, 생략하고 그냥 고정값 5를 부여했습니다.

[C]

void arr(int a[]) {

    int sw, temp, n = 5;

    for (int i = 0; i < n - 1; i++) {

        sw = i;

        for (int j = i + 1; j < n; j++)

            if (a[j] < a[sw])

                sw = j;

        temp = a[i];

        a[i] = a[sw];

        a[sw] = temp;

    }

}

main() {

    int n[] = { 85,75,50,100,95 };

    arr(n);

    for (int i = 0; i < 5; i++)

        printf("%d ", n[i]);

}

 

 

파이썬에서는 리스트 출력시 반복문 필요없이 그냥 리스트를 print문의 인수로 사용하면 됩니다.

[Python]

def arr(a):

    n = 5

    for i in range(n-1):

        sw = i

        for j in range(i+1, n):

            if a[j] < a[sw]:

                sw = j

        temp = a[i]

        a[i] = a[sw]

        a[sw] = temp

n = [85, 75, 50, 100, 95]

arr(n)

print(n)

  • 관리자
    2020-07-01 11:26:21

    안녕하세요 길벗수험서 운영팀입니다.

     

    void는 함수의 반환값이 없다는 것을 의미하고, return은 함수에서 값을 반환할 때 사용합니다.

    일반적으로 함수(main, align)는 수행이 종료되면 특정 값을 반환하게 되는데, 이를 리턴값이라고 합니다.

     

    만약 func라는 함수가 있어 이렇게 선언되었다고 가정하죠.

    int func() {

     return 3;

    }

    main() {

     int a = func();

     printf("%d", a);

    }

     

    이 경우 func 함수는 int(정수)형 자료를 반환하는 함수이고, 호출문을 보니 반환값을 a에 저장하라고 하고 있네요.

    위 코드의 결과로 3이 출력되게 됩니다.

    (main과 같이 void, int 등의 자료형이 생략된 경우 int가 반환되는 것이라고 가정합니다. 다만 main 함수의 경우 특별히 반환값이 없어도 자동으로 처리되죠.)

     

    선택정렬을 C, java, python으로 변환한 코드는 아래 첨부해드리니 참고해보시기 바랍니다.

     

    행복한 하루되세요 :)

     

    353쪽의 순서도와는 다르게 값을 비교할 때 참이면 매번 교환하는 것이 아닌 주소를 기억해 마지막에만 교환하는 형식입니다.

     

    [Java]

    public class Test {

        static void arr(int[] a) {

            int sw, temp, n = a.length;

            for(int i = 0; i < n - 1; i++) {

                sw = i;

                for(int j = i + 1; j < n; j++)

                    if(a[j] < a[sw])

                        sw = j;

                temp = a[i];

                a[i] = a[sw];

                a[sw] = temp;

            }

        }

        public static void main(String[] args) {

            int n[] = { 85,75,50,100,95 };

            arr(n);

            for(int i:n)

                System.out.printf("%d ", i);

        }

    }

     

     

    C에서 배열의 길이를 구하는 함수가 있지만, 생략하고 그냥 고정값 5를 부여했습니다.

    [C]

    void arr(int a[]) {

        int sw, temp, n = 5;

        for (int i = 0; i < n - 1; i++) {

            sw = i;

            for (int j = i + 1; j < n; j++)

                if (a[j] < a[sw])

                    sw = j;

            temp = a[i];

            a[i] = a[sw];

            a[sw] = temp;

        }

    }

    main() {

        int n[] = { 85,75,50,100,95 };

        arr(n);

        for (int i = 0; i < 5; i++)

            printf("%d ", n[i]);

    }

     

     

    파이썬에서는 리스트 출력시 반복문 필요없이 그냥 리스트를 print문의 인수로 사용하면 됩니다.

    [Python]

    def arr(a):

        n = 5

        for i in range(n-1):

            sw = i

            for j in range(i+1, n):

                if a[j] < a[sw]:

                    sw = j

            temp = a[i]

            a[i] = a[sw]

            a[sw] = temp

    n = [85, 75, 50, 100, 95]

    arr(n)

    print(n)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.