Presentation is loading. Please wait.

Presentation is loading. Please wait.

5장 배열과 문자열 C 프로그래밍.

Similar presentations


Presentation on theme: "5장 배열과 문자열 C 프로그래밍."— Presentation transcript:

1 5장 배열과 문자열 C 프로그래밍

2 5.1 배열의 의미 변수의 확장개념으로서 동일한 자료형을 갖는 자료를 그룹화 한 것
배열은 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조 예) 일반 변수가 단독주택이라면 배열은 아파트

3 5.1 배열의 의미 크기 배열의 선언은 다음과 같은 구문을 이용 주요 요소는 배열 변수명(이름), 자료형, 그리고 배열의 크기
배열이름 score 로 정수 int 형의 저장 공간이 메모리에 연속적으로 할당된다.

4 5.2 배열의 선언 배열의 선언의 주요 요소는 자료형, 배열명(이름), 자료형, 그리고 배열의 크기이다
데이터형 배열명[배열의 크기]; 예) int      age[5];            // 크기가 5인 정수형 배열 age       double  avg[10];         // 크기가 10인 실수형 배열 avg       char    st[128];         // 크기가 128인 문자형 배열 st 첫 배열 원소는 항상 첨자가 0이며, 차례로 1씩 증가 int age[5];가 선언된다면 Age[0] Age[1] Age[2] Age[3] Age[4]

5 배열의 크기와 첨자 배열 score에서 10개의 자료형 int가 저장되는 항목 각각을 배열 원소(array element)
배열 원소는 첨자(index)를 사용하여 참조되는데, 유효한 첨자의 범위는 0부터 배열크기-1 배열을 선언하는 경우, 대괄호 사이에 기술되는 수는 배열의 크기를 의미하지만, 각각의 배열 원소를 참조하는 대괄호 사이의 수는 배열 원소를 표현하는 첨자 즉 첫 배열 원소는 항상 첨자가 0이며, 차례로 1씩 증가 배열 첨자는 유효한 값의 범위를 벗어나는 경우, 문제 발생 항상 배열 첨자의 사용에 주의해야 한다.   첨자 범위 : 0 ~ size-1

6 5.3 배열 원소와 초기화 배열의 초기화 배열을 구성하는 각 데이터 항목을 원소(element)라 한다.
배열을 선언하면서 동시에 배열원소의 값을 할당 초기값은 중괄호 내에 표현되며 각 원소는 콤마로 구분 배열을 선언한 후 배열의 각 원소에 값을 저장하려면 첨자를 이용하여 각 원소에 값을 대입 int a[5] = {18, 29, 32, 4, 5}; int a[ ] ={18, 29, 32, 4, 5}; int a[5]; a[0] = 18; a[1] = 29; a[2] = 32; a[3] = 4; a[4] = 5;

7 5.3 배열 원소와 초기화 [p137 예제 5-5 실습] 다섯 개의 배열 원소를 갖는 정수형 배열을 선언하여 초기화 한 다음 출력하는 프로그램

8 초기값이 지정되지 않은 나머지 원소의 값은 자동을 0으로 저장된다
5.3 배열 원소와 초기화 배열의 초기화에서 배열의 크기는 생략 가능하며, 이 경우 초기값을 넣는 개수에 따라 배열의 크기가 결정 배열의 크기를 지정하는 경우, 지정된 배열의 크기가 초기 값 개수보다 크면 나머지 지정되지 않은 원소의 초기 값은 자동으로 모두 0으로 저장 예) int age[5]={10,12,15]라고 표현하면 초기값이 지정되지 않은 나머지 원소의 값은 자동을 0으로 저장된다 age[0] age[1] age[2] age[3] age[4] 10 12 15

9 %p 는 주소값을 16진수로 출력하기 위한 형식 지정자
배열의 이름은 배열 영역의 시작주소를 나타내므로 배열의 이름과 첫 번째 배열 원소의 주소값은 동일한 값을 갖는다 배정되는 주소는 컴퓨터 시스템에서 임의로 배정되므로 사용할 때마다 달라진다 100 104 108 112 116 age[0] age[1] age[2] age[3] age[4] %p 는 주소값을 16진수로 출력하기 위한 형식 지정자

