PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2011/09/19 16:07:41
Name Jr.갈루아
Subject C언어 고수분들께......
근래 들어서 C언어 때문에 질게에 글을 자주 올리게 되네요ㅠ;;

아직 C언어 공부한 지 2주밖에 안 됐거든요.....(순수히 독학으로 공부 중입니다. 심지어 동영상 강의도 안 듣고요..;;)

배열, 포인터 부분부터 갑자기 난이도가 확 상승한 느낌이네요;;




(1차원)배열 속에서 최댓값과 최솟값을 알려주는 프로그램을 만들었는데요.

최댓값은 제대로 나오는 것 같은데;

최솟값은 항상 1로 고정되어 나옵니다.

어디가 잘못 됬는지 모르겠네요...................

고수 분들 굽신굽신.




#include <stdio.h>

void MaxMin(int **Max, int **Min, int *arr, int size) // MaxMin 함수 선언
{
        int i;
        int M, m;
        int *Mx, *Mn;
        
        Mx=&M;
        Mn=&m;


        for(i=0, M=arr[i], m=arr[i];i<size;i++)
        {
                if(M<arr[i])
                        M=arr[i];
                if(m>arr[i])
                        m=arr[i];
        }
        *Max=Mx, *Min=Mn;
}


int main(void)
{
        int i;
        int arr[5];
        int *max, *min;


        for(i=0;i<5;i++) // 정수 입력단계
        {
                printf("정수를 입력하시오 : ");
                scanf("%d", &arr[i]);
        }


        max=arr;
        min=arr;


        MaxMin(&max, &min, arr, sizeof(arr)/sizeof(int));

        printf("최댓값 : %d \n", *max);
        printf("최솟값 : %d \n", *min);

        return 0;

}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Humaneer
11/09/19 16:34
수정 아이콘
아직 포인터와 배열의 사용법, 함수호출 등에 대해 기초가 좀 부실하신 것 같습니다.
사실 C 문법자체가 포인터와 배열을 사용함에 있어 굉장히 모호합니다. ^^
100% 이해가 되실 때 까지 열심히 하세요. 꼭(!!) 입니다.

몇가지 오류점을 설명드리자면
1. Main함수에서 Max와 Min을 포인터로 선언할 필요가 없습니다. 포인터로 선언하였다면 유효한(!!) 주소를 참조하여야 하는데 님이 작성하신 코드에는 그렇게 되어있지 않습니다. 아니면 동적할당을 통해서라도 유효한 주소를 참조받아야 합니다만... (동적할당은 아직 배우시지 않은 듯 하여 PASS할게요)

2. MaxMin의 함수원형 또한 잘못되었습니다.
Call by Address(또는 Reference)와 Call by Value의 개념을 재숙지 하셔야할 것 같습니다.

////////////////////////////////////////////////////////////////
님께서 작성하신 코드를 최소한으로 변경하여 보았습니다. 참고하시기 바랍니다.



#include <stdio.h>

void MaxMin(int *Max, int *Min, int *arr, int size) // MaxMin 함수 선언

int i;

// 일단 Max와 Min값을 배열의 첫번째 값으로 초기화
*Max = arr[0];
*Min = arr[0];


// 배열의 첫번째(i = 0) 요소는 비교할 필요 없음.
for(i = 1; i < size; i++)
{
if(*Max < arr[i])
*Max = arr[i];
else if(*Min > arr[i])
*Min = arr[i];

}


int main(void)

int i;
int arr[5];

// int *max, *min;
int max, min;


for(i=0;i<5;i++) // 정수 입력단계
{
printf("정수를 입력하시오 : ");
scanf("%d", &arr[i]);



// max=arr;
// min=arr;


// 변수의 주소값을 넘겨서 호출해야함.
MaxMin(&max, &min, arr, sizeof(arr)/sizeof(int));

printf("최댓값 : %d \n", max);
printf("최솟값 : %d \n", min);

return 0;
}
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
114807 인터넷바꾸고 게임이 잘안되는데.. [2] 오른손1901 11/09/19 1901
114806 늦은 스타리그 우승 기록 [2] SaiNT1728 11/09/19 1728
114805 영화 명장면중에서... [7] DrakeDog2213 11/09/19 2213
114804 윈도우7 64bit에서 디아3 돌아가나요? [2] Dara2226 11/09/19 2226
114803 유럽 외항사 연봉이 어느정도일까요? [1] journey213394 11/09/19 3394
114801 반(?) 경제학 질문입니다. [6] worcs1608 11/09/19 1608
114800 덴마크 다이어트의 단점을 찾습니다. [22] 베일5564 11/09/19 5564
114799 이력서 작성 관련 질문입니다~ [2] 그것이알고있다1613 11/09/19 1613
114798 2인 기준으로 미피에서 파스타만 시키고 샐러드바 이용(구매) 할수 있나요?? [1] 나를찾아서2241 11/09/19 2241
114797 예전 유게글인듯 싶은데 400살이 넘은 중국인 게시글 아시나요? [2] 은빛비2118 11/09/19 2118
114796 사랑니 잘뽑는 병원 추천부탁드립니다. [5] 목캔디4048 11/09/19 4048
114794 C언어 고수분들께...... [1] Jr.갈루아1701 11/09/19 1701
114793 무릎과 허리 통증 질문입니다.(전문가분들 꼭 도와주세요 ㅠㅠ) [9] )Is(1872 11/09/19 1872
114792 동원예비군 훈련 질문입니다 [7] 나린아빠2396 11/09/19 2396
114789 컴퓨터 사양질문드립니다. [6] 고랄라1392 11/09/19 1392
114787 신발 둘중에 어느게 더 괜찮나요? [4] J2146 11/09/19 2146
114786 요즘 방송국들은 왜 애니메이션 방영을 잘 안할까요? [11] 칼루사2424 11/09/19 2424
114785 노트북 구매하려고 합니다 (시리즈3 모델비교) [2] 거북거북1762 11/09/19 1762
114784 애니 삽입 클래식곡(?) 질문입니다. FallenField1865 11/09/19 1865
114783 여론조사의 신빙성 질문입니다... [3] 학몽1944 11/09/19 1944
114782 문화상품권 싸게 파는 사이트 좀 알려주세요 [5] sekhmet2140 11/09/19 2140
114781 신발 구매 도와주세요 [3] 밤식빵1362 11/09/19 1362
114779 휴대폰 번호이동에 관련된 질문입니다... 쓰고이1611 11/09/19 1611
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로