int a[5],b[5] = {1,2,3};
A. if(a==b) printf("yes");
B. a[b[1]] = 2;
C. a[5] =1;
D. a = b;
E. a[0] = b[0];
풀이 :
A. 배열 비교 불가능하다.
B.
b[1] = 2 임으로 a[b[1]] = a[2] = 3 이다. 하지만 여기선 배열을 새롭게 선언한 것임으로 a[2] = 2; 로 선언된 것과 같다. 따라서 배열 변수 선언 뒤에 나올 수 있는 문장이다.
C.
초기값이 (여기서는 5) 가 배열 원소 (여기서는 1,2,3) 보다 적으면 오류가 나오지만 더 많을 경우 나머지 선언되지 않은 배열 변수들은 0으로 선언된 상태이다.
따라서 a[0] = 1, a[1] = 2 , a[2] =3 , a[3] = 0 , a[4] = 0
a[5] = 1; 을 추가로 선언한 후에 printf 를 해보니 제대로 출력이 되었다.
D. 배열끼리는 치환 혹은 비교가 불가능하다.
E. 배열 원소끼리는 치환이 가능하다. 따라서 올바른 문장이다.
2. 다음과 같이 배열 변수를 초기화 했을 때, c[4]의 값은?
int c[5] = {1,2,3};
풀이 :
c[0] =1'
c[1] = 2;
c[2] = 3 ;
c[3] = 0;
c[4] = 0;
3. 다음과 같이 이차원 배열 변수를 초기화 했을 때, d[2][1] 의 값은?
int d[3][3] = {{1,2},{3},{4,5}};
풀이
앞의 d[2] 는 {4,5} 이다.
d[2][1] 은 5이다.
4. 삼차원 배열 e[3][2][4]가 기억장소에 배치될 때, e[1][1][3] 다음 위치에 오는 것은?
풀이
e[2][0][0] 이다.
5. scanf() 를 써서 배열 원소 a[i]의 값을 입력받는 방법으로 맞는 것은?
A. scanf("%d",a[i]);
B. scanf("%d",&a[i]);
C. scanf("%d",a[&i]);
D. scanf("%d",&a[&i]);
풀이
답은 B이다.
문자열을 입력받고 싶을 때는 다음과 같이 &를 쓰지 않는다.
scanf("%s", a);
6. 다음 중 함수에서 배열을 매개변수로 받을 때 오류가 나는 것을 모두 고르시요.
A. int f(int d[][4][3])
B. int f(int e[4][])
C. int f(int a[])
D. int f(int b[][][3])
E. int f(int c[][3])
풀이
첫번째 첨자를 제외한 나머지 첨자의 크기는 지정해야 함.
A는 첫번째 첨자만 지정되지 않았음으로 오류가 나지 않는다.
B는 오류가 난다.
C가 헷깔릴 수 있는데 다차원 배열이 아닌 1차원 배열일 경우 뒤에 선언된 원소에 따라 배열이 선언된다, 오류가 나지 않는다.
D. 두번 째 첨자가 선언되지 않았음으로 오류가 난다.
E. 첫번째 첨자의 크기만 지정되지 않았음으로 오류가 나지 않는다.
7. 배열 변수를 int a[3]; 과 같이 선언했을 때, a만 따로 사용했을 때의 의미는?
A. 의미 없음(a만 사용하면 오류)
B. 배열 a의 마지막 원소의 주소
C. 배열 a의 첫 번째 원소의 값
D. 배열 a의 마지막 원소의 값
E. 배열 a의 첫 번째 원소의 주소
풀이
배열을 함수로 전달하면 원본 그대로 전달되는 것이 아니다.
원본의 '주소'가 전달된다. 배열명은 포인터로 취급하기 때문에
void test( int a[]) 와 void test(int * a) 처럼 두개의 함수에 모두 인자로 전달이 가능하다.
여기에서 전달되는 건 배열명의 첫번째 주소값이다.
8. 다음 문장들이 순서대로 나오는 프로그램을 번역하고 실행하려고 할 때 어떤 일이 일어나는가?
float const a = 1.0;
a= 2.0;
A. 최종적으로 a에 2.0 이 저장된다.
B. a에 1.0이 저장되고 두 번째 문장은 무시된다.
C. 번역할 때, 두 번째 문장 a = 2.0; 에서 오류가 생긴다.
D. 번역할 때, 첫 번째 문장 float const a = 1.0; 에서 오류가 생긴다.
풀이
함수가 전달받은 배열을 변경하지 못하게 하려고 const로 선언한 건데 두번 쨰 문장에서 배열을 변경하려 했음으로 두 번쨰 문장에서 오류가 생긴다.
No comments:
Post a Comment