복습
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{
int data; //데이터를 담을 공간
struct Node *
NextNode; //다음 노드에 대한 포인터
};
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;
}