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] 오른손1870 11/09/19 1870
114806 늦은 스타리그 우승 기록 [2] SaiNT1694 11/09/19 1694
114805 영화 명장면중에서... [7] DrakeDog2174 11/09/19 2174
114804 윈도우7 64bit에서 디아3 돌아가나요? [2] Dara2193 11/09/19 2193
114803 유럽 외항사 연봉이 어느정도일까요? [1] journey213357 11/09/19 3357
114801 반(?) 경제학 질문입니다. [6] worcs1570 11/09/19 1570
114800 덴마크 다이어트의 단점을 찾습니다. [22] 베일5509 11/09/19 5509
114799 이력서 작성 관련 질문입니다~ [2] 그것이알고있다1579 11/09/19 1579
114798 2인 기준으로 미피에서 파스타만 시키고 샐러드바 이용(구매) 할수 있나요?? [1] 나를찾아서2209 11/09/19 2209
114797 예전 유게글인듯 싶은데 400살이 넘은 중국인 게시글 아시나요? [2] 은빛비2088 11/09/19 2088
114796 사랑니 잘뽑는 병원 추천부탁드립니다. [5] 목캔디4012 11/09/19 4012
114794 C언어 고수분들께...... [1] Jr.갈루아1665 11/09/19 1665
114793 무릎과 허리 통증 질문입니다.(전문가분들 꼭 도와주세요 ㅠㅠ) [9] )Is(1842 11/09/19 1842
114792 동원예비군 훈련 질문입니다 [7] 나린아빠2300 11/09/19 2300
114789 컴퓨터 사양질문드립니다. [6] 고랄라1362 11/09/19 1362
114787 신발 둘중에 어느게 더 괜찮나요? [4] J2109 11/09/19 2109
114786 요즘 방송국들은 왜 애니메이션 방영을 잘 안할까요? [11] 칼루사2357 11/09/19 2357
114785 노트북 구매하려고 합니다 (시리즈3 모델비교) [2] 거북거북1728 11/09/19 1728
114784 애니 삽입 클래식곡(?) 질문입니다. FallenField1830 11/09/19 1830
114783 여론조사의 신빙성 질문입니다... [3] 학몽1912 11/09/19 1912
114782 문화상품권 싸게 파는 사이트 좀 알려주세요 [5] sekhmet2110 11/09/19 2110
114781 신발 구매 도와주세요 [3] 밤식빵1327 11/09/19 1327
114779 휴대폰 번호이동에 관련된 질문입니다... 쓰고이1578 11/09/19 1578
목록 이전 다음
댓글

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