1. 배열의  개념 : 자료형이 같은 여러개의 값을 연속된 기억장소에 같은 이름(배열명)으로 저장한것 주로 동일한 구조의 많은 자료등을 다룰때 사용한다.


변수는 하나의 자료를 저장하지만 배열은 여러개의 자료를 저장한다 즉 여러 변수의 모임이라고 볼수있다.


2. 배열 선언 및 주의사항 : 배열을 선언할때에 배열의 크기(배열 원소수)에는 정수형 상수만 가능하고 변수는 불가능하다.


3. 배열의 초기화 : 배열의 크기를 지정하고 초기값이 부족하다면 초깃값은 자동으로 0으로 지정된다. 배열 원소수를 명시 않으면 중괄호{} 안의 값 개수가 원소수로 결정된다.


4. 예제1 - 5명의 퀴즈점수를 배열에 저장한 후 평균 출력하기 프로그램


#include <stdio.h>

#include <stdlib.h>

#define SIZE 5


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

/*

//배열선언 예

//1. 1000명의 나이를 저장하는 배열

int age[1000];

//2. 5명의 퀴즈점수를 저장하는 배열

int quiz[5];

//3. 100명의 평균을 저장하는 배열

double avg[100];

//4. 학생의 이름(홍길동)을 저장하는 배열

char name[10];  

*/


//배열 예제1. 5명의 퀴즈점수를 입력

int quiz[SIZE], i, count;

int sum=0;

double avg;


for(i=0;i<SIZE;i++)

{

printf("퀴즈점수 입력 : ");

scanf("%d", &quiz[i]);

sum+=quiz[i]; //sum=sum+quiz[i];

avg = (double)sum / SIZE;

//입력한 점수의 합을 출력

printf("입력한 %d명의 합 : %d\n", SIZE, sum);

printf("입력한 %d명의 평균 : %.1lf\n", SIZE, avg);

//평균미만인 수

for(i=0;i<SIZE;i++)

{

if(quiz[i] < avg)

count++;

}

//결과출력

printf("===========================\n");

printf(" 번호 점수 평균과의 차이 \n"); 

printf("===========================\n");

for(i=0;i<SIZE;i++)

printf(" %2d     %2d      %5.1lf\n", i+1, quiz[i], quiz[i]-avg);

printf("===========================\n");

printf(" 평균 : %.1lf 점 \n", avg);

printf("===========================\n");

printf(" 평균미만 : %d명 \n", count);

return 0;

}




5. 예제 2 - 배열의 원소에서 최소값, 최대값 구하기


#include <stdio.h>

#include <stdlib.h>

#define N 5

/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int i;

int min, max; //1. min 변수 지정 

int f[N]={3,0,-30,-20,-1};

for(i=0;i<N;i++)

{

printf("%d ", f[i]);

}

printf("\n");

//최소값 찾기

//2.첫번째 원소를 min변수에 저장

min = f[0];

for (i=1;i<N;i++)

{

if(f[i]<min) //3. 각 원소를 min변수와 비교 및 교체작업 

min = f[i];

//최소값 출력

printf("\n\n 최소값은 %d \n", min); 

//최대값 찾기

max = f[0];

for(i=1;i<N;i++)

{

if(f[i]>max)

max = f[i]; 

//최대값 출력

printf("\n\n 최대값은 %d \n", max); 

 

return 0;

}



7. 예제4 - 배열의 원소를 오름차순 정렬 소스코드, 실행결과

             (주석: 오름차순의 개념정리, 버블정렬, 개선된 버블정렬의 원리 및 차이점)


#include <stdio.h>

#include <stdlib.h>

#define SIZE 5


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int a[SIZE] = {5,4,3,2,1};

int repeat, i, temp;

FILE *fp;


printf("정렬 전 배열 : ");

for(i=0;i<SIZE;i++)

printf("%4d",a[i]);

printf("\n");

// 버블 정렬 시작 : 오름차순정렬 

for(repeat=1;repeat<SIZE;repeat++) // (배열 원소수-1)번 반복하기 

{

//배열의 이웃한 두 원소간의 정렬을 차례대로 반복하기 

for(i=0;i<SIZE-repeat;i++) //(i가 0부터 3까지 순서를 반복) 

{ //SIZE-repeat 개선된 이유 : 이미 정렬이 끝난 부분의 비교를 제거하여 실행속도가 빨라짐. 

if(a[i]>a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;//이웃하는 두원소 교환 

}

} //안쪽 for의 끝 

} // 바깥쪽 for의 끝 

  for(i=0;i<SIZE;i++)

printf("%4d", a[i]);

//배열원소 출력 

fp=fopen("asc.txt","w");

        for(i=0;i<SIZE;i++)

fprintf(fp, "오름차순 정렬 : %2d",a[i]);

fclose(fp);

return 0;

}





8. 예제5 - 배열의 원소를 내림차순 정렬 소스코드, 실행결과           

             (주석:  내림차순 개념정리)


#include <stdio.h>

#include <stdlib.h>

#define SIZE 5


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int a[SIZE] = {1,2,3,4,5};

int repeat, i, temp;


printf("정렬 전 배열 : ");

for(i=0;i<SIZE;i++)

printf("%4d",a[i]);

printf("\n");

// 버블 정렬 시작 : 내림차순정렬 

for(repeat=1;repeat<SIZE;repeat++) // (배열 원소수-1)번 반복하기 

{

//배열의 이웃한 두 원소간의 정렬을 차례대로 반복하기 

for(i=0;i<SIZE-repeat;i++) //(i가 0부터 3까지 순서를 반복) 

{ //SIZE-repeat 개선된 이유 : 이미 정렬이 끝난 부분의 비교를 제거하여 실행속도가 빨라짐. 

if(a[i]<a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;//이웃하는 두원소 교환 

}

} //안쪽 for의 끝 

} // 바깥쪽 for의 끝 

  for(i=0;i<SIZE;i++)

printf("%4d", a[i]);

//배열원소 출력 

return 0;

}




'basic > C' 카테고리의 다른 글

7. 포인터  (0) 2016.11.10
6. 함수  (0) 2016.10.31
4. 제어문(조건문과 반복문)  (0) 2016.10.06
3. 연산자  (0) 2016.09.22
2. C프로그래밍의 기초문법  (0) 2016.09.08

+ Recent posts