U E D R , A S I H C RSS

새싹교실/2012/AClass/3회차

곽길문


#새싹과제.20105801 곽길문


1~5.www.koistudy.net 코이스터디 100번~104번까지 Accept받기(등업이 안되어 있으면 그 문제의 소스를 저테 보내주세요)

-#include<stdio.h>

int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a+b);

return 0;


}

-#include<stdio.h>

int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",a/b,a%b);

return 0;

}

-#include<stdio.h>

int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
printf("%g ",a*b/2);

return 0;

}
-#include<stdio.h>

int main()
{
float r,c;


scanf("%f ",&r);
c=(float)r/2;
printf("%.2f ",c*c*3.14);

return 0;

}

-#include<stdio.h>

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<stdio.h>

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<stdio.h>

int main()
{
int a[]2={1,2,3,4};
int b[]2={1,2,3,4};
int c22;
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=ajp;
w=bpj;
e=ajp+1;
r=bp+1j;

}else if(j==0&& p==1){
q=ajp-1;
w=bp-1j+1;
e=ajp;
r=bpj+1;
}else if(j==1&&p==0){
q=ajp;
w=bpj-1;
e=ajp+1;
r=bpj;

}else{

q=ajp-1;
w=bp-1j;
e=ajp;
r=bpj;
}

cjp=q*w+e*r;
printf("%d",cjp);
}

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<stdio.h>
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 c55;
int j,p;

for(j=0;j<5;j++){
for(p=0;p<5;p++){

printf("%d", cjp);
p++;

}
printf("\n");
j++;
}


return 0;
}

9.포인터를 이용 예제코드 하나를 짜 보세요.

#include<stdio.h>
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<stdio..h>
int Lsearch(int ar[], int len, int targer)
{
int i;
for(i=0;i

if(ari ==targer)
return 1;
}

return -1;

}

int main(){


int arr[]={3,5,2,4,9};
int idx;
idx=Lsearch(arr,sizeof(arr)/sizeof(int),4);

if(idx== -1)
printf("search fail\n");
else
printf("%d\n",idx);
idx = Lsearch(arr,sizeof(arr)/sizeof(int),7);

if(idx ==-1)
printf("search fail\n");
else
printf("%d\n",idx);
return 0;

}


11.Sort를 하나 구현해보세요. 11번과 같은 방법으로 숫자를 랜덤으로 넣은 후, 정렬하고, 정렬된 것을 출력하면 됩니다.
- u.u

12.이번시간에 배웠던 내용을 바탕으로, int* a; int b;로 선언했을때 &a,a,*a,&b,b에 관해서 각각 설명하고, 어떤 것이 어떤 것과 일치하는 것인지를 이해할 수 있도록 쉬운말로 정리해보세요.(예제 코드를 작성 후에 테스트해보고 써보는 것도 좋은 방법일 것입니다.)

- *a가 b를 가리키는 포인터도 선언 되었다면, &a는 a의 주소값, a는 메모리 안에 있는 값(즉, b의 주소값-포인터의 정의), &b는 b의 주소값, b는 메모리 안에 있는 값(할당 값),a=&b와 같다. 둘다 b의 주소값을 나타낸다.*a=b와 같고 b에 할당 값과 같다.

1.4.1.2 예습 ¶
1.구조체가 무엇인지 알아보고, 간단 구조체 하나를 만들어보세요.
- 다른 종류의 데이터를 하나로 묶어서 사용하는 데이터 결합법을 구조체라고 다. 구조체는 같은 자료형을 묶어서 다면 구조체는 다른 자료형을 묶어 사용다.

#include<stdio.h>

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 <stdio.h>
#include <stdlib.h>

void main()
{
int **ptr;
int i,j,k=1;
//int ptr22;

ptr = (int **)malloc(2*sizeof(int *));
for(i=0;i<2;i++)
ptri = (int *)malloc(2*sizeof(int));

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
ptrij = k;
printf("%d ",ptrij);
k++;
}
puts("");
}
}

//솔직히 예제 이해가 잘 안가요 ㅜ

4.스택, 큐가 무엇인지 설명하고, 이를 이용 간단 예제를 만들어보세요.

-스택이란 후입선출방식의 자료구조, 큐는 선입선출방식으로 처음으로 들어갔던 것이 맨 먼저 꺼낼수 있는 방식이다.

#include<stdio.h>
#define MaxSize 3
int stackMaxSize;

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(sp<MaxSize)
{
stacksp=n;
sp++;
return 0;

}else
{
return -1; // 가득 찾을때 overflow
}

}

int pop(int *n)
{
if(sp>0) //값이 있을 때
{
sp--;
*n=stacksp;
return 0;

}else
{
return -1; //비었을 때. underflow

}
}

