16. 다음의 코드에서 잘못된 곳을 찾아라.
main()
{ int i, a[10];
for(i=0;i<=10;i++) // 답 : i<=10이 아닌 i<=9로 해야함. 배열의 범위 초과.
a[i]=0;
}
17. 다음과 같이 정의된 배열의 10번째 요소의 주소는? 단 배열의 시작 주소는 1000번지로 한다.
(1) char a[100]; 답 : 1010
(2) short b[100]; 답 : 1020
(3) int c[100]; 답 : 1040
(4) float d[100]; 답 : 1040
18. 크기가 5인 정수 배열을 생성하고 {1,2,3,4,5}로 초기화하는 문장을 써라.
답 : int a[5]={1,2,3,4,5};
19. 구조체 배열을 만들어보자. 정수 항목인 number와 문자열 항목인 name을 가지는 구조체를 정의하고 크기가 100인 이 구조체의 배열을 생성해보라.
struct student
{
int number;
char* name[100];
}
20. 10개의 정수 포인터의 배열을 정의하여보라.
int *ptr[10];
21. i가 정수 변수이고 p와 q가 정수를 가리키는 포인터라면 다음 중 어느 문장이 컴파일 오류를 발생할 것인지를 지적하고 그 이유를 밝혀라.
답 : (3) p=&*i; // 단순 정수 변수에 포인터 연산자를 대입하는 것부터 틀렸다.
22. 다음의 각각의 문장들을 수행한 다음에 변수들과 포인터들이 서로 연결된 모습을 그림으로 그려라.
void main() {
int i=10, j=20;
int *pa=&i, *pb=&j;
*pa=*pb;
pa=pb;
}
i=20이고, j도 20이며 pa와 pb가 j를 가리키는 모양.
23. 포인터 p1과 p2가 선언되어 있을 때 다음의 문장의 의미를 구별하여 설명하여보라.
(1) p1=p2; // p2에 저장된 메모리의 주소값을 p1에 대입.
(2) *p1=*p2 // p2가 가리키는 값을 p1이 가리키는 값에 대임.
24. 포인터 p에 대한 연산 중 p와 같은 것은?
답 : (1)&*p, (2)*&p
25. 다음을 설명하여보라.
(1) int **p; // int형 포인터에 대한 포인터 p
(2) int *p[100]; // int형 포인터 배열 100개
(3) void (*f)(int); // int형 파라미터 하나를 사용하며 반환형이 void인 함수 포인터 f
26. 배열 x를 {1,2,3,4,5,6}으로 초기화한 후 포인터 p를 정의하고 포인터 p에 저장할 주소는 x[2]로 하고 *(p+3)와 *(p-2) 및 그 값의 곱을 구하는 프로그램을 작성하라.
#include<stdio.h> int main() { int x[] = {1,2,3,4,5,6}; int *p = &x[2]; printf("%d,%d,%d", *(p+3), *(p-2), *(p+3) * *(p-2)); return 0; }
27. 1개의 정수와 최대 크기가 20인 문자열로 이루어진 구조체를 저장할 수 있도록 동적 메모리를 할당받고 여기에 정수 100과 문자열 "just testing"을 저장한 다음, 동적 메모리를 반납하는 프로그램을 작성하라.
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { struct test{ int i; char str[20]; } struct test *ptr; ptr = (struct test*)malloc(sizeof(struct test)); if(ptr==NULL) { printf("memory error"); return; } ptr->i=100; strcpy(ptr->str, "just test"); free(ptr); }
28. C언어의 typedef를 이용하여 complex라고 하는 새로운 자료형을 정의하라. complex 자료형은 구조체로서 float형인 real 변수와 역시 float형인 imaginary 변수를 갖는다. complex 자료형으로 변수 c1과 c2를 선언하여보라.
typedef struct { float real; float imaginary } complex; complex c1, c2;
29. person이라는 구조체를 만들어보자. 이 구조체에는 문자 배열로 된 이름, 사람의 나이를 나타내는 정수의 값, 각 개인의 월급을 나타내는 float 값 등이 변수로 들어가야 한다.
struct person { int age; float salary; char name[100]; char address[100]; };
30. 29번의 구조체에 생년월일을 추가하고자 한다. 다음과 같은 구조체를 29번 구조체 내부에 포함시켜보라.
struct person { int age; float salary; struct { int month; int day; int year; } birth; char name[100]; char address[100]; };
'Computer Science > Data Structure, Algorithm' 카테고리의 다른 글
DataStructure] C언어로 쉽게 풀어쓴 자료구조 10장 - 1 (3) | 2019.04.02 |
---|---|
해시테이블(Hash Table)과 체이닝(Chaining)에 대한 간략한 정리 (0) | 2018.09.30 |
DataStructure] C언어로 쉽게 풀어쓴 자료구조 3장 - 1 (0) | 2018.05.18 |
두근두근 자료구조 2장 프로그래밍 프로젝트 1번 (1) | 2018.04.12 |
두근두근 자료구조 2장 연습문제 (0) | 2018.04.11 |