1. 구조체에 대해 조사하여 다음 문항에 답하시오. (1시간 소요)

  가. 구조체가 무엇인지 설명하고 쓰임새에 대해 50자 이내로 정리해 보시오.

 

  나. 구조체의 선언은 다음과 같다.

 

    struct 구조체이름
    {

      구조체에 들어있는 변수들의 선언

    };

 

    이를 암기하시오. 또, 점의 좌표를 저장하기 위한 데이터형으로써, 구조체이름은 Point로 하고, 내용은 int x, int y를 가지는 구조체를 선언해 보시오.

 

  다. '나'에서 선언한 구조체의 형태로 만들어지는 변수를 사용하기 위해 main 함수에서  

 

    struct 구조체이름 *사용할 변수명 = malloc(sizeof(struct 구조체이름));

 

    과 같이 포인터 변수를 만드시오. 한편, 이를 암기하시오.

 

  라. (1,2)의 좌표를 가지는 A라는 점이 있다. 이를 위해 사용할 변수명을 A로 하고,

    A에 들어있는 x,y에 1,2를 넣어보시오.

    예를들어 A->x = 10, A->y = 20 처럼 하면 됨

    https://dojang.io/mod/page/view.php?id=419

    https://dojang.io/mod/page/view.php?id=446  를 참조하시오.

 

  마. (3,4)의 좌표를 가지는 B라는 점이 있다. 이를 위해 사용할 변수명을 B로 하고,

    변수 선언과 동시에 값이 들어가도록 해 보시오.

    예를들어 struct 구조체이름 *사용할변수명 = {10,20} 처럼 하면 됨.

 

 

2. 구조체는 배열로 만들수도 있다. 다음 문항에 답하시오.  (2시간 소요)

  가. 삼각형의 세 점의 좌표를 받기 위해 1번 문항에서 만들었던 Point라는 이름의 구조체로 3개의 배열을 만들어 보시오. https://dojang.io/mod/page/view.php?id=446 를 참조하시오.

  세 점은 (Point[0]->x,   Point[0]->y)   (Point[1]->x,   Point[1]->y)   (Point[2]->x,   CPoint[2]->y) 처럼 접근할 수 있도록 만드시오.

 

  나. 세 점의 좌표 Point[0]->x   Point[0]->y   Point[1]->x  Point[1]->y   Point[2]->x   Point[2]->y 를 임의로 입력하시오.

 

  다. 두 점 (x1,y1)  (x2,y2) 를 입력받아 두 점사이의 거리를 구하는 함수를 만드시오.

    https://dojang.io/mod/page/view.php?id=427 를 참조하시오

 

  라. '다'를 이용하여 (Point[0]->x,   Point[0]->y)   (Point[1]->x,  Point[1]->y) 사이의 거리를 구하고 이를 a라 하시오.
   (Point[1]->x,  Point[1]->y)  (Point[2]->x,  Point[2]->y) 사이의 거리를 구하고 이를 b라 하시오.

   (Point[2]->x,  Point[2]->y) (Point[0]->x,  Point[0]->y) 사이의 거리를 구하고 이를 c라 하시오.

 

  마. '라'를 이용하여, 헤론의 공식에 a,b,c를 대입하시오. 그리고 이 삼각형의 넓이를 구하시오.

   https://mathbang.net/541 의 하단의 노란색 박스를 참조하시오.

 

  바. '마'에서 0,0   0,1   1,0을 넣어 0.5가 나오는지 확인하시오.

  사. '바'에서 1,1   2,2  3,3을 넣으면 세 점이 일직선 위에 있기 때문에 넓이가 0이 되는데 이를 출력할수 있도록 해보시오.

 

 

3. 다음과 같은 원시자료가 있다.

 

 학번  닉네임    무게      용돈    학점

  1      오리        60       5000      D

  2      돼지       100       3000     C

  3      토끼        90        7000     B

  4      새           80        1000     A

  5      비둘기     50        2000     A

  6      두꺼비     70        4000     B

 

  이를 저장하기 위한 구조체를 구성하여 보시오. (1시간 소요)

  가. char NickName[100], int Weight, int Money, char Point 를 가지는 구조체를 만들고 구조체의 이름을 정해보시오.

 

  나. '가'에서 만든 구조체에 위 6마리 동물들의 데이터를 넣으시오. 단, -> 를 이용하여 일일이 넣으시오.

 

  다. '나'의 방법으로는 닉네임을 넣을 수 없음을 확인하고, strcpy를 이용하시오. https://dojang.io/mod/page/view.php?id=419 를 참조하시오.

 

  라. 데이터가 제대로 들어갔는지 출력하는 함수를 만드시오. 학번을 넣으면 그 학번을 가진 동물의 모든 데이터값(닉네임, 무게, 용돈, 학점)이 출력되도록 해보시오.

