뇌를 자극하는 C프로그래밍 Exercise 9-2 배열의 데이터를 처리하는 프로그램
① 1부터 20까지의 숫자로만 초기화된 ary 배열을 다음과 같이 선언합니다. 이 배열에서 특정 숫자의 개수를 세어 출력하는 프로그램을 작성합니다.
int ary[] = {2,8,15,1,8,10,19,19,3,5,6,6,2,8,2,12,16,3,8,17,12,5,3,14,13,3,2,17,19,16,8,7,12,19,10,13,8,20,16,15,4,12,3,14,14,5,2,12,14,9,8,5,3,18,18,20,4};
프로그램을 실행하면 다음과 같이 수행될 것입니다.
찾기를 원하는 숫자를 입력하세요(1~20) : 19
숫자 19는 배열에 4개 있습니다.
- 소스
#include <stdio.h>
int main()
{
int ary[] = {2,8,15,1,8,10,19,19,3,5,6,6,2,8,2,12,16,3,8,17,12,5,3,14,13,3,2,17,19,16,8,7,12,19,10,13,8,20,16,15,4,12,3,14,14,5,2,12,14,9,8,5,3,18,18,20,4};
int search, count=0, size, i;
printf("찾기를 원하는 숫자를 입력하세요(1~20) : ");
scanf("%d", &search);
size = sizeof(ary) / sizeof(ary[0]);
for(i=0; i<size; i++)
{
if(ary[i]==search)
{
count++;
}
}
printf("숫자 %d는 배열에 %d개 있습니다", search, count);
return 0;
}
- 결과
② ①번 문제에서 1부터 20까지 모든 숫자에 대해서 개수를 세어 출력합니다. 각 숫자에 대하여 개수를 누적시킬 변수들을 배열로 선언하여 작성합니다.
int count[20] = 0;
프로그램을 실행하면 다음과 같이 수행될 것입니다.
1 - 1개
2 - 5개
3 - 6개
.
.
.
19 - 4개
20 = 2개
- 소스
#include <stdio.h>
int main()
{
int ary[] = {2,8,15,1,8,10,19,19,3,5,6,6,2,8,2,12,16,3,8,17,12,5,3,14,13,3,2,17,19,16,8,7,12,19,10,13,8,20,16,15,4,12,3,14,14,5,2,12,14,9,8,5,3,18,18,20,4};
int search, count[20]={0}, size, i,j;
size = sizeof(ary) / sizeof(ary[0]);
for(i=0; i<size; i++)
{
for(j=0; j<20; j++)
{
if(ary[i]==j+1)
{
count[j]++;
}
}
}
for(i=0; i<20; i++)
{
printf("%d - %d개\n", i+1, count[i]);
}
return 0;
}
- 결과
③ 배열에 임의의 숫자를 초기화한 후에 각 숫자들의 위치를 반대로 바꾸는 프로그램을 작성합니다. 배열은 하나만 사용하며 배열의 크기가 바뀌더라도 수정할 필요가 없도록 작성합니다.
1 2 3 4 5 ==> 5 4 3 2 1
두 변수의 값을 바꾸기 위해서는 임시변수를 하나 준비하여 다음과 같이 처리합니다.
int a=10, b=20, temp;
① a의 값을 temp에 복사한다. temp = a;
② b의 값을 a에 복사한다. a = b;
③ temp의 값을 b에 복사한다. b = temp;
프로그램을 실행하면 다음과 같이 수행될 것입니다.
처음 배열에 저장된 값 : 1 2 3 4 5
바뀐 배열에 저장된 값 : 5 4 3 2 1
- 소스
#include <stdio.h>
int main()
{
int ary[] = {1,2,3,4,5};
int size, i, temp;
size = sizeof(ary) / sizeof(ary[0]);
printf("처음 배열에 저장된 값 : ");
for(i=0;i<size;i++)
{
printf("%d ", ary[i]);
}
printf("\n");
for(i=0;i<size/2;i++)
{
temp = ary[i];
ary[i] = ary[size-i-1];
ary[size-i-1] = temp;
}
printf("바뀐 배열에 저장된 값 : ");
for(i=0;i<size;i++)
{
printf("%d ", ary[i]);
}
return 0;
}
- 결과