<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;
}
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 기말고사 문제 (0) | 2021.01.08 |
---|---|
[C 프로그래밍 실습] 동적 메모리와 전처리 1 (Lab 13) (0) | 2021.01.08 |
[C 프로그래밍 실습] Report 04 (0) | 2021.01.08 |
[C 프로그래밍 실습] 파일 처리 (Lab 12) (0) | 2021.01.07 |
[C 프로그래밍 실습] 함수와 포인터 활용 2 (Lab 11) (0) | 2021.01.07 |
댓글