4회차 ê³¼ì œ 업로드 ¶
- 코드는
{{{ }}}안� 넣으면 �니다.
곽길문 ¶
11.ì�´ë²ˆì‹œê°„ì—� ë°°ì› ë�˜ ë‚´ìš©ì�„ 바탕으로, int* a; int b; int **c;로 ì„ ì–¸í–ˆì�„때 &c,c,*c,&a,aì—� 관해서 ê°�ê°� ì„¤ëª…í•˜ê³ , ì–´ë–¤ 것ì�´ ì–´ë–¤ 것과 ì�¼ì¹˜í•˜ëŠ” 것ì�¸ì§€ë¥¼ ì�´í•´í• 수 있ë�„ë¡� 쉬운ë§�로 ì •ë¦¬í•´ë³´ì„¸ìš”.
-ì�´ì¤‘í�¬ì�¸í„°ëŠ” í�¬ì�¸í„°ì�˜ 주소값ì�„ 갖는 것입니다. 그거ì—� ë”°ë�¼ì„œ &c는 ìž�기 ìž�ì‹ ì£¼ì†Œë¥¼ ì�˜ë¯¸í•˜ëŠ” 것ì�´ê³ c는 í�¬ì�¸í„° aì�˜ 주소값ì�„ ë§�합니다. *cë˜�한 aì�˜ 주소값입니다 . &a는 aì�˜ 주소값, a는 aê°€ b를 가리키는 것ì�´ë�¼ë©´ bì�˜ 주소값ì�„ ë§�합니다.12.ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;int* a;
int** c;
c=&a;
a=&b;
>
a=&b;
- *c=9;
printf("%d %d",*c,**c);
-해설 : ìš°ì„ int형 ìž�료형ì�„ 가진 ë�°ì�´í„°ì�˜ 주소를 가리키는 í�¬ì�¸í„°ë¡œ aì§€ì •, bì�˜ ê°’ì—� 5를 ì§€ì •, í�¬ì�¸í„°ì�˜ 주소를 가리키는 c를 ì§€ì •í•˜ì˜€ë‹¤. aì�˜ 주소를 ì�´ì¤‘ í�¬ì�¸í„° cì—� 주었다. bì�˜ 주소는 í�¬ì�¸í„° aì—� í• ë‹¹í•˜ì˜€ë‹¤. ê·¸ë¦¬ê³ ì�´ì¤‘í�¬ì�¸í„°cì—� ê°’ì�„ 9로 주었다. ì�´ê²ƒì�€ ì›�래ì�˜ aì�˜ 주소값ì�„ ê°–ê³ ìžˆë�˜ cì—� 9를 대체해준 것ì�´ë‹¤. ë”°ë�¼ì„œ 프린트 *c,**c를 하면 aì�˜ 주소와 9ê°€ ì¶œë ¥ì�´ ë�œë‹¤.
-ì›�형 í��로 기본 í��와 마찬가지로 첫 번째 ë�°ì�´í„°ê°€ 추가ë�˜ëŠ” 순간 í��ì�˜ 처ì�Œê³¼ ë��부분ì�´ ê·¸ ë�°ì�´í„°ë¥¼ 가리키게 ë�œë‹¤. 처ì�Œì�„ F ë��부분ì�„ 가리키는 것ì�„ Rì�´ë�¼í•˜ë©´ 꽉찬 경우나 텅빈경우ì—� Fê°€ Rì�˜ 한칸 앞ì�„ 가리키는 것ì�€ 같기 때문ì—� F,Rì�˜ 위치만ì�„ ê°€ì§€ê³ ê½‰ 찬경우와 í…… 빈 경우를 êµ¬ë¶„í• ìˆ˜ ê°€ 없다. ë”°ë�¼ì„œ ì�´ì™€ ê°™ì�€ ë¬¸ì œë¥¼ 해결하는 방법ì�€ ë§Žê² ì§€ë§Œ ê·¸ 중 하나는 ë°°ì—´ì�„ 꽉 채우지 ì•Šê³ ë°°ì—´ì�˜ 길ì�´ê°€ Nì�´ë�¼ë©´ N-1ë§Œí�¼ë§Œ 채워 졌ì�„ 때 꽉 ì°¬ 것으로 간주하는 방법ì�´ë‹¤. ì�´ë ‡ê²Œ 하면 ì €ìž¥ 공간 하나를 ë‚비하게 ë�œë‹¤. 하지만 ì�´ë¡œ ì�¸í•´ì„œ ë¬¸ì œ 하나가 í•´ê²°ì�´ ë�˜ëŠ” ì…ˆì�´ë‹¤.
- c언어ì—�서는 char,int,float 와 ê°™ì�€ ë§Žì�€ 수ì�˜ 기본 ë�°ì�´í„° 형과 ë°°ì—´, í�¬ì�¸í„°, 구조체 등ì�˜ ìœ ë�„ë�œ ë�°ì�´í„°í˜•으로부터 새로운 ë�°ì�´í„°í˜•ì�„ 만들 수 있는ë�°, 사용ìž� 측면ì—�서 새로운 ë�°ì�´í„° 형ì�„ ì •ì�˜ í• ìˆ˜ 있ë�„ë¡� typedefì„ ì–¸ì�„ ì œê³µí•œë‹¤. typedefì�€ #defineê³¼ 달리 ì�´ë¯¸ 존재하는 c언어ì�˜ ë�°ì�´í„° 형만ì�„ 취하여 ì •ì�˜í•˜ê³ typedefì�€ 프리프로세서ì—� ì�˜í•´ 처리ë�˜ëŠ” 것ì�´ 아니ë�¼ c컴파ì�¼ëŸ¬ì—� ì�˜í•´ 처리ë�œë‹¤. ë˜�한 #define보다 다양한 형태ì�˜ 치환ì�´ 가능하다.
< �반 형� : typedef 기존 ��터형 새로운 ��터형; >
ì˜ˆì œ :
#include <stdio.h>
void main()
{
typedef char *YOU;
YOU name ="color";
YOU color = "red, blue, yellow, black";
YOU color = "red, blue, yellow, black";
printf("name=%s \n",name);
printf("color=%s \n",color);
printf("color=%s \n",color);
}
ê²°ê³¼ :
name =color
color =red, blue, yellow, black
해설 :
typedef문ì—�서 기존 ë�°ì�´í„°í˜• char를 새로운 ë�°ì�´í„°í˜• ì�´ë¦„으로 *YOU를 ì •ì�˜í–ˆê³ YOU nameì�´ë�¼ ì •ì�˜í•˜ë©´ ì�´ëŠ” char *name로 나타낸것과 같다.
4.구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
#include<stdio.h>
struct Student
{
int age;
char name[];
};
int main()
{
int i;
struct Student stu4={24,"길±æ문¹�"},{24,"�≫o�En"},{23,"송¼U�AI"},{22,"혜Cy림¸²"};
for(i=0;i<4;i++){
printf("age : %d\n name : %s \n",stui.age,stui.name);
}
return 0;
}
-나머지는 월요ì�¼ ì €ë…�까지 ì˜¬ë¦¬ê² ìŠµë‹ˆë‹¤
ê²°ê³¼ :
name =color
color =red, blue, yellow, black
해설 :
typedef문ì—�서 기존 ë�°ì�´í„°í˜• char를 새로운 ë�°ì�´í„°í˜• ì�´ë¦„으로 *YOU를 ì •ì�˜í–ˆê³ YOU nameì�´ë�¼ ì •ì�˜í•˜ë©´ ì�´ëŠ” char *name로 나타낸것과 같다.
구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
-.. 왜 �러가 뜰까..#include<stdio.h>
struct Student
{
int age;
char name[];
};
int main()
{
int i;
struct Student stu4={24,"길±æ문¹�"},{24,"�≫o�En"},{23,"송¼U�AI"},{22,"혜Cy림¸²"};
for(i=0;i<4;i++){
printf("age : %d\n name : %s \n",stui.age,stui.name);
}
return 0;
}
-나머지는 월요ì�¼ ì €ë…�까지 ì˜¬ë¦¬ê² ìŠµë‹ˆë‹¤
황혜림 ¶
8.다ì�Œ 형태로 ì¶œë ¥ë�˜ëŠ” 프로그램ì�„ ì§œ 보세요.
ì €ë²ˆì£¼ ê³¼ì œ 8번ì—� ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ 해당 ë¬¸ì œë¥¼ 푸셔ë�„ ë�©ë‹ˆë‹¤. ì•„ì§� ì�´í•´ê°€ 잘 안가시면 ì €ë‚˜ 다른분들ì—�게 물어ë´�ìš”
1
3 2
4 5 6
10 9 8 7
11 12 13 14 15
21 20 19 18 17 16
hint) Dp = (int**)malloc(sizeof(int*));
10.3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
//10.LinearSearch를 구현해보세요. ë°°ì—´ì�€ 1000개로 ìž¡ê³ , random함수를 ì�´ìš©í•´ 1부터 1000까지ì�˜ 숫ìž�를 ëžœë�¤ìœ¼ë¡œ ë°°ì—´ì—� ë„£ì�€ 후, 777ì�´ ë°°ì—´ë‚´ì—� 있었는지를 찾으면 ë�©ë‹ˆë‹¤.
&c : c� 주소
c : c� 값(a� 주소)
*c : c가르키는 곳� 값(b� 주소)
&a : a� 주소
a : a� 값(b� 주소)
c==&a
*c==a==&b
12.ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;
int** c;
c=&a; // c� a� 주소 넣어 줌
a=&b; // a� b� 주소 넣어 줌
**c=9; // c� 방(?)� 9를 넣어 줌
printf("%d %d",*c,**c); // *cì—�는 aì�˜ 주소가 들어 ê°€ìžˆê³ **cì—�는 bì�˜ ê°’ì�´ 들어가 있다.
편집
1.5.1.2 예습
LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
-struct Node{
};
- ë�°ì�´í„°ë¥¼ ë„£ì�„ Nameì�´ë�¼ëŠ” 변수와 다ì�Œ 노드를 가리킬수 있ë�„ë¡� 하는 Nextí�¬ì�¸í„° 변수를 ì„ ì–¸í–ˆë‹¤.
Circular Queue가 무엇�지 찾아보�.
ì €ë²ˆì£¼ ê³¼ì œ 8번ì—� ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ 해당 ë¬¸ì œë¥¼ 푸셔ë�„ ë�©ë‹ˆë‹¤. ì•„ì§� ì�´í•´ê°€ 잘 안가시면 ì €ë‚˜ 다른분들ì—�게 물어ë´�ìš”
1
3 2
4 5 6
10 9 8 7
11 12 13 14 15
21 20 19 18 17 16
#include <stdio.h>
int main()
{
int a[6][6];
int i,j;
int count=1;
for(i=0;i<6;i++)
{
if(i%2!=0)
{
for(j=i;j>=0;j--)
{
a[i][j]=count;
count++;
}
}
else
{
for(j=0;j<=i;j++)
{
a[i][j]=count;
count++;
}
}
}
for(i=0;i<6;i++)
{
for(j=0;j<=i;j++)
{
if(a[i][j]<10)
printf("%d ",a[i][j]);
else
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
9.2중í�¬ì�¸í„°ë¥¼ ì�´ìš©í•˜ì—¬ 3x3í–‰ë ¬ì�„ ë‘�ê°œ ë§Œë“¤ê³ , ë‘� ë°°ì—´ì�˜ í•©ì�„ ì¶œë ¥í•˜ëŠ” 프로그램ì�„ 짜보세요.hint) Dp = (int**)malloc(sizeof(int*));
10.3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
//10.LinearSearch를 구현해보세요. ë°°ì—´ì�€ 1000개로 ìž¡ê³ , random함수를 ì�´ìš©í•´ 1부터 1000까지ì�˜ 숫ìž�를 ëžœë�¤ìœ¼ë¡œ ë°°ì—´ì—� ë„£ì�€ 후, 777ì�´ ë°°ì—´ë‚´ì—� 있었는지를 찾으면 ë�©ë‹ˆë‹¤.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void random(int a[]);
int main()
{
int x;
int a[1000];
int i;
srand(time(NULL));
for(i=0;i<1000;i++)
{
x=1+rand()%1000;
a[i]=x;
// printf("%d ",a[i]);
}
// printf("\n");
random(a);
return 0;
}
void random(int a[])
{
int find[1000]={0};
int i;
for(i=0;i<1000;i++)
{
if(a[i]==777)
find[i]=i;
if(find[i]!=0)
printf("777� %d번째� 있습니다\n",find[i]);
}
}
11.ì�´ë²ˆì‹œê°„ì—� ë°°ì› ë�˜ ë‚´ìš©ì�„ 바탕으로, int* a; int b; int **c;로 ì„ ì–¸í–ˆì�„때 &c,c,*c,&a,aì—� 관해서 ê°�ê°� ì„¤ëª…í•˜ê³ , ì–´ë–¤ 것ì�´ ì–´ë–¤ 것과 ì�¼ì¹˜í•˜ëŠ” 것ì�¸ì§€ë¥¼ ì�´í•´í• 수 있ë�„ë¡� 쉬운ë§�로 ì •ë¦¬í•´ë³´ì„¸ìš”.&c : cì�˜ 주소
c : c� 값(a� 주소)
*c : c가르키는 곳� 값(b� 주소)
&a : a� 주소
a : a� 값(b� 주소)
c==&a
*c==a==&b
12.ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;
int** c;
c=&a; // c� a� 주소 넣어 줌
a=&b; // a� b� 주소 넣어 줌
**c=9; // c� 방(?)� 9를 넣어 줌
printf("%d %d",*c,**c); // *cì—�는 aì�˜ 주소가 들어 ê°€ìžˆê³ **cì—�는 bì�˜ ê°’ì�´ 들어가 있다.
편집
1.5.1.2 예습
LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
-struct Node{
};
- ë�°ì�´í„°ë¥¼ ë„£ì�„ Nameì�´ë�¼ëŠ” 변수와 다ì�Œ 노드를 가리킬수 있ë�„ë¡� 하는 Nextí�¬ì�¸í„° 변수를 ì„ ì–¸í–ˆë‹¤.
Circular Queue가 무엇�지 찾아보�.
- 배열 기반� �가 �형으로 �루어진 �태.
- ì›�형으로 ì�´ë£¨ì–´ì ¸ 있기 때문ì—� í��ê°€ ê°€ë“� ì°¼ì�„때나 ì™„ì „ížˆ 비어있ì�„때 Front와 Rearì�˜ index는 ë�™ì�¼í•˜ë¯€ë¡œ Emptyì�¸ì§€ Fullì�¸ì§€ êµ¬ë¶„í• ìˆ˜ 없다.
- ì›�형으로 ì�´ë£¨ì–´ì ¸ 있기 때문ì—� í��ê°€ ê°€ë“� ì°¼ì�„때나 ì™„ì „ížˆ 비어있ì�„때 Front와 Rearì�˜ index는 ë�™ì�¼í•˜ë¯€ë¡œ Emptyì�¸ì§€ Fullì�¸ì§€ êµ¬ë¶„í• ìˆ˜ 없다.
typedefê°€ 무엇ì�¸ì§€ ì•Œì•„ë³´ê³ , 간단한 ì˜ˆì œë¥¼ ì�¨ë³´ìž�.
- 기존� 존재하는 �료형� 새로운 �름� 부여하는 것
typedef struct
{
구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
- 기존� 존재하는 �료형� 새로운 �름� 부여하는 것
typedef struct
{
char *name;
int age;
char sex;
}Student;int age;
char sex;
구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
#include <stdio.h>
typedef struct
{
char *name;
int age;
char sex;
}Student;
int main()
{
Student Std[4];
int i;
Std[0].name="곽길문";
Std[0].age=24;
Std[0].sex='F';
Std[1].name="���";
Std[1].age=24;
Std[1].sex='F';
Std[2].name="한송�";
Std[2].age=23;
Std[2].sex='F';
Std[3].name="황혜림";
Std[3].age=22;
Std[3].sex='F';
printf("�름\t나�\t성별\n");
for(i=0;i<4;i++)
{
printf("%s\t%d\t%c\n",Std[i].name,Std[i].age,Std[i].sex);
}
return 0;
}
ë�„ìƒ�í�¬ ¶
복습
1~6. Koistudy.net 106~111번
->풀었�!
7. Koistudy.net 125, 152번(둘다 하기 힘들면 하나만) 3n+1
acceptë°›ì�€ 걸 스샷으로 ì°�ì–´ë�„ 좋아요 ì €ë²ˆì£¼ì—� accept받는ë�° ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ ì €ë‚˜ 다른분들ì—�게 물어ë´�서 한번 í•´ë³´ë�„ë¡� 합시다^^
-> 못풀었�!
8. 다ì�Œ 형태로 ì¶œë ¥ë�˜ëŠ” 프로그램ì�„ ì§œ 보세요.
ì €ë²ˆì£¼ ê³¼ì œ 8번ì—� ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ 해당 ë¬¸ì œë¥¼ 푸셔ë�„ ë�©ë‹ˆë‹¤. ì•„ì§� ì�´í•´ê°€ 잘 안가시면 ì €ë‚˜ 다른분들ì—�게 물어ë´�ìš”
9. 2중í�¬ì�¸í„°ë¥¼ ì�´ìš©í•˜ì—¬ 3x3í–‰ë ¬ì�„ ë‘�ê°œ ë§Œë“¤ê³ , ë‘� ë°°ì—´ì�˜ í•©ì�„ ì¶œë ¥í•˜ëŠ” 프로그램ì�„ 짜보세요.
hint) Dp = (int**)malloc(sizeof(int*));
10. 3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
LinearSearch를 구현해보세요. ë°°ì—´ì�€ 1000개로 ìž¡ê³ , random함수를 ì�´ìš©í•´ 1부터 1000까지ì�˜ 숫ìž�를 ëžœë�¤ìœ¼ë¡œ ë°°ì—´ì—� ë„£ì�€ 후, 777ì�´ ë°°ì—´ë‚´ì—� 있었는지를 찾으면 ë�©ë‹ˆë‹¤. 프로그램ì�„ 실행시킬 때마다 결과가 달ë�¼ì§€ê² ì£ ?
(rand()%1000� 한다면 1�서 1000까지� 숫�가 나올 것입니다.)
11. ì�´ë²ˆì‹œê°„ì—� ë°°ì› ë�˜ ë‚´ìš©ì�„ 바탕으로, int* a; int b; int **c;로 ì„ ì–¸í–ˆì�„때 &c,c,*c,&a,aì—� 관해서 ê°�ê°� ì„¤ëª…í•˜ê³ , ì–´ë–¤ 것ì�´ ì–´ë–¤ 것과 ì�¼ì¹˜í•˜ëŠ” 것ì�¸ì§€ë¥¼ ì�´í•´í• 수 있ë�„ë¡� 쉬운ë§�로 ì •ë¦¬í•´ë³´ì„¸ìš”.
12. ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
b가 9로 변함!
예습
1. LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
struct Node{
};
2. Circular Queue가 무엇�지 찾아보�.
�형 �란 �� 배열(arrangement)� �형으로 표현하며 �를 구성하는 배열� 처�과 �� �어놓� 형태� �를 �합니다.
�를 위한 버�와, 시작과 �� 나타내는 �개� 값� 사용하게 �다.
ìž�료를 ë„£ì�„때는 ì�¸ë�±ìФì�˜ 해당하는 위치ì—�, 꺼낼때는 시작 ì �ì�„ 나타내는 ì�¸ë�±ìФì�˜ 위치ì—� 해당ë�˜ëŠ” 버í�¼ì�˜ 위치ì—�서 하게 ë�œë‹¤.
작업� �어났�때는 작업� 해당하는 카운트를 �가시킴으로� 다� 번� �료를 넣�때 다� 위치�서 �뤄나�� 하는 것�다. ��스 버�� �� �달했�때는 다시 버�� 맨 앞� 가르켜 처�으로 �아가게 하면 �다.
3. typedefê°€ 무엇ì�¸ì§€ ì•Œì•„ë³´ê³ , 간단한 ì˜ˆì œë¥¼ ì�¨ë³´ìž�.
typedef ëª…ë ¹ë¬¸ì�€ 기존ì—� 있는 ìž�료형ì�„ 사용ìž�ê°€ ì›�하는 ì�´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 있게ë�” ì„ ì–¸í•˜ëŠ” ëª…ë ¹ë¬¸
<typedef � 사용법>
typedef <ìž�료형> <ì„ ì–¸ëª…>;
<typedef � 사용 예>
typedef int AA;
AA num=500;
4. 구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
1~6. Koistudy.net 106~111번
->풀었�!
7. Koistudy.net 125, 152번(둘다 하기 힘들면 하나만) 3n+1
acceptë°›ì�€ 걸 스샷으로 ì°�ì–´ë�„ 좋아요 ì €ë²ˆì£¼ì—� accept받는ë�° ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ ì €ë‚˜ 다른분들ì—�게 물어ë´�서 한번 í•´ë³´ë�„ë¡� 합시다^^
-> 못풀었�!
8. 다ì�Œ 형태로 ì¶œë ¥ë�˜ëŠ” 프로그램ì�„ ì§œ 보세요.
ì €ë²ˆì£¼ ê³¼ì œ 8번ì—� ì‹¤íŒ¨í•˜ì‹ ë¶„ë“¤ì�€ 해당 ë¬¸ì œë¥¼ 푸셔ë�„ ë�©ë‹ˆë‹¤. ì•„ì§� ì�´í•´ê°€ 잘 안가시면 ì €ë‚˜ 다른분들ì—�게 물어ë´�ìš”
1
3 2
4 5 6
10 9 8 7
11 12 13 14 15
21 20 19 18 17 16
#include <stdio.h>
int main(){
int i,j;
int arr[6][6]={0,};
int num=0;
for(i=0 ; i<6 ; i++){
if(i%2==0){
for(j=0 ; j<=i ; j++) arr[i][j]=++num;
}else{
for(j=i ; j>=0 ; j--) arr[i][j]=++num;
}
}
for(i=0 ; i<6 ; i++){
for(j=0 ; j<6 ; j++){
if(arr[i][j] != 0) printf("%3d",arr[i][j]);
}
printf("\n");
}
return 0;
}
9. 2중í�¬ì�¸í„°ë¥¼ ì�´ìš©í•˜ì—¬ 3x3í–‰ë ¬ì�„ ë‘�ê°œ ë§Œë“¤ê³ , ë‘� ë°°ì—´ì�˜ í•©ì�„ ì¶œë ¥í•˜ëŠ” 프로그램ì�„ 짜보세요.
hint) Dp = (int**)malloc(sizeof(int*));
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int **p1;
int **p2;
int i,j;
srand(time(NULL));
p1=(int**)malloc(sizeof(int*)*3);
p2=(int**)malloc(sizeof(int*)*3);
for(i=0 ; i<3 ; i++){
p1[i]=(int*)malloc(sizeof(int*)*3);
p2[i]=(int*)malloc(sizeof(int*)*3);
}
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
p1[i][j]=1+rand()%9;
p2[i][j]=1+rand()%9;
}
}
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
printf("%3d",p1[i][j]);
}
printf("\n");
}
printf("\n");
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
printf("%3d",p2[i][j]);
}
printf("\n");
}
printf("\n");
for(i=0 ; i<3 ; i++){
for(j=0 ; j<3 ; j++){
p1[i][j]+=p2[i][j];
printf("%3d",p1[i][j]);
}
printf("\n");
}
return 0;
}
10. 3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
LinearSearch를 구현해보세요. ë°°ì—´ì�€ 1000개로 ìž¡ê³ , random함수를 ì�´ìš©í•´ 1부터 1000까지ì�˜ 숫ìž�를 ëžœë�¤ìœ¼ë¡œ ë°°ì—´ì—� ë„£ì�€ 후, 777ì�´ ë°°ì—´ë‚´ì—� 있었는지를 찾으면 ë�©ë‹ˆë‹¤. 프로그램ì�„ 실행시킬 때마다 결과가 달ë�¼ì§€ê² ì£ ?
(rand()%1000� 한다면 1�서 1000까지� 숫�가 나올 것입니다.)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int arr[1000];
int i;
int count=0;
srand(time(NULL));
for(i=0 ; i<1000 ; i++){
arr[i]=rand()%1000;
}
for(i=0 ; i<1000 ; i++){
if(arr[i]==777){
printf("%d번째� 777 존재\n",i+1);
count++;
}
}
printf("%d개 존재\n",count);
if(count == 0){
printf("777없�\n");
}
return 0;
}
11. ì�´ë²ˆì‹œê°„ì—� ë°°ì› ë�˜ ë‚´ìš©ì�„ 바탕으로, int* a; int b; int **c;로 ì„ ì–¸í–ˆì�„때 &c,c,*c,&a,aì—� 관해서 ê°�ê°� ì„¤ëª…í•˜ê³ , ì–´ë–¤ 것ì�´ ì–´ë–¤ 것과 ì�¼ì¹˜í•˜ëŠ” 것ì�¸ì§€ë¥¼ ì�´í•´í• 수 있ë�„ë¡� 쉬운ë§�로 ì •ë¦¬í•´ë³´ì„¸ìš”.
int* a;
int b=10;
int** c;
a=&b;
c=&a;
printf("%d\n",a); //b� 주소
printf("%d\n",&a); //a� 주소
printf("%d\n",*a); //b� 값
printf("%d\n",b); //b� 값
printf("%d\n",&b); //b� 주소
printf("%d\n",c); //a� 주소
printf("%d\n",&c); //c� 주소
printf("%d\n",*c); //b� 주소
12. ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;
int** c;
c=&a;
a=&b;
**c=9;
printf("%d %d",*c,**c);
b가 9로 변함!
예습
1. LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
struct Node{
};
2. Circular Queue가 무엇�지 찾아보�.
�형 �란 �� 배열(arrangement)� �형으로 표현하며 �를 구성하는 배열� 처�과 �� �어놓� 형태� �를 �합니다.
�를 위한 버�와, 시작과 �� 나타내는 �개� 값� 사용하게 �다.
ìž�료를 ë„£ì�„때는 ì�¸ë�±ìФì�˜ 해당하는 위치ì—�, 꺼낼때는 시작 ì �ì�„ 나타내는 ì�¸ë�±ìФì�˜ 위치ì—� 해당ë�˜ëŠ” 버í�¼ì�˜ 위치ì—�서 하게 ë�œë‹¤.
작업� �어났�때는 작업� 해당하는 카운트를 �가시킴으로� 다� 번� �료를 넣�때 다� 위치�서 �뤄나�� 하는 것�다. ��스 버�� �� �달했�때는 다시 버�� 맨 앞� 가르켜 처�으로 �아가게 하면 �다.
3. typedefê°€ 무엇ì�¸ì§€ ì•Œì•„ë³´ê³ , 간단한 ì˜ˆì œë¥¼ ì�¨ë³´ìž�.
typedef ëª…ë ¹ë¬¸ì�€ 기존ì—� 있는 ìž�료형ì�„ 사용ìž�ê°€ ì›�하는 ì�´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 있게ë�” ì„ ì–¸í•˜ëŠ” ëª…ë ¹ë¬¸
<typedef � 사용법>
typedef <ìž�료형> <ì„ ì–¸ëª…>;
<typedef � 사용 예>
typedef int AA;
AA num=500;
4. 구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
#include <stdio.h>
struct student{
char name[20];
int num;
int age;
};
int main(){
int i;
struct student aclass[3]={{"곽길문",201001,24},
{"한송�",201002,23},
{"황혜림",201003,22}};
for(i=0 ; i<3 ; i++){
printf("%s %d %d\n",aclass[i].name,aclass[i].num,aclass[i].age);
}
return 0;
}
한송ì�´ ¶
1~6 성공:D
10.3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
12.ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;
int** c;
10.3회차 10ë²ˆê³¼ì œë¥¼ 해결해와 주세요. ì�´ë²ˆì—�는 반드시 ê³¼ì œì�˜ 스펙ì�„ 완수해와야합니다. 모르면 물어ë´�ë�„ë�˜ê³ , 다른 사람 코드를 ì°¸ê³ í•´ë³´ì•„ë�„ 좋아요
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int i,ran,arr[1000]={0};
srand(time(NULL));
for(i=0;i<1000;i++){
ran = 1+rand()%1000;
}
if(arr[i]==777){
printf("777�I arr[%d]� 있습니다",i);
}
else
printf("777�I 없습니다.");
return 0;
}
12.ì˜ˆì œ 코드가 ì–´ë–¤ í–‰ë�™ì�„ ìˆ˜í–‰í•˜ê³ , 왜 그런 ê°’ì�´ 나오는지 설명해 봅시다.
int* a;
int b=5;
int** c;
c=&a;
a=&b;
*c=9;
printf("%d %d",*c,**c);
a=&b;
printf("%d %d",*c,**c);
*c는 ��한값, **c는 9
예습
1.LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
NODE*CreateNode(char name [])
{
NODE*NewNode = (NODE*)malloc(sizeof(NODE));
Strcpy(NewNode->Name,name);
NewNode->NextNode = NULL;
Return NewNode;
}
NODE* 를 반환하는 CreateNode다. NewNodeë�¼ëŠ” í�¬ì�¸í„°ë¥¼ ìƒ�성후 ê·¸ 해당하는 주소ì—� malloc함수로 공간ì�„ í• ë‹¹í•˜ê³ ìžˆë‹¤.
Malloc으로 í• ë‹¹í•œ 공간ì�€ 해당 함수가 ë��나ë�„ í•´ì œë�˜ì§€ 않는다. ì�´ê±´ ì†�성ì�´ 다른 메모리 공간ì—� í• ë‹¹ 했기 때문ì�´ë‹¤.(?????)
2. Circular Queue가 무엇�지 찾아보�.
í��를 구현하는 가장 ì�¼ë°˜ì �ì�¸ 방법ì�€ 스íƒ�ê³¼ 마찬가지로 ë°°ì—´ì�„ ì�´ìš©í•˜ëŠ” 방법ì�´ë‹¤. 그러나 단순배열로 í• ê²½ìš° ë°°ì—´ì�˜ í�¬ê¸°ê°€ ì§€ì •ë�˜ì–´ 있는 ìƒ�태ì—�서 ë�°ì�´íƒ€ê°€ 계ì†� 추가ë�˜ê²Œ ë�˜ë©´ ì–´ëŠ� 시ì �ì—�서 overflow ê°€ ë°œìƒ�하게 ë�¨ìœ¼ë¡œ ë�°ì�´íƒ€ê°€ ë°°ì—´ì�˜ í�¬ê¸°ë¥¼ 초과하게 ë�˜ë©´, 초과ë�œ ë�°ì�´íƒ€ëŠ” 0번째 배열로 들어가게 해야 한다. ì�´ëŸ¬í•œ 구조가 환형구조와 ê°™ë‹¤ê³ í•´ì„œ 보통 환형í��(circular queue) ë�¼ê³ 한다
3. typedefê°€ 무엇ì�¸ì§€ ì•Œì•„ë³´ê³ , 간단한 ì˜ˆì œë¥¼ ì�¨ë³´ìž�.
1)기존 ìž�료형ì�˜ ì�´ë¦„ì�„ 프로그램 ë‚´ë¶€ì—�서 다른 ì�´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 있게 하는 것
Typedef 기존_�료형_�릉 새로운_�료형_�름;
예) typedef unsigned char uchar;
2)헤�파��서 typedef사용하기
Typedef는 공통ì �으로 사용하는 í—¤ë�”파ì�¼ì—� ì„ ì–¸ì�„ 해주어야 ëª¨ë“ ì†ŒìŠ¤íŒŒì�¼ì—�서 ì‚¬ìš©í• ìˆ˜ 있다
//typedef를 사용하면 새로운 ìž�료형ì�„ 기존ì�˜ ìž�료형처럼 ì‚¬ìš©í• ìˆ˜ 있다.
typedefì�„ ì •ì�˜í•˜ë©´ int나 char 등ì�˜ ìž�료형ì�„ ìž�ì‹ ì�´ ì›�하는 명ì¹ìœ¼ë¡œ 바꾸어서 사용ì�´ 가능하다.
ë¨¼ì € typedefì�„ ì „ì— ë³€ìˆ˜ ì§€ì—ì—� ì„ ì–¸ 해준다. ì˜ˆì œì—�서는 int형ì�„ NUM으로 명ì¹ì�„ 바꾼 것ì�´ë‹¤.
ê·¸ë¦¬ê³ ë³´í†µ ìž�료형 int 처럼 사용하면 ë�œë‹¤. NUMì�„ ì�´ìš©í•œ 변수 ê°’ê³¼, int를 ì�´ìš©í•œ 변수ì�˜ ê°’ì�„ 서로 ì—°ì‚°ì�„ í•´ë³´ë©´ ì •í™•í•˜ê²Œ ê°’ì�´ 나온다.
4. 구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
o 구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
o ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
예습
1.LinkedListì�˜ node를 ì„ ì–¸í•˜ëŠ” 방법ì�„ ì°¾ì•„ë³´ê³ , 왜 그런 형태ì�¸ì§€ ì�´í•´í•œë§Œí�¼ ì�¨ë³´ìž�.
NODE*CreateNode(char name [])
{
NODE*NewNode = (NODE*)malloc(sizeof(NODE));
Strcpy(NewNode->Name,name);
NewNode->NextNode = NULL;
Return NewNode;
}
NODE* 를 반환하는 CreateNode다. NewNodeë�¼ëŠ” í�¬ì�¸í„°ë¥¼ ìƒ�성후 ê·¸ 해당하는 주소ì—� malloc함수로 공간ì�„ í• ë‹¹í•˜ê³ ìžˆë‹¤.
Malloc으로 í• ë‹¹í•œ 공간ì�€ 해당 함수가 ë��나ë�„ í•´ì œë�˜ì§€ 않는다. ì�´ê±´ ì†�성ì�´ 다른 메모리 공간ì—� í• ë‹¹ 했기 때문ì�´ë‹¤.(?????)
2. Circular Queue가 무엇�지 찾아보�.
í��를 구현하는 가장 ì�¼ë°˜ì �ì�¸ 방법ì�€ 스íƒ�ê³¼ 마찬가지로 ë°°ì—´ì�„ ì�´ìš©í•˜ëŠ” 방법ì�´ë‹¤. 그러나 단순배열로 í• ê²½ìš° ë°°ì—´ì�˜ í�¬ê¸°ê°€ ì§€ì •ë�˜ì–´ 있는 ìƒ�태ì—�서 ë�°ì�´íƒ€ê°€ 계ì†� 추가ë�˜ê²Œ ë�˜ë©´ ì–´ëŠ� 시ì �ì—�서 overflow ê°€ ë°œìƒ�하게 ë�¨ìœ¼ë¡œ ë�°ì�´íƒ€ê°€ ë°°ì—´ì�˜ í�¬ê¸°ë¥¼ 초과하게 ë�˜ë©´, 초과ë�œ ë�°ì�´íƒ€ëŠ” 0번째 배열로 들어가게 해야 한다. ì�´ëŸ¬í•œ 구조가 환형구조와 ê°™ë‹¤ê³ í•´ì„œ 보통 환형í��(circular queue) ë�¼ê³ 한다
3. typedefê°€ 무엇ì�¸ì§€ ì•Œì•„ë³´ê³ , 간단한 ì˜ˆì œë¥¼ ì�¨ë³´ìž�.
1)기존 ìž�료형ì�˜ ì�´ë¦„ì�„ 프로그램 ë‚´ë¶€ì—�서 다른 ì�´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 있게 하는 것
Typedef 기존_�료형_�릉 새로운_�료형_�름;
예) typedef unsigned char uchar;
2)헤�파��서 typedef사용하기
Typedef는 공통ì �으로 사용하는 í—¤ë�”파ì�¼ì—� ì„ ì–¸ì�„ 해주어야 ëª¨ë“ ì†ŒìŠ¤íŒŒì�¼ì—�서 ì‚¬ìš©í• ìˆ˜ 있다
//typedef를 사용하면 새로운 ìž�료형ì�„ 기존ì�˜ ìž�료형처럼 ì‚¬ìš©í• ìˆ˜ 있다.
#include<stdio.h>
typedef int Num;
int main(){
Num a=10;
int b=20;
printf("sum = %d\n",a+b);
return 0;
}
typedefì�„ ì •ì�˜í•˜ë©´ int나 char 등ì�˜ ìž�료형ì�„ ìž�ì‹ ì�´ ì›�하는 명ì¹ìœ¼ë¡œ 바꾸어서 사용ì�´ 가능하다.
ë¨¼ì € typedefì�„ ì „ì— ë³€ìˆ˜ ì§€ì—ì—� ì„ ì–¸ 해준다. ì˜ˆì œì—�서는 int형ì�„ NUM으로 명ì¹ì�„ 바꾼 것ì�´ë‹¤.
ê·¸ë¦¬ê³ ë³´í†µ ìž�료형 int 처럼 사용하면 ë�œë‹¤. NUMì�„ ì�´ìš©í•œ 변수 ê°’ê³¼, int를 ì�´ìš©í•œ 변수ì�˜ ê°’ì�„ 서로 ì—°ì‚°ì�„ í•´ë³´ë©´ ì •í™•í•˜ê²Œ ê°’ì�´ 나온다.
4. 구조체를 사용하여 student 구조체를 하나 ë§Œë“¤ê³ , student 구조체 ë°°ì—´ì�„ 만들어 0~3번째 ë°°ì—´ì—� AClassë°˜ í•™ìƒ�들ì�˜ ì •ë³´ë¥¼ ì �당히 ë„£ê³ , 그것ì�„ ì¶œë ¥í•´ë³´ìž�.
o 구조체 ë‚´ë¶€ì—� char ë°°ì—´ì�„ 사용해서 ì�´ë¦„ì�„ 넣어ë�„ ì¢‹ê³ , 학번ì�„ int형으로 넣어ë�„ 좋다.
o ì�´ ê³¼ì œê°€ 무슨 ë§�ì�¸ì§€ ì�´í•´ê°€ 안ë�˜ëŠ” 경우 반드시 ì €ì—�게 ë¬¼ì–´ë³´ê³ , ê³¼ì œë¥¼ 해야합니다.
#include<stdio.h>
#include<string.h>
int main(void){
struct student{
char name[10];
int age;
};
struct student s[4];
int i;
strcpy(s[0].name,"한송�");
s[0].age = 23;
strcpy(s[1].name,"���");
s[1].age = 24;
strcpy(s[2].name,"곽길문");
s[2].age = 24;
strcpy(s[3].name,"황혜림");
s[3].age = 22;
for(i=0;i<4;i++){
printf("�름 : %s\n",s[i].name);
printf("나� : %d\n",s[i].age);
}
return 0;
}