10 예제5-2 #include <stdio.h> void main(void) { int i = 0;
        int a[5] = {10, 20, 33, 35, 13};         double b[4] = {1.2, 2.4};         char c[] = {'$', '&', '*'};         printf("int a[5] = {10, 20, 33, 35, 13}; 이후 출력 >>\n");         for (i = 0; i < 5; i++) {                 printf("%d%s", a[i], (i == 4) ? "\n\n" : ", ");              }         printf("double b[4] = {1.2, 2.4}; 이후 출력 >>\n");         for (i = 0; i < 4; i++) {                 printf("%lf%s", b[i], (i == 3) ? "\n\n" : ", ");              printf("char c[] = {'$', '&', '*'}; 이후 출력 >>\n");         for (i = 0; i < 3; i++) {                 printf("%c%s", c[i], (i == 2) ? "\n" : ", ");  }

11 예제5-4 10명의 성적을 배열에 입력하여 가장 성적이 높은 사람을 찾는 프로그램이다.
#include <stdio.h> void main(void) {     int i = 0, max = 0;     int score[10] = {10, 20, 33, 35, 13, 22, 77, 45, 67, 88};     printf("다음은 10명의 성적입니다. >>\n");           for (i = 0; i < 10; i++) {         if (max < score[i]) max = score[i];         printf("%d%s", score[i], (i==9) ? "\n\n" : ", ");       }     printf("위 10명의 성적 중에서 가장 높은 성적은 ");           printf("%d 입니다.\n", max);     }

12 5.4 배열과 문자열 문자열(string) C L a n g u e \0
프로그램 언어에서 자주 다루는 계속된 일련의 문자를 의미 일련의 문자를 앞 뒤로 인용부호 “ ”로 둘러싸서 표기 배열을 이용하여 문자열을 선언하면 배열에는 순차적으로 문자들이 저장되며 맨 끝에는 “ \0 ”이 저장되어 문자열의 끝임을 의미 문자열을 저장하는 배열의 크기는 반드시 저장되는 문자의 개수보다 1이 커야 함 Char str[11] = “ C Language”; 라고 선언하면 str[0] str[1] str[2] str[3] str[4] str[5] str[6] str[7] str[8] str[9] str[10] C L a n g u e \0

13 5.4.1 문자열의 입력 scanf() 함수를 이용한 입력
예) This is my computer 와 Thisismycomputer 와의 출력비교 입력되는 문자열은 첫 공백 문자가 나올 때까지 입력되므로 “This”만 입력된다. 따라서 문자열을 입력할때는 scanf()함수보다는 gets()함수를 많이 사용한다.

14 5.4.1 문자열의 입력 gets() 함수를 이용한 입력
gets(st_addr); // st_addr 는 문자열이 저장될 시작주소 엔터키 앞까지의 모든 문자들이 st_addr에 저장된다. 뉴라인 문자는 저장되지 않으 며, 끝에 문자열의 끝을 나타내는 널 문자(\0)가 저장됨 저장될 장소는 입력할 문자들의 개수보다 1이상 더 큰 장소를 잡아야 함

15 5.4.2 문자열의 출력 printf() 함수를 이용한 출력 p142 예제 5-7 실습
문자열 출력을 위한 형식 지정자는 %s이다 p142 예제 5-7 실습

16 5.4.2 문자열의 출력 puts() 함수를 이용한 출력 p143 예제 5-8 실습
puts(st_addr); // st_addr 는 문자열이 저장되어 시작주소 addr이 가리키는 곳의 문자열을 화면에 출력하며, 자동으로 뉴라인 문자를 추가하여 줄을 바꾼다 p143 예제 5-8 실습

17 5.4.3 문자열 관련함수 예) “hello”를 str에 복사하는 프로그램
문자열 관련함수를 이용하기 위해서는 <string.h> 헤더파일을 필요로 함. 문자열의 복사 strcpy(to , from); // from 문자열을 to문자열로 복사하는 함수 예) “hello”를 str에 복사하는 프로그램 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] h e l o \0

18 5.4.3 문자열 관련함수 문자열의 연결 예) “This”를 복사한 후, 그 뒤에 “ is”를 붙인 예제 T h i s
strcat(to , from); // from 문자열을 to문자열 뒤에 붙이는 함수 예) “This”를 복사한 후, 그 뒤에 “ is”를 붙인 예제 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] T h i s \0

19 5.4.3 문자열 관련함수 문자열의 비교 strcmp(s1 , s2); // s1 문자열과 s2 문자열 비교하여 결과를 리턴하는 함수 두 문자열이 같으면 0의 값을 리턴하고 s1이 s2보다 작으면 음의정수, 크면 양의 정수

20 5.4.3 문자열 관련함수 문자열의 길이 예) 문자열의 길이를 구하는 예제
strlen(str); // str 문자열의 문자 개수를 함수값으로 반환하는 함수 예) 문자열의 길이를 구하는 예제

