static은 그런 용도로 쓰는게 아니란 말이다!!
글쓴이: superwtk / 작성시간: 토, 2005/10/15 - 10:20오전
(제목에 또 반말써서 죄송합니다=_=..)
모의고사 직업탐구영역 프로그래밍 시험에 나왔던 문제입니다.
Quote:
[19-20] 정렬 알고리즘을 이용하여 데이터를 정렬하는 프로그램이다. 물음에 답하시오.(들여쓰기 칸 수와 띄어쓰기 수도 그대로 옮겼습니다)
#include <stdio.h> void main() { static int p[6]={6,5,3,7,4}; int a, b, t; for(a=1; a<=5; a++){ t=p[a]; b=a-1; while(b>=0 && t<p[b]) { ___(빈칸)____ } p[b+1]=t; } for(a=1; a<=5; a++) printf("%d ", p[a]); } }(옆에 VB코드도 있는데 주제(static 키워드)와 별로 관련이 없으므로 옮기지 않겠습니다)
19. (빈칸) 안에 들어갈 내용으로 알맞은 것은? [3점]
1. p[b]=p[a]; a--;
2. p[b]=p[a+1]; b--;
3. p[b+1]=p[b]; b++;
4. p[b]=p[b+1]; b++;
5. p[b+1]=p[b]; b--;20. 삽입 정렬 프로그램을 완성하여 실행하였을 때, 출력된 내용 중 마지막 값으로 옳은 것은?
1. 5
2. 6
3. 7
4. 8
5. 9
저는 왜 이런 코드만 보면 스트레스를 받는걸까요 :evil:
static 키워드를 단순히 배열 요소들의 값을 0으로 초기화 하는 목적으로 쓰다니... 애들이 보고 뭘 배우겠습니까 :(
쪽팔린 얘기지만, 학교 수업시간에도 static을 배열 초기화 목적으로 사용합니다............
Forums:
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
음... 배열 요소들의 값을 0으로 초기화하는 목적으로 static을 쓴 것 같지는 않아 보이네요. 그냥 전역변수 쓰듯이 쓰는 모양인데... 이런 건 허용됩니다.
int arr[10]={1,2,3}; /* int arr[10]={1,2,3,0,0,0,0,0,0,0}; 과 동일 */
스펙에 다음과 같은 설명이 있으므로, 위의 배열의 나머지 부분은 항상 0으로 채워집니다.
C++ 스펙에도 비슷한 내용이 들어 있습니다.
그나저나 들여쓰기가 참... 인상 깊군요. 학생들이 뭘 배울 지 두렵습니다 이거 -_-;
- 토끼군
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
20번 문제가 재밌군요..
삽입이건..버블이건..퀵이건..정렬을 했으면 제일 큰값이 마지막에올텐데 ;;
날로 먹는 문제네요 :)
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
음.. 내림차순 정렬일수도 있죠 :)
(비교 연산자를 잘 봐야 합니다 ㅋ)
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
전역변수 쓰듯이 쓴다는게.. 무슨말인지 명확히 이해하지 못했습니다 :(
시간 되시면 부가적인 설명좀.. :)
그러게 말입니다 ㅠ_ㅠ
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
그러니까 이런 경우죠. 아래 두 경우 arr 배열은 프로그램 죽을 때까지 살아 있습니다.
출제자가 전역 변수(좀 더 정확히, static storage duration)를 좋아하나 봅니다. -,.-
- 토끼군
아.. 그런말씀이셨군요!근데 저런 코드에서 (main 안에 몽땅 몰아
아.. 그런말씀이셨군요!
근데 저런 코드에서 (main 안에 몽땅 몰아넣은..) 전역변수가 필요 있을까요 8)
그리고 한가지 더 궁금한게 있는데,
void main() 은 어디서 유래한걸까요? 터보씨?
UNIX에서는 main() 에서 int형으로 반환되는 값으로 여러가지를 판단한다고 알고있는데, 터보씨 결과물이 작동되는 환경(윈도우)에서는 그런게 필요가 없나요..?
[quote="superwtk"]아.. 그런말씀이셨군요!근데 저런 코
거기에 대해서는 KLDP에 올라 왔던 글을 참고하세요. 대략 요약하자면,
- 토끼군
[/]Re: static은 그런 용도로 쓰는게 아니란 말이다!!
근데 그냥 int x[6] = ... 이런식으로 하는것하고 static int x[6] = ...이렇게 초기화 하는것이 틀린가요??? static이 배열 초기화 목적이 있는것인지 궁금합니다. 저는 static은 서브펑션에서 값이 사라지지 않고 계속 유지하기 위해서 사용하는것으로 알고 있었는데요...
------------------------
냐옹~~
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
저 또한..
함수가 여러번 불리더라도 그값을 유지하기 위해서 사용하는 건줄 알고 있었습니다만...
위의 프로그램은 궂이 그럴 필요는 없었을 것같기도 하고..
출제자가 어떠한 코드에서 따내다가 그대로 가지고 오지 않았을까 하는 생각도 드네요..
ㅡ_ㅡ;
Re: static은 그런 용도로 쓰는게 아니란 말이다!!
데이타에 있는 최소/최대 값이 3/7 인데 보기에는 7밖에 없으니
찍는다면.. 7을 찍겠죠..ㅡ.ㅡ;
정답을 유도하는 핵심에서 벗어나면 머리 아픕니다.가볍게 정답만 선택해
정답을 유도하는 핵심에서 벗어나면 머리 아픕니다.
가볍게 정답만 선택해 보세요 ~.~;; (너무 무리한 것일까나..)
대게 보면 이런 사소한(?) 것에 의문을 품고 질문하던 사람들이
나중에 더 실력이 있더군요. 그냥 교사가 가르치는것만 아는
이들은 응용력도 떨어져요.
그런 점에서 super wtk 님은 자질이 좀 보이십니다. 더 정진하시길~
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치