'C언어' 카테고리의 다른 글

C언어 기초 12주차  (0) 2020.12.21
C언어 기초 9주차  (0) 2020.11.29
C언어 기초 8주차  (0) 2020.11.22
c언어 기초 7주차  (0) 2020.11.15
c언어 기초 6주차  (0) 2020.11.08
by 맑은소금 2020. 12. 27. 23:37

1. 다음 사항에 대해 조사하여 보시오.(1시간 소요)

  가. 함수를 만들때 입력에 대해 Call By Value 가 무엇인지 조사하시오. 50자 이내로 적으시오.

      Call By Value : 값에 의한 호출

      함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.

      원래의 값이 보존된 채로 복사해 처리하기 때문에 안전하다.

      따라서 값을 담을 수 있는 모든 타입이 가능하다.

      정수형, 문자형, 문자열, 실수형 그리고 주소값까지 모두 값이 될 수 있다.

  나. int a = 10을 선언하고, 이 값을 입력으로 받는 함수를 만든뒤 그 함수에서는 제곱근을 출력하도록 해보시오. 이 값을 main함수에 있는 변수에 담은 뒤 출력해보시오

 

  다. 함수를 만들때 입력에 대해 Call By Reference 가 무엇인지 조사하시오. 50자 이내로 적으시오.

      Call By Reference : 참조에 의한 호출

      원본의 주소값을 전달하므로, 원본을 변경할 수 있다.

      이유는 주소값을 통해 원본에 접근하기 때문에 변경할 수 있다.

       주소값을 저장할 수 있는 자료형을 제공 해야 Call By reference를 사용할 수 있다.

  라. int* b = 20을 선언하고, 이 값의 주소를 입력으로 받는 함수를 만든뒤 그 함수에서는 제곱을 출력하도록 해보시오. 이 값을 main함수에 있는 변수에 담은 뒤 출력해보시오

  마. '나'와 '라'의 차이에 대해 설명해보시오.

     '나'는 원래의 값은 보존한 채로 함수내에서 복사하여 처리하므로 main함수 내 값은 변화가 없다.

     '라'는 원본의 주소값을 전달하므로, 원본을 변경할수 있다.(주소값을 통해 원본에 접근하여 변경할 수 있다).

      함수내에서 값을 바꾸면 main함수내에서도 값을 변경할 수 있게 된다.

 

2. 배열은 포인터로 취급할 수 있다. 이 사실을 이용하여 아래 문항을 해결하시오. (2시간 소요)

  가. 메인함수에서 행벡터 {1,4,2,3,5,7,6,8,9,10} 를 int* matrix로 선언하시오.

  나. matrix의 주소를 받는 새로운 함수를 선언하시오. 함수이름은 BubbleSort로 하시오.

  다. 함수 내용은 버블정렬을 이용하여 행벡터의 숫자를 차례대로 정렬하는 기능을 갖도록 하시오.

  라. 메인함수에서 BubbleSort를 호출한 후, 호출 전후의 행벡터의 모든 값을 출력해 보시오.

 

  마. matrix의 값 10개를 받는 새로운 함수를 선언하시오. 함수이름은 Selection Sort로 하시오. 10개의 입력은 일일이 직접 써서 넘기시오.

  바. 함수 내용은 선택정렬을 이용하여 행벡터의 숫자를 차례대로 정렬하는 기능을 갖도록 하시오.

  사. 메인함수에서 Selection Sort를 호출한 후, 호출 전후의 행벡터의 모든 값을 출력해 보시오.

  아. Call By Value와 Call By Referernce의 장단점을 100자 이내로 비교해보시오

    Call By Value : 원래의 값을 보존할 수 있는 장점이 있기 때문에 원래의 값은 건드리면 안되는 안전한 프로그램에

                       사용하면 좋다

    Call By Referernce : 본의 주소값을 전달하므로, 원본을 변경할수 있다.

                              (주소값을 통해 원본에 접근하여 변경할 수 있다).

                              그러기 때문에 원본의 값을 변경하기 때문에 위험 요소가 있다.

 

