C언어 배열 출력시 반복문 사용 및 내림차순 출력

C언어 배열의 출력은 배열 원소의 입력을 통해 가능합니다. 배열 원소의 정수값에 변수를 대입 후 반복문을 통해 대량 출력도 할 수 있습니다. 배열을 역순으로 출력은 초깃값에 -1을 추가합니다.

C언어 배열 출력

배열 개수가 적을 때 배열값 출력은 printf() 함수에 배열 원소를 직접 삽입하면 됩니다.

#include<stdio.h>
void main() {
	int num[5];
	num[0] = 1;
	num[1] = 2;
	num[2] = 3;
	num[3] = 4;
	num[4] = 5;

	printf("%d %d %d %d %d", num[0], num[1], num[2], num[3], num[4]);
}

결과

1 2 3 4 5

배열 출력 반복문 이용

배열 개수가 많은 경우 반복문을 이용하면 작성시간을 줄일 수 있습니다.

#include<stdio.h>
void main() {
	int num[5];
	num[0] = 1;
	num[1] = 2;
	num[2] = 3;
	num[3] = 4;
	num[4] = 5;

	int x; // 배열[n] 원소에 대입할 변수

	for (x = 0; x <= 4; x++)
	{
		printf("%d ", num[x]);
	}
}

결과

1 2 3 4 5

배열 개수 구하면서 출력

배열의 사이즈를 입력하지 않았을 경우 개수를 구하는 수식을 대입하면 됩니다.

#include<stdio.h>
void main() {
	int num[] = { 1, 2, 3, 4, 5 };

	int x;

	for (x = 0; x <= sizeof(num)/sizeof(int); x++) //오류가 발생합니다. 왜 그럴까요?
	{
		printf("%d ", num[x]);
	}
}

결과

하지만 오류가 발생합니다. 왜 그럴까요?

1 2 3 4 5 -858993460

왜냐하면 배열의 개수는 배열 원소[정수]보다 1이 크기 때문입니다. 현재 수식은 x <= 5로 되었습니다. 따라서 등호를 제외해야 x < 5x <= 4와 수식이 동일해집니다.

#include<stdio.h>
void main() {
	int num[] = { 1, 2, 3, 4, 5 };

	int x;

	for (x = 0; x < sizeof(num)/sizeof(int); x++) //등호를 제외해야 합니다.
	{
		printf("%d ", num[x]);
	}
}

결과

1 2 3 4 5

배열 내림차순 출력

배열값을 뒤에서부터 출력하고 싶은 경우 반복문의 초깃값을 배열 크기로 지정하고, 대신 반복문의 종료를 배열 원소[0]에 맞추고, 감소 연산자를 사용하면 됩니다.

#include<stdio.h>
void main() {
	int num[] = { 1, 2, 3, 4, 5 };

	int x;

	for (x = sizeof(num)/sizeof(int); x >= 0; x--) //오류가 발생합니다. 왜 그럴까요?
	{
		printf("%d ", num[x]);
	}
}

결과

오류가 발생하는 이유는 초깃값이 배열의 개수인데 배열의 원소 번호는 배열 개수 - 1이기 때문입니다.

-858993460 5 4 3 2 1

현재 수치는 초깃값이 num[5]가 됩니다. 따라서 사이즈를 측정할 때 -1을 해줘야 초깃값이 num[4]가 됩니다.

#include<stdio.h>
void main() {
	int num[] = { 1, 2, 3, 4, 5 };

	int x;

	for (x = sizeof(num)/sizeof(int) - 1; x >= 0; x--) //사이즈 측정시 -1을 삽입해줘야 합니다.
	{
		printf("%d ", num[x]);
	}
}

결과

5 4 3 2 1

배열의 데이터 개수와 배열 원소 번호가 일치하지 않는 다는 점이 배열 내림차순 정렬의 핵심입니다.