출처 | DO IT C언어 자료구조
배열의 요소 역순 출력
이번 시간에는 배열의 요소를 역순으로 출력하는 프로그램 및 아이디어를 살펴 볼 예정이다.
예를 들어,
1. 배열 P의 요소 개수가 7
2. 첫 번째 순서대로 {22, 57, 11, 32, 91, 68, 70}이 들어 있다고 가정
3. 순서를 뒤바꾸게 된다면, p[0] = 22와 | p[6] = 70을 바꾼다.
4. 그렇게 되면 교환 횟수를 구할 수 있게 되는데, "교환 횟수 = 요소개수 / 2 이다 "
for(int i = 0; i < n/2; i++) 로 표현가능
1. a[i]와 a[n-i-1]의 값을 교환한다.
int i = 0;
for(i = 0; i < n/2; i++)
{
int t = p[i];
p[i] = p[n-i-1];
a[n-i-1] = t;
//a[i]와 a[n-i-1]의 값을 교환했다.
}
이런 형식을 매크로로 구현해보겠다. 우선 매크로와 관련된 얘기를 해보자.
참고 > [c언어 코딩 도장] : https://dojang.io/mod/page/view.php?id=652
#define은 함수 모양의 매크로도 정의할 수 있다.
#define 매크로이름(x) 함수(x)
#define 매크로이름(x) 코드조합
#include <stdio.h>
#define PRINT_NUM(x) printf("%d\n", x) // printf("%d\n", x)를 PRINT_NUM(x)로 정의
int main()
{
PRINT_NUM(10); // 10: printf("%d\n", 10)
PRINT_NUM(20); // 20: printf("%d\n", 20)
return 0;
}
이와 같이 풀이된다.
이 부분을 이해한 후에 매크로 함수로 배열의 요소를 역순으로 출력해보자,
#include <stdio.h>
#include <stdlib.h>
#define swap(type, x, y) do{type t = x; x = y; y = t;} while(0)
void t_reverse(int a[], int n)
{
int i;
for (i = 0; i < n / 2; i++)
{
swap(int, a[i], a[n - i - 1]);
}
}
int main()
{
int i;
int* x;
int nx;
printf("요소 개수 : ");
scanf_s("%d", &nx);
x = calloc(nx, sizeof(int));// 10개의 배열을 생성하는 역할을 한다.
printf("%d개의 정수를 입력하세요\n", nx);
for (int i = 0; i < nx; i++)
{
printf("x[%d] : ", i);
scanf_s("%d", &x[i]); // 사용자가 콘솔 화면에서 값을 입력한다.
}
t_reverse(x, nx); // t_reverse 함수를 호출해서 값을 바꾼다.
printf("배열의 요소를 역순으로 정렬했다. \n");
for (int i = 0; i < nx; i++) // 값을 순서대로 입력한다.
{
printf("x[%d] = %d\n", i, x[i]);
}
free(x);
return 0;
}
자세한 과정을 살펴보자.
for(int i = 0; i < n/2; i++)
do{ int t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;} while(0); ==
{int t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;}
다음 시간엔 기수변환에 대해서 알아보겠다.