c언어 절대값 정렬 질문입니다!!

조회수 539회
#define _crt_secure_no_warnings
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void sortAbs(int* a, int* b, int* c);

int main()
{
    int *a, *b, *c;
    int max, mid, min;
    printf("3개의 정수를 입력해:");

    scanf("%d,%d,%d", &a,&b,&c);

    sortAbs(&a, &b, &c);

    printf("%d,%d,%d", min, mid, max);
}

void sortAbs(int *a, int *b, int *c)
{
    int tmp;
    int max, mid, min;

    if (abs(*a) >= abs(*b) && abs(*a) >= abs(*c)) 
    {       
        max = *a;
        if (abs(*b) >= abs(*c))
        {
            mid = *b;
            min = *c;
        }
        else if(abs(*c) >= abs(*b))
        {
            mid = *c;
            min = *b;
        }
    }

    if (abs(*b) >= abs(*a) && abs(*b) >= abs(*c))
    {
        max = *b;
        if (abs(*a) >= abs(*c))
        {
            mid = *a;
            min = *c;
        }
        else if(abs(*c)>= abs(*a))
        {
            mid = *c;
            min = *a;
        }
    }

    if (abs(*c) >= abs(*a) && abs(*c) >= abs(*b))
    {
        max = *c;
        if (abs(*b) >= abs(*a))
        {
            mid = *b;
            min = *a;
        }
        else if(abs(*c)>= abs(*b))
        {
            mid = *c;
            min = *b;
        }
    }
    return 0;
}

-2 5 2 입력시 -> -2 2 5
-3 -6 4 입력시 -> -3 4 -6

이런식으로 짜봤는데 입력시 오류가 나옵니다 어디가 잘못되었나요?

1 답변

  • 여러곳이 틀려서 일일이 설명을 드릴수 없다는 점 양해해 주세요.

    아래에 수정한 코드와 결과가 있습니다. 꼼꼼히 차이점을 확인해 보세요.

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    void sortAbs(int* a, int* b, int* c);
    
    int main()
    {
        int a,  b, c;
        //int max, mid, min;
        printf("3개의 정수를 입력해:");
    
        scanf("%d %d %d", &a, &b, &c);
    
        sortAbs(&a, &b, &c);
    
        printf("%d,%d,%d", a, b, c);
    }
    
    void sortAbs(int* a, int* b, int* c)
    {
        //int tmp;
        int max, mid, min;
    
        if (abs(*a) >= abs(*b) && abs(*a) >= abs(*c))
        {
            max = *a;
            if (abs(*b) >= abs(*c))
            {
                mid = *b;
                min = *c;
            }
            else if (abs(*c) >= abs(*b))
            {
                mid = *c;
                min = *b;
            }
        }
        else if (abs(*b) >= abs(*a) && abs(*b) >= abs(*c))
        {
            max = *b;
            if (abs(*a) >= abs(*c))
            {
                mid = *a;
                min = *c;
            }
            else if (abs(*c) >= abs(*a))
            {
                mid = *c;
                min = *a;
            }
        }
        else if (abs(*c) >= abs(*a) && abs(*c) >= abs(*b))
        {
            max = *c;
            if (abs(*b) >= abs(*a))
            {
                mid = *b;
                min = *a;
            }
            else if (abs(*c) >= abs(*b))
            {
                mid = *c;
                min = *b;
            }
        }
    
        *a = min;
        *b = mid;
        *c = max;
    
        //return 0;
    }
    
    • 결과

    이미지

    이미지

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 이제 실행은 될텐데요. 조건문에서 절대값을 취한 상태로 크기를 비교하고 있기 때문에, 절대 값이 같고 부호가 다른 값이 입력될 경우 의도와 다르게 정렬될 수 있습니다. 그것까지 하시려면 지금 코드대로는 불가능하고 조건문 부분을 완전히 고치셔야 합니다. 알 수 없는 사용자 2021.4.16 02:32
    • 아...그러네요 추천해주시는 방법 있을까요?,. 알 수 없는 사용자 2021.4.16 12:33

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)