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

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

Chapter 12 배열. 2 배열  의미  배열은 연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조로 그 사용이 간편  배열은 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조 일반 변수가 단독주택이라면 배열은 아파트  크기  배열의.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
4장 배열과 함수 한빛미디어(주).
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
8. 배열.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
누구나 즐기는 C언어 콘서트 제8장 배열.
5장. 참조 타입.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
2주차: 변수, 수식, Control Flow.
제8장 배열 1부 8.1 배열 8.2 배열의 초기화 8.3 배열의 응용 8.4 정렬과 탐색 8.5 다차원 배열.
6장. printf와 scanf 함수에 대한 고찰
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
C#.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
Chapter 08. 함수.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Canary value 스택 가드(Stack Guard).
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
[ 단원 04 ] 반복과 배열.
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 09. 포인터 1.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

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

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

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

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]

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

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;

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

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

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

예제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" : ", ");  }

예제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);     }

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

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

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

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

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

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

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

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

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

p148 예제 5-10 실습

데이터형 배열명 [행(가로줄)의 길이] [열(세로줄)의 길이]; 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]

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

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

예제 #include <stdio.h> void main(void) { int cpu[5][2]={ 8088,4,        void main(void)    { int cpu[5][2]={ 8088,4,            8086,4,            80286,10,            80386,20,            80486,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");   }

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

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

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

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

예제(계속) #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");     } }