= 곽길문 = #새싹과제.20105801 곽길문 1~5.www.koistudy.net 코이스터디 100번~104번까지 Accept받기(등업이 안되어 있으면 그 문제의 소스를 저한테 보내주세요) -#include int main() { int a,b; scanf("%d %d",&a,&b); printf("%d",a+b); return 0; } -#include int main() { int a,b; scanf("%d %d",&a,&b); printf("%d %d",a/b,a%b); return 0; } -#include int main() { double a,b; scanf("%lf %lf",&a,&b); printf("%g ",a*b/2); return 0; } -#include int main() { float r,c; scanf("%f ",&r); c=(float)r/2; printf("%.2f ",c*c*3.14); return 0; } -#include int main() { float n1,n2,n3; scanf("%f %f %f",&n1,&n2,&n3); printf("%.3f ",(float)(n1+n2+n3)/3); return 0; } 6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요) -#include void swap(int *a,int *b); int main() { char x='A',y='B'; printf("x= %c y=%c\n",x,y); swap(&x,&y); printf("x=%c ,y=%c\n",x,y); return 0; } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } 7.2차원 배열(4x4) 두개의 곱을 구하는 프로그램 작성. 2X2행렬의 곱을 해봤습니다 #include int main() { int a[][2]={1,2,3,4}; int b[][2]={1,2,3,4}; int c[2][2]; int j,p,q,w,e,r; printf("행렬의 곱\n"); for(j=0;j<2;j++){ for(p=0;b<2;p++){ if(j==0 && p==0){ q=a[j][p]; w=b[p][j]; e=a[j][p+1]; r=b[p+1][j]; }else if(j==0&& p==1){ q=a[j][p-1]; w=b[p-1][j+1]; e=a[j][p]; r=b[p][j+1]; }else if(j==1&&p==0){ q=a[j][p]; w=b[p][j-1]; e=a[j][p+1]; r=b[p][j]; }else{ q=a[j][p-1]; w=b[p-1][j]; e=a[j][p]; r=b[p][j]; } c[j][p]=q*w+e*r; printf("%d",c[j][p]); } printf("\n"); } return 0; } 8.다음 형태로 출력되는 프로그램을 짜 보세요. 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 22 23 24 25 #include int main() { int a[][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; int c[5][5]; int j,p; for(j=0;j<5;j++){ for(p=0;p<5;p++){ printf("%d", c[j][p]); p++; } printf("\n"); j++; } return 0; } 9.포인터를 이용한 예제코드 하나를 짜 보세요. #include int main() { int num=2; int *a; a=# printf("%d\n",*a); return 0; } //'0'이 출력된다. 10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠? (rand()%1000을 한다면 1에서 1000까지의 숫자가 나올 것입니다.) -linear search란 리스트의 처음부터 하나씩 비교하여 찾아가는 선형탐색을 말한다. 짧은 예제를 공부해서 가려합니다 #include int Lsearch(int ar[], int len, int targer) { int i; for(i=0;i struct Student { int id; int age; char *name; }; int main() { struct Student stu; stu.id =1001; stu.age=10; stu.name ="kim so ri"; printf("id : %d\n",stu.id); printf("age : %d\n",stu.age); printf("name : %s\n",stu.name); return 0; } 2.동적할당이 무엇인지 알아보고, 동적할당을 하는 방법을 써 보세요. -동적할당 malloc에 대해..... molloc은 함수가 원하는 역활은 우리가 원하는 크기의 자료를 메모리에 할당하고 그 주소값을 다시 되돌려 주는 역활이다. 입력값은 원하는 크기, 리턴값은 메모리 주소이다.. 하는 방법 = 포인터 변수 = (포인터의 자료형 )malloc(원하는 자료크기); ex.. arr = (int *)malloc(sizeof(int)*nSize); // malloc으로 nSize만큼 int 형 배열을 생성 malloc을 한 후에는 free을 호출해서 메모리에 할당하였던 것을 풀어주어야 한다. 그렇지 않으면 메모리에 남겨서 필요할때 사용할수가 없다. 3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요. - 포인터의 주소를 가리키는 포인터를 이중포인터라고 한다. #include #include void main() { int **ptr; int i,j,k=1; //int ptr[2][2]; ptr = (int **)malloc(2*sizeof(int *)); for(i=0;i<2;i++) ptr[i] = (int *)malloc(2*sizeof(int)); for(i=0;i<2;i++) { for(j=0;j<2;j++) { ptr[i][j] = k; printf("%d ",ptr[i][j]); k++; } puts(""); } } //솔직히 예제 이해가 잘 안가요 ㅜ 4.스택, 큐가 무엇인지 설명하고, 이를 이용한 간단한 예제를 만들어보세요. -스택이란 후입선출방식의 자료구조, 큐는 선입선출방식으로 처음으로 들어갔던 것이 맨 먼저 꺼낼수 있는 방식이다. #include #define MaxSize 3 int stack[MaxSize]; int sp=0; int push(int); int pop(int *); int main(){ int n=0; push(10); push(20); push(30); if (push(40) == -1) { printf("Stack Overflow\n"); } pop(&n); printf("pop : %d\n",n); pop(&n); printf("pop : %d\n",n); pop(&n); printf("pop : %d\n",n); if(pop(&n) == -1) { printf("Stack Underflow\n"); } return 0; } int push(int n) { if(sp0) //값이 있을 때 { sp--; *n=stack[sp]; return 0; }else { return -1; //비었을 때. underflow } } // pop으로 데이터를 추출할때 마지막에 들어간 30부터 나오게 된다. -큐 예제 #include #include #define MAX 5 int queue[5]; int rear = 0; int front = 0 ; void insert(int vall) { queue[rear++] = vall; } void Delete() { if(rear < 0 ) printf("더이상 비울 큐가 없음"); else --rear; } void main() { int insert_num; int i,j; for(i=0; i<5; i++) { printf("숫자를 입력하세요"); scanf("%d", &insert_num); insert(insert_num); } for(j=0; j아직 이해가 잘 안됨ㅠ.ㅠ 3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요. 이중 포인터는 싱글 포인터의 주소 값을 저장하기 위한 용도로 사용되는 포인터이다. a_03.c 4.스택, 큐가 무엇인지 설명하고, 이를 이용한 간단한 예제를 만들어보세요. 스택 – 데이터 입/출력이 한쪽으로만 접근 할 수 있는 자료 구조. 가장 나중에 들어간 데아타가 제일 먼저 나오게 된다. 큐 – 먼저 넣은 데이터가 먼저 나오는 FIFO구조. 스택과 반대되는 개념의 자료구조. ->(예제는 어떻게 만들어야 될지 잘 모르겠음!ㅜ.ㅜ) = 한송이 = 1 100) #include int main(){ int a,b; scanf("%d",&a); scanf("%d",&b); printf("%d",a+b); return 0; } 2 101) #include int main() { int a,b,c,d; scanf("%d %d",&a,&b); c=a/b; d=a%b; printf("%d %d",c,d); return 0; } 3 102) #include int main() { int u,h; double s; scanf("%d %d", &u,&h); s = (u*h)/2.0; printf("%g",s); return 0; } 4 103) #include int main() { int R; double s,r ; scanf("%d", &R); r=R/2.0; s = 3.14*r*r; printf("%.2lf",s); return 0; } 5 104) #include int main() { int a,b,c; double ave ; scanf("%d %d %d", &a, &b, &c); ave = (float)(a + b + c) / 3.0; printf("%.3lf",ave); return 0; } 6 105) #include int main(){ double a,b,c,d; scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c); d=-(b/a); printf("%g",d); return 0; } 7.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요) #include void point(int *pval1 , int *pval2) { int temp; temp = *pval1; *pval1=*pval2; *pval2= temp; } void main() { int val1; int val2; val1=10; val2=20; printf("%d %d \n" , val1, val2); point(&val1, &val2); printf("%d %d \n" , val1, val2); } 8.2차원 배열(4x4) 두개의 곱을 구하는 프로그램 작성. #include int main() { int a[4][4],b[4][4],c[4][4],d[4][4]={0},i,j,k,l; printf("배öe열¯¡© a 입O력¤A : "); for(i=0; i<4; i++) //a배öe열¯¡© 입O력¤A { for(j=0; j<4; j++) scanf("%d",&a[i][j]); } printf("배öe열¯¡© b 입O력¤A : "); for(i=0; i<4; i++) //b배öe열¯¡© 입O력¤A { for(j=0; j<4; j++) scanf("%d",&b[i][j]); } for(i=0; i<4; i++) { for(j=0; j<4; j++) { for(k=0; k<4; k++) { for(k=0; k<4; l++) { d[i][j] += a[i][j]*b[k][j]*c[k][l]; <<<이부분 어떻게 해야할지 잘 모르겠어요 } } } } for(i=0; i<4; i++) { for(j=0; j<4; j++) { printf("%4d ",d[i][j]); <<여기두요 } printf("\n"); } return 0; } 9.다음 형태로 출력되는 프로그램을 짜 보세요. 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 22 23 24 25 #include int main() { int arr[5][5] = {0,}; int i, j, k=1; for(i=0; i<5; i++) { if(i%2==0) { for(j=0; j<5; j++) arr[i][j] = k++; } else { for(j=4; j>=0; j--) arr[i][j] = k++; } } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%3d", arr[i][j]); printf("\n"); } return 0; } 10.포인터를 이용한 예제코드 하나를 짜 보세요. #include int main(){ char ch; char *p; char *q; ch = 'A'; p = &ch; q = p; *p = 'Z'; printf("ch가Æ¢® 가Æ¢®지o고Æi 있O는¥A 값ƨ£ : ch=> %c\n",ch); } 11.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠? (rand()%1000을 한다면 1에서 1000까지의 숫자가 나올 것입니다.) 12.Sort를 하나 구현해보세요. 11번과 같은 방법으로 숫자를 랜덤으로 넣은 후, 정렬하고, 정렬된 것을 출력하면 됩니다. 13.이번시간에 배웠던 내용을 바탕으로, int* a; int b;로 선언했을때 &a,a,*a,&b,b에 관해서 각각 설명하고, 어떤 것이 어떤 것과 일치하는 것인지를 이해할 수 있도록 쉬운말로 정리해보세요.(예제 코드를 작성한 후에 테스트해보고 써보는 것도 좋은 방법일 것입니다.) &a : a의 주소 *a : a의 주소가 가르키는 실제값, a에 들어있는 값 &b : b의 주소 *b : b의 주소가 가르키는 실제값, b에 들어있는 값 *a = b *b = a 1.4.1.2 예습 ¶ 1.구조체가 무엇인지 알아보고, 간단한 구조체 하나를 만들어보세요. 구조체 : 서로 다른 종류의 데이터를 저장하기 위한 여러 자료형 변수들의 집합 #include int main(){ struct student{ char name[10]; int age; }; struct student s={"한N송ùU이I",23}; printf("이I름¬¡× : %s\n",s.name); printf("나ø¨£이I : %d\n",s.age); return 0; } 2.동적할당이 무엇인지 알아보고, 동적할당을 하는 방법을 써 보세요. 동적 할당을 하는 이유 : 메모리를 절약하기 위해 동적 할당에 가장 기번적으로 사용되는 것은 malloc함수이고, 이 함수를 사용하기 위해서는 "stdlib.h"헤더파일을 포함해야 한다 포인터 변수 = (포인터의 자료형 종류)malloc(원하는 자료크기); 3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요. 이중포인터 : 포인터 변수를 가르키는 포인터 이중포인터 사용이유 : 포인터형 변수가 가지고 있는 주소를 다른 지역에서 컨트롤 (바꾸기 ) 위해 ! (데이터를 체인지 하는게 아니라 주소를 체인지) 이중포인터 선언 방법 Int **p; 4.스택, 큐가 무엇인지 설명하고, 이를 이용한 간단한 예제를 만들어보세요. 스택 : 자료를 여러개를 넣었다가 나중에 사용하려고 할 때에는 나중에 넣은 것이 먼저 나오는 구조 큐(Queue) : 프로그램 언어에서 보면 자료 구조의 한 형태로 순차 목록의 한 형태를 뜻합니다. 원소의 삽입은 뒤(rear)에서 이루어지고 삭제는 앞(front)에서 이루어지는 자료 구조를 뜻합니다. 메모리에 적용할 경우 큐는 선입선출 방식을 뜻합니다. = 황혜림 = 12.이번시간에 배웠던 내용을 바탕으로, int* a; int b;로 선언했을때 &a,a,*a,&b,b에 관해서 각각 설명하고, 어떤 것이 어떤 것과 일치하는 것인지를 이해할 수 있도록 쉬운말로 정리해보세요.(예제 코드를 작성한 후에 테스트해보고 써보는 것도 좋은 방법일 것입니다.) a : a에 들어있는 값 &a : a의 주소 *a : a가 가르키는 변수의 값 &b : b의 주소 b : b에 들어있는 값 1.4.1.2 예습 1.구조체가 무엇인지 알아보고, 간단한 구조체 하나를 만들어보세요. - 다른 종류의 데이터를 하나로 묶어서 사용 하는 데이터 결합법 struct Student { int id; int age; char* name; }; 2.동적할당이 무엇인지 알아보고, 동적할당을 하는 방법을 써 보세요. - 필요한 만큼의 메모리를 직접 동적으로 관리 할 수 이쏘록 해주는 함수이다. int* pTmp=malloc(100); int* pTmp=(int*)malloc(100); 3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요. - 포인터의 주소를 가르키는 포인터 4.스택, 큐가 무엇인지 설명하고, 이를 이용한 간단한 예제를 만들어보세요. 스택 : LIFO(후입선출) 자료를 나중에 넣은 것이 먼저 나오는 자료구조 큐 : FIFO(선입선출) 먼저 넣은 자료가 먼저 나오는 자료구조 ---- [새싹교실/2012/AClass],[새싹교실/2012]