Computer Science/Data Structure, Algorithm

DataStructure] C언어로 쉽게 풀어쓴 자료구조 3장 - 2

TwinParadox 2018. 5. 23. 20:17
728x90

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];
};

728x90