3. 이차정사각행렬도 포인터로 취급할 수 있다. 이 사실을 이용하여 아래 문항을 해결하시오. (2시간 소요)

  가. 메인함수에서 이차정사각행렬을 만들고 {1,2,3,4}를 넣으시오.

  나. 이차정사각행렬의 각 성분값을 받는 함수를 만드시오.

  다. 이차정사각행렬을 함수에 넣으면 그 역행렬이 만들어지도록 해보시오.  다음식을 참조하시오.

  라. 이차정사각행렬을 포인터를 이용하여 주소값을 넘기도록 해보시오.

  마. 이차정사각행렬을 함수에 넣으면 그 역행렬이 만들어지도록 해보시오.

'C언어' 카테고리의 다른 글

C언어 기초 13주차  (0) 2020.12.27
C언어 기초 9주차  (0) 2020.11.29
C언어 기초 8주차  (0) 2020.11.22
c언어 기초 7주차  (0) 2020.11.15
c언어 기초 6주차  (0) 2020.11.08
by 맑은소금 2020. 12. 21. 00:00

1. 함수의 선언 방식은

 

반환할자료형 함수명(입력1의자료형 입력1를받을변수명, 입력2를받을자료형 입력2를받을변수명...)

{

처리할 내용

return 반환할변수명

}

 

이다. 이를 암기하시오. 또한 아래 문제를 해결하시오.(1시간 소요)

 

가. 반환할 자료형이 int 이고 입력은 int a, int b이며 처리할 내용은 int result = a+b 와 같이 두 수를 더해주는 프로그램을 짜고 return에 result를 주어 결과값이 반환되도록 만드시오. 함수명은 임의로 지으시오.

 

나. int main() 내에서 int x=10, y=20 를 주고, 아까 만든 함수의 이름을 쓰고 입력을 넣은 뒤 출력을 z1로 받아 printf 해보시오. 아래의 슈도코드를 참조하시오.

 

int main()

{

int x=10, y=20;

출력받을 변수 = 함수이름(입력1, 입력2);

printf()

}

 

 

다. 두 수를 곱하는 함수를 만들고 int main 내에서 호출하여 입력을 넣은 뒤 출력을 z2로 받아 printf 해보시오.

라. 두 수의 차이를 구하는 함수를 만드시오. 둘 중 더 큰수에서 더 작은 수를 빼도록 하시오. 출력을 z3으로 받아 printf 해보시오. (힌트 : 삼항연산자를 이용하면 간단히 해결됨)

 

마. 만든 함수들을 main 함수 뒤로 자리를 바꾸어 주고, main함수 앞에는 아까 만든 함수의 반환할자료형 함수명(입력1, 입력2...); 를 써서 함수의 형태만 먼저 정의하고 내용은 뒤에 있도록 해보시오. https://enter.tistory.com/59​ 를 참조하시오.

 

 

2. 다음 함수를 구현하시오.(3시간 소요)

가. 반복할 횟수 int n 을 받아 n!를 출력하는 함수를 만드시오. 입력받은 n으로부터 n=1일때까지 계속 곱하면 됨. (주의 : 재귀함수를 이용하지 마시오!) n 양수일때만 계산하고 그렇지 않은 경우 1을 출력하도록 하시오.

 

나. '가'를 재활용하여 퍼뮤테이션 함수를 만드시오. nPr 에서 n,r를 입력받아 결과값을 출력하도록 하시오. n이 양수 r은 0이상이며 n>=r 인지 검사하여, 유효할때만 계산하고 그렇지 않은 경우 1을 출력하도록 하시오.

 

다. '가~나'를 재활용하여 콤비네이션 함수를 만드시오. nCr에서 n,r를 입력받아 결과값을 출력하도록 하시오. n이 양수 r은 0이상이며 n>=r 인지 검사하여, 유효할때만 계산하고 그렇지 않은 경우 1을 출력하도록 하시오.

 

라. nCr 에서

n=1 r=0, n=1 r=1

n=2 r=0, n=2 r=1, n=2 r=2

n=3 r=0, n=3 r=1, n=3 r=2, n=3 r=3

n=4 r=0, n=4 r=1, n=4 r=2, n=4 r=3, n=4 r=4 ...

...

 

일때의 값을 출력하는 함수를 for를 두번 이용하여 만들어 보시오. n=10일때까지 계산하여 스크린샷을 첨부하시오.

'C언어' 카테고리의 다른 글

C언어 기초 13주차  (0) 2020.12.27
C언어 기초 12주차  (0) 2020.12.21
C언어 기초 8주차  (0) 2020.11.22
c언어 기초 7주차  (0) 2020.11.15
c언어 기초 6주차  (0) 2020.11.08
by 맑은소금 2020. 11. 29. 23:46