PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2012/03/29 23:02:07
Name VersionA
Subject c언어 while문 질문이요!
안녕하세요 이번에 컴퓨터아무것도 모르지만 컴공신입생이된 남자입니다..!

c언어숙제중에 while문을써서 쓴정수중에 최대값을 고르는문제가있는데요

책보고 답은얼추맞췄으나 의문이남아 이렇게질문합니다!!
while ( a!=0)
       {  
           if(a > max)
               max = a;
              
               scanf("%d", &a);
        }

여기에서   if(a > max)  이부분이 이해가가질 않습니다.!!while문이 반복되면서 변수a 를 자꾸적다가 0쓰면 끝나는 프로그램인데요
                max = a;     어디서a>max가 튀어나오는지
                                 잘모르겠습니다...!   도와주세요!!

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Sky날틀
12/03/29 23:07
수정 아이콘
?? 무엇을 질문하는지 잘 모르겠네요;;
이미 위에 int(.. 라고 생각하겠습니다. char 형이면 형변환이 필요하니..)형으로 선언했을 테니 패스하고
a != 0 은 0이 아닐 경우 반복문을 계속 수행 여부이며
if 문은 입력된 a 가 max 보다 작다면 max를 갱신하라 이며
이후 다시 a를 통해 입력하라 인데;;;
12/03/29 23:07
수정 아이콘
입력한 정수 중에 최대값을 고르라고 했으니까 max에 최대값을 넣어 놓고 새로 입력 a가 들어오면 max보다 큰지 비교해서 max를 갱신하고 그런거네요.
DeathMage
12/03/29 23:08
수정 아이콘
그러니까 정수를 입력받아서 제일 큰 정수를 구하고 입력값의 마지막은 0이 들어오며 반복문이 종료된다는거죠?

if(a > max) max = a; 이 부분을 한글로 풀어 쓰면 이렇게 되겠죠.

만약 a가 max보다 크면, max의 값을 a에 넣어라.

위의 문장을 a가 0이 될때 까지 돌리는거겠죠.
JavaBean
12/03/29 23:37
수정 아이콘
저게 궁금하신 상태라면 c 언어 책 펴놓고 문법부터 다시 공부하시는게 지금 과제는 못해도 시험 잘보고 결과적으로 좋은 학점 나오는 길일듯 합니다..;;
JavaBean
12/03/29 23:38
수정 아이콘
음.. 하긴 문법부터 다시 공부하고말것도 없이 이제 처음 배우시는것일 테니.. 차근차근... 공부하시기를.. -_-;
그러면 학기 말에는 웃으실거에요 ^^;
4년제 컴공 졸업해서 전공과목만 순수 실력으로 A 이상 받을정도로 공부하셔도 국내 어느 IT 대기업을 가도 인정 받을거에요 ^^;
ArcanumToss
12/03/30 01:27
수정 아이콘
하하... VersionA님 반응이 귀엽게 느껴지네요.
조기 교육이 중요하기는 중요한가보네요.
저는 중학교 때 베이직 프로그래밍을 공부해서 최댓값, 최솟값 구하는 알고리즘은 다들 쉬울 거라고 생각했는데 그게 아닌가보네요.


int max = -32768;
int a = max;

while ( a!=0)

if(a > max)
max = a;

scanf("%d", &a);


printf("최댓값은 %d입니다.\n", max);


while문 이전에 저런식으로 해놔야 합니다.
max는 최댓값을 저장할 변수이기 때문에 정수로 입력 가능한 가장 작은 수로 초기화를 해놔야 합니다(이유는 한번 생각해 보시길).
그리고 a 역시 max와 같은 값을 갖도록 초기값을 주는 것이 좋겠죠.
그래야 최초의 비교문인 while ( a!=0)을 실행하면서도 최솟값도 보장할테니까요(반면 a를 32767로 초기화를 하면 이것은 정수값 중 가장 큰 값이 될 것이기 때문에 문제가 됩니다).
처음 while문을 실행하면 if문의 조건에 의해 max=a;는 실행하지 않고 키보드의 입력을 기다리게 됩니다.
그러다 만일 -32767을 입력했다면 최댓값은 while문의 조건이 참이기 때문에 if문을 실행하는데 if문의 조건이 참이기 때문에 max에 -32767을 넣게 됩니다.
그리곤 다시 키보드의 입력을 기다리죠.

만일 이때 100을 넣으면 while문의 조건이 참이 되어 if문을 실행하고 조건이 참이기 때문에 max에 100을 넣고 키보드의 입력을 기다립니다.
만일 이때 30을 넣으면 while문의 조건이 참이 되어 if문을 실행하고 조건이 거짓이기 때문에 max는 여전히 100이 되고 키보드의 입력을 기다립니다.
만일 이때 0을 넣으면 while문의 조건이 거짓이 되어 printf문을 실행하게 되고 다음과 같은 문장을 화면에 출력하고 종료됩니다.


