▩ 배열의 개념과 1차원 배열
- 같은 데이터형을 가진 데이터들의 집합
- 데이터의 형태가 집합적인 형태를 가지면서 같은 처리 방식을 가질 경우 사용
- 배열은 인덱스를 이용하여 각 요소가 구분됨
- 배열의 인덱스는 0부터 n-1까지 사용함
- 배열 처리시 일반적으로 for문을 1개 정도 동반함
- 배열의 선언:
. int arr[5]; - 5개의 정수를 저장할 수 있는 배열을 선언합니다.
. int arr[5] = {1,2,3,4,5};
5개의 정수를 저장할 수 있는 배열을 선언하면서 5개의 정수를 배열에 저장합니다.
1. 배열에 값을 저장한 다음 출력하는 일반적인 프로그램
#include <stdio.h>
#include <conio.h>
void main() {
int i;
int arr[10];
for(i=0; i<10; i++)
arr[i]=i;
for(i=0; i<10; i++)
printf("arr[%d] = %d\n", i, arr[i]);
getch();
}
▩ 1차원 배열, 2차원 배열 예제
>>>>> 1차원 배열의 사용
#include <stdio.h>
#include <conio.h>
void main() {
int k;
int arr[10];
for(k=0; k<10; k++)
arr[k]=k;
for(k=0; k<10; k++)
printf("arr[%d] = %d\n", k, arr[k]);
getch();
}
UP!!!▷ 배열에 들어가는 값이 1부터 10이 되도록 수정하세요.
UP!!!▷ tot란 변수에 배열의 모든 값의 합을 구해서 출력해 보세요.
UP!!!▷ 배열에 들어가 있는 값중에 짝수인 수들의 합을 구해서 출력해 보세요.
>>>>> 영어 대문자를 배열에 저장하고, 역순으로 출력하는 프로그램
#include <stdio.h>
#include <conio.h>
void main() {
int k;
char alpha[26];
for(k=65; k<=90; k++){
alpha[k-65]=k;
}
for(k=90; k>=65; k--){
printf("alpha[%d] = %c\n", k-65, alpha[k-65]);
}
getch();
}
UP!!!▷ 알파벳이 Z부터 역으로 5개씩 출력되는 프로그램으로 수정하세요.
UP!!!▷ 알파벳이 A부터 5개씩 출력되는 프로그램으로 수정하세요.
▩ 최대/최소값 추출의 원리
- MAX변수에는 최소값을 초기값으로 준다.
- MIN변수에는 최대값을 초기값으로 준다.
0 ~ 3000 사이의 데이터를 기준으로 한다면 max=0, min=3000으로 주어야 한다.
- if문을 이용하여 최대값보다 큰 값이 나타나면 최대값에 새로운 값을 대입한다.
if (max < readData) max = readData;
- if문을 이용하여 최소값보다 작은 값이 나타나면 최소값에 새로운 값을 대입한다.
if (min > readData) min = readData;
>>>>> 배열의 이용(입력 수의 범위:0~3000)
#include <stdio.h>
#include <conio.h>
void main() {
int i, mx_cn=1, mn_cn=1;
int max=0, min=3000;
int jum[5];
for(i=0; i<5; i++) {
printf("%d번째 수를 입력하세요 : ", i+1);
scanf("%d", &jum[i]);
}
for(i=0; i<5; i++) {
if(jum[i]>max) {
max=jum[i];
mx_cn=i+1;
}
if(jum[i]<min) {
min=jum[i];
mn_cn=i+1;
}
}
printf("\n");
printf("최대값 : %d, 입력번호 : %d\n", max, mx_cn);
printf("최소값 : %d, 입력번호 : %d\n", min, mn_cn);
getch();
}
>>>>> 배열의 크기
#include <stdio.h>
#include <conio.h>
void main() {
int k;
int num[] = {25, 36, 45, 45};
char alpha[] = {'A', 'B', 'E'};
for(k=0; k<4; k++)
printf("배열 num[%d]의 크기 : %d\n", k, sizeof num[k]);
printf("배열 num의 크기 : %d\n", sizeof(num));
for(k=0;k<3;k++)
printf("배열 alpha[%d]의 크기 : %d\n", k, sizeof alpha[k]);
printf("배열 alpha의 크기 : %d\n", sizeof(alpha));
getch();
}
>>>>> 문자열의 초기화
#include <stdio.h>
#include <conio.h>
void main() {
char alpha1[] = {'A', 'B', 'C', 'D', 'E'};
char alpha2[] = {'A', 'B', 'C', 'D', 'E', '\0'};
char alpha3[] = "ABCDE";
printf("배열 alpha1의 내용 : %s\n", alpha1);
printf("배열 alpha1의 크기 : %d\n", sizeof(alpha1));
printf("\n");
printf("배열 alpha2의 내용 : %s\n", alpha2);
printf("배열 alpha2의 크기 : %d\n", sizeof(alpha2));
printf("\n");
printf("배열 alpha3의 내용 : %s\n", alpha3);
printf("배열 alpha4의 크기 : %d\n", sizeof(alpha3));
getch();
}
>>>>> 문자 배열의 이용
#include <stdio.h>
#include <conio.h>
void main() {
char fm[]= "File MENU";
char em[]= "Edit MENU";
char hm[]= "Help MENU";
char wm[]= "Wrong Input";
char c;
printf("메뉴 코드를 입력하세요 : ");
if((c=getch()) >= 97) c -= 32;
while(c!='X') {
switch(c) {
case 'F' :
printf("\n%s\n", fm);
break;
case 'E' :
printf("\n%s\n", em);
break;
case 'H' :
printf("\n%s\n", hm);
break;
default :
printf("\n%s\n", wm);
}
printf("계속하려면 메뉴 코드를, 종료하려면 X를 누르세요.");
if((c=getch()) >= 97) c -= 32;
}
printf("\n프로그램을 종료합니다.");
getch();
}
[참고] 데이터 정렬의 원리
- swap 알고리즘
a[0]=100, a[1]=200의 값을 바꾸는 경우, temp는 임시변수
temp=a[0];
↙
a[0]=a[1];
↙
a[1]=temp;
temp
①↗ ↘ ③
a[0] ← a[1]
②
기준수 a[0], 총 비교횟수 4회
↓
비교1 500 400 300 100 200
비교2 400 500 300 100 200 a[0], a[1] 비교후의 수
비교3 300 500 400 100 200 a[0], a[2] 비교후의 수
비교4 100 500 400 300 200 a[0], a[3] 비교후의 수
100 500 400 300 200 a[0], a[4] 비교후의 수
기준수 a[1], 총 비교횟수 3회
↓
비교1 100 500 400 300 200
비교2 100 400 500 300 200 a[1], a[2] 비교후의 수
비교3 100 300 500 400 200 a[1], a[3] 비교후의 수
100 200 500 400 300 a[1], a[4] 비교후의 수
기준수 a[2], 총 비교횟수 2회
↓
비교1 100 200 500 400 300
비교2 100 200 400 500 300 a[2], a[3] 비교후의 수
100 200 300 500 400 a[2], a[4] 비교후의 수
기준수 a[3], 총 비교횟수 1회
↓
비교1 100 200 300 500 400
100 200 300 400 500 a[3], a[4] 비교후의 수
for (i=0; i<=3; i++) <-- 기준수
for(j=i+1; j<=4; j++) <-- 대응수
>>>>> 5개의 정수를 입력받아 정렬하는 프로그램
#include <stdio.h>
#include <conio.h>
void main() {
int i, j, t;
int jum[5];
for(i=0; i<5; i++) {
printf("%d번째 수를 입력하세요 : ", i+1);
scanf("%d", &jum[i]);
}
printf("\n");
printf("입력된 자료\n");
for(i=0; i<5; i++) {
printf("%d ", jum[i]);
}
for(i=0; i<=3; i++) {
for(j=i+1; j<=4; j++) {
if(jum[i]>jum[j]) {
t=jum[i];
jum[i]=jum[i];
jum[j]=t;
}
}
}
printf("\n정렬된 자료\n");
for(i=0; i<5; i++) {
printf("%d ", jum[i]);
}
getch();
}