c++ 질문이요 간단한소스코드..
무들
#includeiostream
using namespace std;
void main()
{
int num[3],max,min,mid;
cout 첫번째 정수를 입력하세요 : ; //50 입력한값이라고생각하구..
cin num[0];
cout 두번째 정수를 입력하세요 : ; //30
cin num[1];
cout 세번째 정수를 입력하세요 : ; //40
cin num[2];
//max에 배열의 첫 원소를 집어넣고
//두번째, 세번째와 비교해나간다.
//최대값을 구하는 반복문
max=num[0];
for(int i=0;i3;i++)
if(maxnum[i])
max=num[i];
//max에 배열의 첫 원소를 집어넣고
//두번째, 세번째와 비교해나간다.
//최소값을 구하는 반복문
min=num[0];
for(int j=0;j3;j++)
if(minnum[j])
min=num[j];
//max에 배열의 첫 원소를 집어넣고
//두번째, 세번째와 비교해나간다.
//중간값을 구하는 반복문
for(int k=0;k3;k++)
if( ((num[k])!=max) && (num[k]!=min))
mid=num[k];
coutmaxmidminendl;
}
이건제가 짜다가 어느분깨 도움을 받아서 완성한 소스코드입니다
그런데 이해가잘안되서요 어디가냐면
색칠한부분에서 for 반복문 3번을돌립니다 그런데 걱서 지금 min = num[1] min 은 30으로 min = num[2] 는 min은 40으로 되있기때문에 밑에 if 조건문에 해당이안되서 mid = num[k] 는 실행안하고 나오지않나여??
제가 잘못 이해를 하고있는거같은데...설명좀부탁드리겠습니다 ㅠㅠ
-
로다
for문 괄호() 다음에 중괄호 { } 로 반복할 구간을 씌워주시는 것이 보기 좋을 것 같네요...
for(int i=0;i3;i++)
{
if(maxnum[i])
max=num[i];
}
이렇게요....ㅎㅎㅎ 아무것도 아니지만 보기 좋은 소스가 디버깅하기도 좋아요... -
카라
본 소스에는 버그가 존재하네요
만약 동일한 값이 입력되면 값이 나오지 않는 것이 발생합니다
이러한 경우에는 해당 배열의 인덱스를 기억하는 로직으로 변경하는 것이 맞을 듯 합니다 -
달빛
소스가 세개의 정수를 입력받아서 num 배열에 저장을 하고 여기서 최소, 중간, 최대값을 찾는 소스네요.
마지막 for문이 왜 이해가 안돼는지 모르겠네요. 만야게 20, 50, 30 을 입력받으면 num = { 20, 50, 30} 이겠군요.
max 구하는 for문에 의해 max = 50, min 구하는 for문에 의해 min 은 20이 되있겠네요.
마지막 for문은 중간값을 구하는 건데, num[0]~num[2] 까지 루프 돌리면서 최소값(20) -
진나
값이 세개잖아요... 그러니 최소 최대 아니면 중간이라서 min과 max 아니니 mid 가 되는거구요
40은 마지막에 if에 의해 걸러져서(그때 min이 30이고 30 40 이나 min값은 동일하게됩니다 -
Glisten
min 값은 30이나 40 두개중 하나가 아니라 30이 됩니다.
-
찬솔
제가...그건알고있는데요 저기 초록생 부분에서 3번 반복하자나요 ㅠㅠ그런데
max 값이 50 으로되있고 min 값은 30,40 두개 둘중하나인데 마지막실행된게 40이자나요 그래서 40으로
기억한다구하면요 마지막 포문에서 조건 num[k]가max랑 같지 않을때 num[k]min 과같지않을때 둘다 성립되야 mid=num[k] 가나오자나요 이부분이 좀이해가안가내요....
만약 50 30 40 이렇게 입력안받았다고생각하면 음.. 20 50 30 이렇게 입력 -
헛매질
For문에서 조건문의 내용이 끝나기 전까지 아래로 내려가지 않습니다 따라서 위의 포문을 통해 max와 min의 값이 고정 되지요 따라서 중간값이 나오는것 입니다.