게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일
배열이란 무엇인가? 같이 생각해 볼 문제: 10명의 성적 처리 프로그램을 작성하라. 10명의 성적은 국어/영어/수학 별로 주어진다고 가정하자. 석차를 계산하기 위해서는 총점/평균을 계산하고, 총점/평균 순으로 정렬하면 됨. #include <stdio.h> void main( ) { int kor0, kor1, kor2, … kor9; int eng0, eng1, eng2, … eng9; int math0, …; int total0, total1, total2, … total9; int avg0, avg1, … avg9; total0 = kor0+eng0+math0; avg0 = total0 / 3; total1 = kor1+eng1+math1; avg1 = total1 / 3; … } 성적을 저장할 변수를 어떻게 선언할 것인가? 만일 100사람의 성적을 처리한다면 ? 이 프로그램을 쉽게 작성하려면 ? 배열을 이용한다!!
배열이란 무엇인가? 배열을 이용하여 프로그램을 작성하면 ? 프로그램이 간결해지고, 확장이 용이해진다 ! #include <stdio.h> void main( ) { int kor[10]; int eng[10]; int math[10]; int total[10], avg[10]; int i; for (i=0; i<10; i++) { total[i] = kor[i]+eng[i]+math[i]; avg[i] = total[i]/3; } … 프로그램이 간결해지고, 확장이 용이해진다 ! 반복문을 이용하여 효율적으로처리할 수 있다 ! 배열이 유용함!!
배열이란 무엇인가? 둘 이상의 변수를 동시에 선언하는 효과를 지닌다. 많은 양의 데이터를 일괄적으로 처리해야 하는 경우에 유용하다. 지역적 특성을 지닐 수도 있고, 전역적 특성을 지닐 수도 있다.
1차원 배열의 선언 및 초기화 배열 선언에 있어서 필요한 것 세 가지 배열 길이 : 배열을 구성하는 변수의 개수 (반드시 상수를 사용) 배열 요소 자료형 : 배열을 구성하는 변수의 자료형 배열 이름 : 배열에 접근할 때 사용되는 이름
1차원 배열의 선언 및 초기화 1차원 배열의 접근 배열 요소의 위치를 표현 : 인덱스(index) 인덱스는 0에서부터 시작
배열 선언과 접근의 예 1차원 배열의 선언 및 초기화 int main(void) { int array[10]; // 배열 선언 . . . . . return 0; }
1차원 배열의 선언 및 초기화 /* array1.c */ #include <stdio.h> int main(void) { double total; double val[5]; val[0]=1.01; val[1]=2.02; val[2]=3.03; val[3]=4.04; val[4]=5.05; total=val[0]+val[1]+val[2]+val[3]+val[4]; printf("평균 : %lf \n", total/5); return 0; }
선언과 동시에 초기화 1차원 배열의 선언 및 초기화 int main(void) { int arr1[5]={1, 2, 3, 4, 5}; int arr2[ ]={1, 3, 5, 7, 9}; int arr3[5]={1, 2} }
1차원 배열의 선언 및 초기화
문자열 상수 문자열 변수 배열 기반 문자열 변수 문자열이면서 상수의 특징을 지닌다. 문자열이면서 변수의 특징을 지닌다. printf("Hello World! \n"); char str1[5]="Good"; char str2[]="morning";
배열 기반 문자열 변수 /* ar_str.c */ #include <stdio.h> int main(void) { char str1[5]="Good"; char str2[]="morning"; printf("%s \n", str1); printf("%s %s \n ", str1, str2); return 0; }
배열 기반 문자열 변수 #include <stdio.h> void main() { char *strchar = "Good"; char strarry[] = "Good"; printf("%s \n", strchar); printf("%s \n", strarry); }
문자열의 특징 배열 기반 문자열 변수 문자열은 널(null)문자를 끝에 지닌다. int main(void) { char str[6]="Hello"; printf("Hello"); . . . . .
널(null) 문자를 지녀야 하는 이유 배열 기반 문자열 변수 문자열의 끝을 표현하기 위해서 쓰레기 값과 실제 문자열의 경계를 나타내기 위해 printf 함수는 널 문자를 통해서 출력의 범위를 결정 짓는다. int main(void) { char str[100]=”Hello World!”; printf(“%s \n”, str); . . . . .
배열 기반 문자열 변수 /* va_str.c */ #include <stdio.h> int main(void) { int i; char ch; char str[6]="Hello"; printf("--변경 전 문자열--\n"); printf("%s \n", str); for(i=0; i<6; i++) printf("%c | ", str[i]); /* 문자열 변경 */ for(i=0; i<3; i++) ch=str[4-i]; str[4-i]=str[i]; str[i]=ch; } printf("\n\n--변경 후 문자열--\n"); return 0;
#실습 1 20명의 학생의 성적을 입력 받은 후 다음을 계산하는 프로그램을 작성하라. int student[20] = {10, 20, 30, 40, 23, 43, 55, 23, 54, 33, 90, 34, 77, 85, 56, 48, 98, 45, 67, 32}; 총점을 계산한 후 출력함. 평균을 계산한 후 출력함. 분산을 계산한 후 출력함. 분산 공식은 인터넷을 이용
#실습 2 20명의 학생의 성적을 입력 받은 후 성적이 높은 순으로 점수를 출력하시오. int student[20] = {10, 20, 30, 40, 23, 43, 55, 23, 54, 33, 90, 34, 77, 85, 56, 48, 98, 45, 67, 32}; 반대로 성적이 낮은 순으로 출력하시오.
#과제 프로그램 작성 키보드로 아무런 문자를 입력후 이중 0~9 사이의 숫자형 문자가 몇 번 입력되었는가를 출력하는 프로그램을 작성하라 (Enter 키를 누르면 끝낸다) 버블 정렬 알고리즘을 조사하여 설명한 후, 10명의 성적을 입력 받아 1차원 배열에 저장한 후, 버블 정렬 하는 프로그램을 작성하라. 그외 정렬 알고리즘에 대하여 최소한 2가지 이상 조사하시오.