// pop으로 데이터를 추출할때 마지막에 들어간 30부터 나오게 된다.



-큐 예제
#include<stdio.h>
#include<conio.h>
#define MAX 5

int queue5;
int rear = 0;
int front = 0 ;

void insert(int vall)
{
queuerear++ = 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
printf("%d " ,queuej); printf("\n");
}

for(j = front ; j < 5; j++){ //엔터를 한번씩 누르면 값이 차례대로 빠짐
getch();
Delete();
printf("delete를 실행했습니다");
printf("%d\n", queuej);
}
}

도상희


1~5.www.koistudy.net 코이스터디 100번~104번까지 Accept받기(등업이 안되어 있으면 그 문제의 소스를 저테 보내주세요)



6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
-06.c


7.2차원 배열(4x4) 두개의 곱을 구하는 프로그램 작성.
-07.c


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
-배열로 하는건지 아니면 for문을 몇 개를 써야하는 건지 ㅜ,ㅜ


9.포인터를 이용 예제코드 하나를 짜 보세요.
-09.c


10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
(rand()%1000을 다면 1에서 1000까지의 숫자가 나올 것입니다.)
-10.c


11.Sort를 하나 구현해보세요. 11번과 같은 방법으로 숫자를 랜덤으로 넣은 후, 정렬하고, 정렬된 것을 출력하면 됩니다.
-11.c


12.이번시간에 배웠던 내용을 바탕으로, int* a; int b;로 선언했을때 &a,a,*a,&b,b에 관해서 각각 설명하고, 어떤 것이 어떤 것과 일치하는 것인지를 이해할 수 있도록 쉬운말로 정리해보세요.(예제 코드를 작성 후에 테스트해보고 써보는 것도 좋은 방법일 것입니다.)
int* a;
int b=10;
a=&b;
printf("%d\n",&a); //포인터 변수 a의 주소
printf("%d\n",a); //a가 가리키고 있는 주소값
printf("%d\n",&b); //b의 주소값
printf("%d\n",b); //b에 들어있는 값


1.구조체가 무엇인지 알아보고, 간단 구조체 하나를 만들어보세요.
구조체란 하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의하는 것이다.
a_01.c


2.동적할당이 무엇인지 알아보고, 동적할당을 하는 방법을 써 보세요.
‘힙’에 메모리를 할당하는 것을 두고 동적 할당 이라 다.
프로그램이 실행되는 동안에 할당해야 하는 메모리의 크기를 결정지을 수 있기 때문이다.
-a_02.c
->아직 이해가 잘 안됨ㅠ.ㅠ


3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
이중 포인터는 싱글 포인터의 주소 값을 저장하기 위 용도로 사용되는 포인터이다.
a_03.c


4.스택, 큐가 무엇인지 설명하고, 이를 이용 간단 예제를 만들어보세요.
스택 – 데이터 입/출력이 쪽으로만 접근 할 수 있는 자료 구조. 가장 나중에 들어간 데아타가 제일 먼저 나오게 된다.
큐 – 먼저 넣은 데이터가 먼저 나오는 FIFO구조. 스택과 반대되는 개념의 자료구조.
->(예제는 어떻게 만들어야 될지 잘 모르겠음!ㅜ.ㅜ)

송이


1 100)
#include<stdio.h>
int main(){
int a,b;
scanf("%d",&a);
scanf("%d",&b);

printf("%d",a+b);

return 0;
}


2 101)
#include <stdio.h>

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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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<stdio.h>
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 <stdio.h>

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 <stdio.h>
int main()
{
int a44,b44,c44,d44={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",&aij);
}
printf("배öe열¯¡© b 입O력¤A : ");
for(i=0; i<4; i++) //b배öe열¯¡© 입O력¤A
{
for(j=0; j<4; j++)
scanf("%d",&bij);
}


for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
for(k=0; k<4; k++)
{
for(k=0; k<4; l++)
{
dij += aij*bkj*ckl; <<<이부분 어떻게 해야할지 잘 모르겠어요
}
}
}
}
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
printf("%4d ",dij); <<여기두요
}
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 <stdio.h>
int main()
{
int arr55 = {0,};
int i, j, k=1;

for(i=0; i<5; i++)
{
if(i%2==0)
{
for(j=0; j<5; j++)
arrij = k++;
}
else
{
for(j=4; j>=0; j--)
arrij = k++;
}
}
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
printf("%3d", arrij);
printf("\n");
}

return 0;
}




10.포인터를 이용 예제코드 하나를 짜 보세요.
#include<stdio.h>
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<stdio.h>
int main(){
struct student{
char name10;
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(선입선출) 먼저 넣은 자료가 먼저 나오는 자료구조


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:45
Processing time 0.1036 sec