:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
12/03/29 23:07
?? 무엇을 질문하는지 잘 모르겠네요;;
이미 위에 int(.. 라고 생각하겠습니다. char 형이면 형변환이 필요하니..)형으로 선언했을 테니 패스하고 a != 0 은 0이 아닐 경우 반복문을 계속 수행 여부이며 if 문은 입력된 a 가 max 보다 작다면 max를 갱신하라 이며 이후 다시 a를 통해 입력하라 인데;;;
12/03/29 23:07
입력한 정수 중에 최대값을 고르라고 했으니까 max에 최대값을 넣어 놓고 새로 입력 a가 들어오면 max보다 큰지 비교해서 max를 갱신하고 그런거네요.
12/03/29 23:08
그러니까 정수를 입력받아서 제일 큰 정수를 구하고 입력값의 마지막은 0이 들어오며 반복문이 종료된다는거죠?
if(a > max) max = a; 이 부분을 한글로 풀어 쓰면 이렇게 되겠죠. 만약 a가 max보다 크면, max의 값을 a에 넣어라. 위의 문장을 a가 0이 될때 까지 돌리는거겠죠.
12/03/29 23:37
저게 궁금하신 상태라면 c 언어 책 펴놓고 문법부터 다시 공부하시는게 지금 과제는 못해도 시험 잘보고 결과적으로 좋은 학점 나오는 길일듯 합니다..;;
12/03/29 23:38
음.. 하긴 문법부터 다시 공부하고말것도 없이 이제 처음 배우시는것일 테니.. 차근차근... 공부하시기를.. -_-;
그러면 학기 말에는 웃으실거에요 ^^; 4년제 컴공 졸업해서 전공과목만 순수 실력으로 A 이상 받을정도로 공부하셔도 국내 어느 IT 대기업을 가도 인정 받을거에요 ^^;
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. dowhile로 고치고 scanf 다음에 if를 오게 하거나, 어떻게든 고치는게 좋습니다. 어느 방법을 써도 좋기는 한데 변수 선언을 할때 항상 초기화를 해주는 습관은 나중에 어려운 프로그래밍을 할때에도 많은 도움이 될겁니다. 앞으로 가장 많이 경험하게 될 널포인터익셉션이 가장 많이 일어나게 되는 주된 원인이기도 하니까요.
|