최댓값은 100입니다.


하지만 굳이 while문을 쓸 필요는 없습니다.
그래도 꼭 쓰겠다면 다음과 같이 쓰는 편이 낫습니다.


int max = -32768;
int a; <- 초기화를 안 하겠다면

scanf("%d", &a); <- 요걸 while문 전에 한 번 더 넣는 것이 좋습니다.

while ( a!=0)

if(a > max)
max = a;

scanf("%d", &a);


printf("최댓값은 %d입니다.\n", max);
12/03/30 01:27
수정 아이콘
컴돌이의 본능으로 말하자면
int a, max = 0; 으로 a 는 초기화가 되어있지 않은데 그렇게 초기화 되지 않은 상태에서 a 를 쓰는것은 매우 위험합니다.
자바의 경우 자동으로 null이나 0으로 초기화를 해주는데 c는 그렇지가 않거든요.
그 값 안에 0이 들어있을지, 다른 어떠한 garbage 값이 들어있을지는 아무도 모르거든요. 그래서 그걸 해결하기 위해
1. 위에 분들이 쓰신것처럼 -1로 초기화를 해주거나
2. scanf를 while 위에 미리 한번더 넣어주거나
3. do
while로 고치고 scanf 다음에 if를 오게 하거나,
어떻게든 고치는게 좋습니다. 어느 방법을 써도 좋기는 한데 변수 선언을 할때 항상 초기화를 해주는 습관은 나중에 어려운 프로그래밍을 할때에도 많은 도움이 될겁니다.
앞으로 가장 많이 경험하게 될 널포인터익셉션이 가장 많이 일어나게 되는 주된 원인이기도 하니까요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
130731 [lol]케넨 질문있습니다 [10] 요우2865 12/03/30 2865
130730 내일 리그오브레전드 용산 직관가려고 하는데 몇시쯤 가야 자리 잡을 수 있나요? [3] 감자해커2160 12/03/30 2160
130729 여러분의 첫사랑 기준은 어떠신가요??? [11] Helloween5109 12/03/30 5109
130728 제모 부작용... 병원에 어떻게 보상을 받아야 할까요? 블루레인코트2220 12/03/30 2220
130727 익스플로러 9 질문입니다. [1] 기미수2785 12/03/30 2785
130726 오늘 해피투게더 어떠셨어요? [11] 냉면과열무3635 12/03/30 3635
130725 회사 미팅시 워밍업 관련해서 질문드립니다. Siva.J2163 12/03/30 2163
130723 사진 퍼오기와 관련된 질문 KID A2102 12/03/29 2102
130722 2년 약정 스마트폰이 아작났습니다 ㅡ.ㅜ [2] 스테비아2151 12/03/29 2151
130721 기혼자에게 묻습니다. [9] ArcanumToss2592 12/03/29 2592
130720 [lol]니달리로 탑에서 케넨이나 블라디 만나면, [4] 럭스3152 12/03/29 3152
130719 c언어 while문 질문이요! [25] VersionA4400 12/03/29 4400
130718 데이트 코스 질문입니다. (서울 인사동 근처..) [5] 사랑2167 12/03/29 2167
130717 성장기 운동 [2] NaS.KiJuK2125 12/03/29 2125
130716 약사나 신경,정형외과 의사 분들께 질문드립니다. (약 성분에 대해서..) [6] 부처6278 12/03/29 6278
130715 KT 갤투 중고폰 시세가 어떻게 되죠?? [4] Love&Hate2097 12/03/29 2097
130714 해외 대학2학년생인데..PEET에 관해서 여쭙겠습니다. [5] 에버츠포드3782 12/03/29 3782
130713 혹시 JTB여행사에 대한 자료를 가지고 있으신분 계시는지요. 相変わらず 2110 12/03/29 2110
130712 영화 스카페이스가 재밌나요?? [8] 9th_Avenue2182 12/03/29 2182
130711 대한민국 역대 10 투수 [10] 다음세기2551 12/03/29 2551
130710 [lol]결과 스샷 어떻게 찍나요? [7] 가을독백2137 12/03/29 2137
130709 인터넷으로 시킬 돼지 갈비 추천해주세요. [1] 케세라세라2238 12/03/29 2238
130708 잠실 시범경기 직관 질문입니다 - 메뉴 추천 받습니다. [4] Noam Chomsky2505 12/03/29 2505
목록 이전 다음
댓글

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