본문 바로가기
College Computer Science/C Language

[C 프로그래밍 실습] 동적 메모리와 전처리 2 (Lab 14)

by 2den 2021. 1. 8.
728x90

<Lab 14 문제 유형 요약>

 

  • Program 1 : 전처리 함수, 매크로
  • Program 2 : 전처리 함수, 매크로
  • Program 3 : 전처리 함수, 매크로, 삼항 연산자
  • Program 4 : 버블 정렬
  • Program 5 : 선택 정렬
  • Program 6 : 삽입 정렬

 


 

Program 1

 

다음을 참고로 매크로 PRINTM(exp)를 정의하여 다음 결과가 나오도록 프로그램을 작성하시오.

  • Dev C++ 의 경우 전처리 연산자(#, #@, ##)printf() 인자로 사용할 경우 오류 발생하나, 아래 문제를 해결하기 위한 매크로 정의에는 문제 없음
  • 매크로 PRINTM (exp)“Expression: exp = 연산 결과값으로 출력

int a = 2;

PRINTM(3 * 4 + 3 / a); 

#include <stdio.h>
#define PRINTM(s) printf("Expression : %s = %d\n", #s, 3 * 4 + 3 / a) 

int main()
{
  int a = 2;
  PRINTM(3 * 4 + 3 / a);
  return 0;
}

 

 

Program 2

 

다음을 참고로 매크로 PRINTXY(x, y)를 정의하여 다음과 같은 결과가 나오도록 프로그램을 작성하시오.

  • a b는 사용자 입력으로 받고, 매크로 PRINTXY(a, b)와 같이 호출 시 인자로 사용

int a, b;

PRINTXY(a, b);

#include <stdio.h>
#define PRINTXY(a, b) printf("a와b의 곱은 %d입니다.\n", a*b) 

int main()
{
  int a, b;
  printf("정수 a와 b를 입력하시오 >> ");
  scanf("%d %d", &a, &b);
  PRINTXY(a, b);
  return 0;
}

 

 

Program 3

 

다음을 참고로 매크로 PRINTMAX(a, b)를 정의하여 다음과 같은 결과가 나오도록 프로그램을 작성하시오.

  • a b는 사용자 입력으로 받고, 매크로 PRINTMAX(a, b)와 같이 호출 시 인자로 사용

int a, b;

PRINTMAX(a, b);

 

#include <stdio.h>
#define PRINTMAX(a, b) printf("a와 b의 최댓값 : %d\n", (a > b) ? a : b) 

int main()
{
  int a, b;
  printf("정수 a와 b를 입력하시오 >> ");
  scanf("%d %d", &a, &b);
  PRINTMAX(a, b);
  return 0;
}

 

 

Program 4

 

버블 정렬(Bubble Sorting) : 다음의 알고리즘과 데이터를 이용하여 데이터를 오름차순으로 정렬하는 프로그램을 쓰시오

  • 입력: 크기가 n인 배열 ary  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };
  • 출력: 정렬된 배열 ary
  • BubbleSort 알고리즘

 for i = 1 to n-pass

     if (ary[i-1] > ary[i])  // 위의 원소가 아래의 원소보다 크면

       ary[i-1]  ary[i]   // 서로 자리를 바꾼다.

 return 배열 ary

#include <stdio.h>
#define LEN 13

int* bubblesort(int* ary, int n)
{
  int temp=0;
  for (int pass=1; pass<n-1; pass++)
  {
    for (int i=1; i<n-pass; i++)
    {
      if (ary[i-1]>ary[i])
      {
        temp = ary[i-1];
        ary[i-1] = ary[i];
        ary[i] = temp;
      }
    }
  }
  return ary;
}

int main()
{
  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };

  int* result = bubblesort(ary, LEN);
  for (int i=0; i<LEN-1; i++)
  {
    printf("%d ", result[i]);
  }
  printf("\n");

  return 0;
}

 

 

Program 5

 

선택 정렬(Selection Sorting)

  • 입력: 크기가 n인 배열 ary  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };
  • 출력: 정렬된 배열 ary
  • SelectionSort 알고리즘

for i = 0 to n-2 {

     min = i

     for j = i+1 to n-1 {    // ary [i]~ ary [n-1]에서 최솟값을 찾는다.

         if (ary[j] < ary[min])

               min = j

          }

      ary[i]  ary[min]    // min이 최솟값이 있는 원소의 인덱스

    }

 return 배열 ary

#include <stdio.h>
#define LEN 13

int* selectionsort(int* ary, int n)
{
  int min, temp;
  for (int i=0; i<n-2; i++)
  {
    min = i;
    for (int j=i+1; j<n-1; j++)
    {
      if (ary[j] < ary[min])
      {
        min = j;
      }
    }
    temp = ary[i];
    ary[i] = ary[min];
    ary[min] = temp;
  }
  return ary;
}

int main()
{
  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };

  int* result = selectionsort(ary, LEN);
  for (int i=0; i<LEN-1; i++)
  {
    printf("%d ", result[i]);
  }
  printf("\n");

  return 0;
}

 

 

Program 6

 

삽입 정렬(Insertion Sorting) : 다음의 알고리즘과 데이터를 이용하여 데이터를 오름차순으로 정렬하는 프로그램을 쓰시오

  • 입력: 크기가 n인 배열 ary  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };
  • 출력: 정렬된 배열 ary
  • insertionSort 알고리즘

for i = 1 to n-1 {

     CurrentElement = ary[i]    // 정렬 안된 부분의 가장 왼쪽원소

     j  i  1   // 정렬된 부분의 가장 오른쪽 원소로부터

                  // 왼쪽  방향으로 삽입할 곳을 탐색하기 위한 인덱스

     while (j >= 0) and (ary[j] > CurrentElement) {

           ary[j+1] = ary[j]   // 뒤로 자리 이동

           j  j - 1

        }

     ary[j+1]  CurrentElement

}

return ary

#include <stdio.h>
#define LEN 13

int* insertionsort(int* ary, int n)
{
  int current;
  for (int i=1; i<n-1; i++)
  {
    current = ary[i];
    int j = i-1;
    while (j>=0 && ary[j]>current)
    {
      ary[j+1] = ary[j];
      j = j-1;
    }
    ary[j+1] = current;
  }
  return ary;
}

int main()
{
  int ary[] = { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 };

  int* result = insertionsort(ary, LEN);
  for (int i=0; i<LEN-1; i++)
  {
    printf("%d ", result[i]);
  }
  printf("\n");

  return 0;
}

 

728x90

댓글