21 p148 예제 5-10 실습

22 데이터형 배열명 [행(가로줄)의 길이] [열(세로줄)의 길이];
5.5 다차원 배열 배열 인덱스가 2개 이상인 2차 이상의 배열을 의미 2차원 배열의 형태 사용자 입장에서 본 논리적인 데이터의 구조일 뿐 실제 메모리에서는 1차원 배열로 저장 이차원 배열의 행과 열에서 처음 행의 모든 원소가 메모리에 할당된 이후에 계속해서 연속된 메모리에 두 번째 행의 원소가 할당 => 행 우선 형식(row-major order)이다 데이터형 배열명 [행(가로줄)의 길이] [열(세로줄)의 길이]; 예) int a[3][2] a[2][0] a[2][1] a[1][0] a[1][1] a[0][0] a[0][1] a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]

23 5.5 다차원 배열 2차원 배열의 초기화 int a[][] = {{1, 2, 3}, {4, 5, 6}};

24 이차원 배열 2X4의 이차원 배열의 선언과 구조 이차원 배열에서 각 원소를 참조하기 위해서는 2개의 첨자를 이용
이차원 배열에서 각 원소를 참조하기 위해서는 2개의 첨자를 이용   이차원 배열을 행과 열로 취급하는 것은 좀 더 이해를 쉽게 하기 위한 방법 실제로 이차원 배열이 메모리에 저장되는 모습은 행과 열의 개념이 아니라 일차원과 같은 연속적인 메모리에 저장 이차원 배열의 행과 열에서 처음 행의 모든 원소가 메모리에 할당된 이후에 계속해서 연속된 메모리에 두 번째 행의 원소가 할당 배열의 이러한 특징을 행 우선(row major) 개념적인 행과 열의 2차원 배열은 실제 메모리에서 행 우선으로 연속적인 메모리에 저장공간이 확보된다.

25 예제 #include <stdio.h> void main(void) { int cpu[5][2]={ 8088,4,
       void main(void)    { int cpu[5][2]={ 8088,4,            ,4,            ,10,            ,20,            ,40           };       int processor;       int i; printf(“ 프로세서 타입을 8088~80486사이의 숫자를 입력하시오.”);       scanf(“%d",&processor);       for(i=0;i<5;i++)          if(processor==cpu[i][0]) {              printf("Average speed is %d mhz\n",cpu[i][1]);              break;            }        if(i==5) printf("Processor not found\n");   }

26 초기화 주의 이차원 배열을 선언하는 경우, 초기화를 하지 않고 선언만 한다면 배열의 크기는 행과 열, 두 개 모두 반드시 지정되어야 한다. 그러나 이차원 배열인 경우, 선언을 하면서 초기 값을 저장하면 첫 번째 크기는 지정하지 않을 수 있다. 중괄호 하나를 이용한 방법도 가능하고, 중괄호를 중첩하여 이차원 구조표현도 가능 배열의 초기화 구문에서는 지정하지 않은 원소의 값은 0이 저장되므로 다음 구문도 위와 동일한 구문

27 p156 예제 5-16 실습 10개의 문자열을 입력 받은 후 번호를 입력하면 해당되는 문자열을 출력하는 프로그램

28 삼차원 배열 이차원 배열을 확장하면 3차원 배열 2X2X2의 3차원 배열의 선언과 구조
3차원 배열의 각 원소를 참조하기 위해 3개의 첨자를 이용 다음과 같은 초기값을 저장한 경우, 각 원소의 값은 다음과 같다. int a[2][2][2]; int a[2][2][2] = {1, 2, 3, 4, 5, 6, 7, 8};

29 예제 아래의 표를 배열 A, B에 읽어서 대응하는 항목의 합의 표를 만드는 프로그램을 작성하시오. 5 2 7 4 3 1 5 3
7 4 3 1 5 3 9 8 6 1 2

30 예제(계속) #include <stdio.h> void main(void) {
  int a[3][3]={5,2,0,7,4,3,5,2,1};   int b[3][3]={{5,3,9},{8,3,6},{1,0,2}}; int c[3][3];     int i,j;    for(i=0;i<3;i++)     for(j=0;j<3;j++)        c[i][j]=a[i][j]+b[i][j];     { for(j=0;j<3;j++)         printf("%d ",c[i][j]);       printf("\n");     } }


Download ppt "5장 배열과 문자열 C 프로그래밍."

Similar presentations


Ads by Google