연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95
10 7 4 1-2 함수의반환값 =3 1 2 3 4 5
연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다. 2. 다음중배열에관한문장중문법에맞지않는것은? (1) int a[]={1,2,3,4}; (2) char b[10], c[20]; (3) char **pa[10]; (4) char *pb[10]="i am a student"; 3. float a[100] 으로선언된배열의시작주소를 1000번지라고할때, 배열의 10번째요소의주소는몇번지인가? 1000+10*sizeof(float)=1040 (1) 1000번지 (2) 1010번지 (3) 1020번지 (4) 1040번지 4. 구조체에관한내용중틀린것은? (1) 구조체의배열이가능하다. (2) 구조체변수에대하여비교연산이나산술연산을할수있다. (3) 구조체안에배열을넣을수있다. (4) 서로다른데이터형도묶을수있다. 5. int i=10; int *p; p=&i; *p=8; 의문장이수행되면 i값은얼마인가? (1) 11 (2) 10 (3) 9 (4) 8
6. int i=10; int *p; p=&i; (*p)--; 의문장이수행되면 i값은얼마인가? (1) 11 (2) 10 (3) 9 (4) 8 7. int a[10]; int *p; p=a; *p++=5; 의문장이수행되면변경되는배열의요소는? (1) a[0] (2) a[1] (3) a[2] (4) a[3] 8. int a[10]; int *p; p=a; *++p=5; 의문장이수행되면변경되는배열의요소는? (1) a[0] (2) a[1] (3) a[2] (4) a[3] 9. int a[10]; int *p; p=a; (*p)++; 의문장이수행되면변경되는배열의요소는? (1) a[0] (2) a[1] (3) a[2] (4) a[3] 10. int a[10]; int *p; p=a; *(p+1)++; 의문장이수행되면변경되는배열의요소는? (1) a[0] (2) a[1] (3) a[2] (4) a[3] 11. int a[10]; int *p; p=a; (*(p+1))++; 의문장이수행되면변경되는배열의요소는? (1) a[0] (2) a[1] (3) a[2] (4) a[3] 12. struct { int fa; int fb; } a; int *p=&a; 라고할때 fa를수정하는문장으로맞는것은? 문제에오류가있습니다. 다음과같이수정하여주십시요. -> struct { int fa; int fb; } a, *p=&a; 라고할때 fa를수정하는문장으로맞는것은? (1) p.fa = 10; (2) p->a.fa = 10; (3) (*p).fa = 10; (4) p[0].fa = 10; 13. 다음과같은문장을수행하고난뒤의 a[0] 의값은?
void sub(int b[]) { b[0] = 0; } void main() { int a[]={1,2,3,4,5,6}; sub(a); } (1) 0 (2) 1 (3) 2 (4) 3 14. 다음과같은문장을수행하고난뒤의 a.field1의값은? struct test { int field1; }; void sub(struct test b) { b.field1 = 1; } void main() { struct test a={ 0 }; sub(a); } (1) -1 (2) 0 (3) 1 (4) 2 15. 다음과같은문장을수행하고난뒤의 a.field1의값은? struct test { int field1; }; void sub(struct test *b) { b->field1 = 1; } void main() { struct test a={ 0 }; sub(&a); } (1) -1 (2) 0 (3) 1 (4) 2 16. 다음의코드에서잘못된곳을찾아라. main() { int i, a[10]; for(i=0;i<=10;i++) a[i] = 0; } -> main() { int i, a[10]; for(i=0;i<10;i++) a[i] = 0; } 17. 다음과같이정의된배열의 10번째요소의주소는? 단배열의시작주소는
1000번지로한다. (a) char a[100]; (b) short b[100]; (c) int c[100]; (d) float d[100]; 1000+100*sizeof(char)=1100 1000+100*sizeof(short)=1200 1000+100*sizeof(int)=1400 1000+100*sizeof(float)=1400 18. 크기가 5인정수배열을생성하고 {1,2,3,4,5} 로초기화하는문장을쓰시오. int a[5]={1,2,3,4,5,6}; 19. 구조체배열을만들어보자. 정수항목인 number와문자열항목인 name을가지는구조체를정의하고크기가 100인이구조체의배열을생성해보라. struct { int number; char name[size]; } sa [100]; 20. 10 개의정수포인터의배열을정의하여보라. int *pi[10]; 21. i가정수변수이고 p와 q가정수를가리키는포인터라면다음중어느문장이컴파일오류를발생할것인지를지적하고그이유를밝히시오. (1) p = &i; (2) p = *&i; -> i의값이 p로대입 ( 경고 ) (3) p = &*i; -> i가포인터가아니므로 *i는컴파일오류 (4) i = *&*p; 22. 다음의각각의문장들을수행한다음에변수들과포인터들이서로연결된모습을그림으로그려라. void main() { int i=10, j=20; int *pa=&i, *pb=&j; *pa = *pb; pa = pb; }
i 10 j 20 i 10 j 20 pa pb i 10 j 20 pa pb i 20 j 20 pa pb i 20 j 20 pa pb 23. 포인터 p1과 p2가선언되어있을때다음의문장의의미를구별하여설명하여보라. (1) p1 = p2; -> 포인터 p2가가지고있는주소값을포인터 p2에대입 (2) *p1 = *p2;-> 포인터 p2가가리키는값을포인터 p2가가리키는곳에대입 24. 포인터 p에대한연산중 p와같은것은? (1) &*p (2) *&p (3) &&p (4) **p 25. 다음을설명하여보라. (1) int **p; 정수의포인터에대한포인터 p (2) int *p[100]; 정수포인터배열 p( 크기 100) (2) void (*f)(int) ; 정수매개변수와 void 반환값을가지는함수에대한포인터 f 26. 배열 x를 {1,2,3,4,5,6} 으로초기화한후포인터 p를정의하고포인터 p에저장할주소는 x[2] 로하고 *(p+3) 와 *(p-2) 및그값의곱을구하는프로그램을작성하라. #include <stdio.h>
// 배열 x를 {1,2,3,4,5,6} 으로초기화한후포인터 p를정의하고 // 포인터 p에저장할주소는 x[2] 로하고 //*(p+3) 와 *(p-2) 및그값의곱을구하는프로그램을작성하라. 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)); 27. 1개의정수와최대크기가 20인문자열로이루어진구조체를저장할수있도록동적메모리를할당받고여기에정수 100과문자열 just testing" 을저장한다음, 동적메모리를반납하는프로그램을작성하라. #include <stdio.h> #include <malloc.h> #include <string.h> //1개의정수와최대크기가 20인문자열로이루어진구조체를저장할수있도록 // 동적메모리를할당받고 // 여기에정수 100과문자열 just testing" 을저장한다음, // 동적메모리를반납하는프로그램을작성하라. void main() { struct test { int i; char str[20]; }; struct test *p; p=(struct test *)malloc(sizeof(struct test)); if( p==null ) { printf("memory error"); return; }
} p->i=100; strcpy(p->str,"just testing"); free(p); 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 { char name[size]; int age; float salary; }; 30. 29번의구조체에생년월일을추가하고자한다. 다음과같은구조체를 25번구조체내부에포함시켜보라. struct { int month; int day; int year; }; #define SIZE 100
struct person { char name[size]; int age; float salary; struct { int month; int day; int year; } birthday; };