C언어: 배열 (Arrays).

Slides:



Advertisements
Similar presentations
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
Advertisements

2007 1학기 12 배열.
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
프로그래밍실습 제 18 강.
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
제5장 제어명령
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
7. while 문의 흐름 제어.
8장 포인터.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
C 프로그래밍.
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
제 11 장 전처리기.
13. 포인터와 배열! 함께 이해하기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 10 함수 기본.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제어문 & 반복문 C스터디 2주차.
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Chapter 11. 배열과 포인터.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
3주차: Control Flow and Others
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
C.
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
배열, 포인터, 함수 Review & 과제 1, 2.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
배열.
11장. 1차원 배열.
Presentation transcript:

C언어: 배열 (Arrays)

배열이란? 배열(array)의 사전적인 의미는 “일정한 차례나 간격에 따라 벌여 놓음”이라는 의미를 가지고 있다. 여러 개의 변수를 메모리에 할당할 때 배열을 이용하면, 한 번에 메모리가 허용하는 범위 내에서 일률적인 주소체계를 가지고 선언할 수 있다.

여러 개의 변수 선언 여러 개의 변수가 필요한 경우 변수를 선언하는 방법 메모리에 할당시 그 위치는 규칙적이지 못하다. int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;

배열의 선언 방법 여러 개의 변수를 선언할 때 일일이 변수의 자료형과 변수명을 나열하는 번거로움을 피하기 위하여 C언어에서는 배열의 기법을 사용하여 메모리를 활용 다음과 같이 배열을 선언 자료형 개수 char a[n]; 배열명

메모리에 배열 저장 int의 크기를 갖는 변수를 총 n개를 선언하고 그 이름은 a라고 명명하고, 이는 메모리에 다음과 같이 저장

배열의 활용 - 다양한 변수들의 간소화

배열의 활용 - 문자열의 처리

반복문을 활용한 배열의 사용 for(n = 0; n < 5; n ++) { a[n] = 0; } a[0]부터 a[4]까지 0을 대입

배열을 사용할 때의 주의사항-1 선언한 배열의 길이와 사용하는 배열의 길이가 일치해야 한다. - a[5]로 선언한 배열에 a[6]은 접근할 수 없다(쓰레기 값이 로드된다).

배열을 사용할 때의 주의사항-2 선언한 길이만큼의 배열은 그 순서가 반드시 0부터 차례대로 1씩 증가되어야 한다. - a[5]로 선언했다면 a[0] 부터 a[4] 까지 사용해야 하며, 중간에 0~4 이외의 숫자는 사용할 수 없다.

배열을 사용할 때의 주의사항-3 배열의 이름도 일반 변수의 이름 규칙과 같이 키워드는 사용할 수 없다

배열을 사용할 때의 주의사항-4 선언한 배열의 자료형은 배열의 전체에 해당하는 자료형이며, 배열의 크기는 전체 배열 수에 비례한다.

1차원배열 배열의 시작부터 끝까지 하나의 종을 이루며 열거된 배열

2차원 배열 입체적으로 이루어져있음

3차원 배열

1차원 배열이란? 배열이 하나의 열을 이루며 원소를 나열한 것

1차원 배열의 선언

1차원 배열의 선언 예 array라는 이름의 배열은 하나의 원소의 크기가 4바이트인 공간 10개를 할당 storage라는 배열은 하나의 원소의 크기가 1바이트인 20개의 공간을 할당 value라는 배열은 하나의 원소의 크기가 8바이트인 5개의 공간을 할당

1차원 배열의 초기화 변수를 초기화하듯이 배열도 최초 선언될 때 초기화할 수 있다. 배열을 선언함과 동시에 초기화를 같이 수행하는 문장

쓰레기 값이 대입된 배열의 초기화 선언한 개수보다 초기화를 적게 했다면, 순서대로 마지막에 초기화하지 않은 배열은 자동으로 0값이 대입

자동으로 배열의 크기가 할당되는 경우의 배열 초기화 배열의 개수를 지정하지 않고 3개의 항목만 초기화하면 array 라고 하는 배열의 크기는 4바이트의 공간이 3개가 되어 자동으로 12바이트가 할당

1차원 배열의 사용 및 접근

배열의 초기화와 대입의 관계

배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 배열의 크기를 계산하고, 배열내의 원소들의 총합을 구하는 프로그램을 작성한다.

예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 // C_EXAMPLE\ch8\ch8_project1\array1.c #include <stdio.h> void main(void) { int a[] = {1, 2, 3, 4, 5}; // a의 크기는 5*4바이트 int i, sum = 0; // i는 for문에 사용, sum은 합을 저장 printf("배열 a의 크기는 %d \n", sizeof(a)); // i가 0부터 5가 될때까지 5번 반복 for(i = 0; i < 5; i++) sum += a[i]; // sum = sum + a[i] } // for printf("1부터 5까지의 합은 %d \n", sum); } // main() 1차원 배열의 선언과 동시에 초기화 a배열의 크기를 바이트 단위로 반환 a배열의 원소값을 얻어옴 a[0]부터 a[4]까지의 합을 더함

배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 sizeof(a) a[0]부터 a[4]까지의 배열의 원소들의 합

다차원 배열이란? 다차원 배열이란 배열을 중복하여 사용하는 것으로 배열이 중복되는 개수만큼 몇 차원의 배열인지 구분한다. 2차원 배열의 예

3차원 배열 2차원 배열에 1차원 배열이 1개 더 추가된 형태 3차원 이상의 배열의 경우에는 이를 도식화하기 힘들 뿐만 아니라 입체적으로 판단하기 복잡해 거의 사용하지 않는다

2차원 배열의 선언과 크기 다차원 배열을 선언하는 방법은 1차원 배열을 선언하는 것과 크게 다르지 않다. 4바이트 (int) × 3 × 4 = 48바이트

3차원 배열의 선언과 크기 4바이트 (int)×3×4×5 = 240바이트

다차원 배열을 선언하는 예 2차원 배열 3차원 배열 4차원 배열

다차원 배열의 초기화 다차원 배열의 초기화시 중괄호({ })내에 차원수를 고려해서 초기화해야 한다.

2차원 배열의 초기화의 예 각 필드에 있는 상수가 어떠한 위치에 들어가는지 유심히 지켜볼 필요가 있다.

2차원 배열 길이의 생략한 선언 배열의 길이를 생략할 때 올바른 경우 배열의 길이를 생략할 때 올바르지 못한 경우

2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램을 작성한다.

예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 // C_EXAMPLE\ch8\ch8_project2\array2.c #include <stdio.h> void main(void) { int p[][2] = {{2, 8}, {4, 14}}; // (2, 8)와 (4, 14)의 두 좌표 선언 int a, b; // 기울기와 y절편 선언 printf("배열 p의 크기는 %d \n", sizeof(p)); a = (p[1][1] - p[0][1]) / (p[1][0] - p[0][0]); // a = (y2-y1) / (x2-x1) b = p[1][1] - a*p[1][0]; // b = y2 - a*x2 printf("1차 함수 식은 y = %dx + %d \n", a,b); } // main() 2차원 배열의 초기화 생략가능 2차원 배열의 크기 = 자료형 * 행 * 열

2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 sizeof(p) y절편 기울기

함수의 인수 전달 일반적으로 함수를 호출할 때 함수가 정의되어 있는 형식에 따라 인수를 전달해야 하는지, 아니면 인수없이 함수만 호출하는 것인지를 결정한다

1차원 배열의 인수 전달 함수를 호출할 때는 배열명만 사용하고, 함수를 정의부분에서 인수로 사용하고자 하는 배열은 대괄호([ ])안의 개수는 기입하지 않는다.

2차원 배열의 인수 전달 호출 시에는 배열명만 기입하고, 수를 정의부분에서 인수로 사용하고자 하는 배열은 2차원 배열의 행 개수는 생략

1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램을 작성한다.

예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 // C_EXAMPLE\ch8\ch8_project3\array3.c #include <stdio.h> // func() 함수원형선언, 인수는 총 3개이며 1차원 배열, 2차원 배열, int형을 인수로 함 void func(int a1[], int r[][2], int t); void main(void) { int a[] = {1, 2, 3}; // 1차원 배열 int r[][2] = {{1, 2}, {3, 4}, {5, 6}}; // 2차원 배열 int v = 10; func(a, r, v); // func() 함수호출, 배열의 경우 배열명만 사용 printf("a[1] = %d, r[1][1] = %d, v = %d \n", a[1], r[1][1], v); } // main() 함수의 원형선언은 배열을 선언할 때 크기를 지정하지 않는 경우와 유사하다. 함수를 호출할 때 배열명만 기입한다.

예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 // func() 함수정의, 인수 형태에 주의 void func(int a1[], int r1[][2], int t) { int i = 0; for(i = 0; i < 3; i++) // for 문을 3번 돌며 인수로 받아온 배열값을 변화시킴 a1[i] *= 2; r1[i][1] *= 3; } // for t *= 10; // 일반 int형 변수를 변화시킴 } // func() 1차원 배열 각 원소에 2를 곱하여 저장 2차원 배열 중 우측 원소에 3을 곱하여 다시 저장 인수로 넘겨 받은 int형 변수에 10을 곱하여 다시 저장

1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 a[1]의 값은 2였으나, func() 함수호출을 하 고 난 뒤 2가 곱해져 4로 변하였다. 일반 변수는 함수 내에서 값을 변경해도 지역변수 형태라 그 값이 변경되지 않는다. r[1][1]의 값은 4였으나 func() 함수에 의해 3이 곱해져 12로 변하였다.

문자배열이란? 문자열을 처리할 때 사용하는 방법으로 1바이트의 문자를 1바이트 크기의 배열 공간에 한 문자씩 삽입하여 전체 문자열을 다룰 때 유용하다. 화면에 “hello”라는 문자를 출력하고자 한다면, 지금까지 배웠던 과정으로는 다음과 같이 선언할 것이다.

hello 라는 문자를 찍기 위한 프로그램 소스코드 실행결과 #include <stdio.h> void main(void) { char str[] = {'h', 'e', 'l', 'l', 'o'}; printf("% s \n", str); } // main() 문자열을 찍기 위한 printf()문의 출력형식 지정문자 실행결과 쓰레기 값이 존재

NULL 문자를 삽입한 배열 프로그램 소스코드 실행결과 #include <stdio.h> void main(void) { char str[] = {'h', 'e', 'l', 'l', 'o', 0 }; printf("% s \n", str); } // main() NULL문자 ('\0')를 대입해도 됨 문자열을 찍기 위한 printf()문의 출력형식 지정문자 실행결과 정상적으로 출력됨

문자배열의 읽기 쓰기 문자배열도 일반 int 배열 등과 마찬가지로 각각의 배열 원소들을 읽거나 쓸 수 있다.

문자배열의 크기 문자는 char 자료형에 1바이트의 크기를 갖는다. 이를 배열로 선언하여 문자열을 만들게 되면, 문자열의 문자 개수에 NULL 문자를 포함한 크기를 갖는다.

문자배열의 선언 문자열을 선언할 때에는 이중인용부호(“ ”)를 사용하는 것이 일반적이다. 이중인용부호를 사용하면 크기는 6바이트가 되며 자동으로 문자열의 끝에 NULL 문자가 추가된다.

잘못된 배열의 선언 “hello”라는 문자열을 배열의 길이를 생략하지 않고, 다음과 같이 지정한다면 에러가 발생할 것이다. C 언어는 이중인용부호(“ ”) 안의 내용을 문자열로 인식하고 항상 끝에 NULL 문자를 삽입하기 때문

문자열의 끝 1바이트의 크기를 갖는 문자는 단일인용부호(‘’)로 표현 1바이트 크기를 갖는 문자가 여러 개 존재할 때는 이중인용부호(“”)를 사용하는 것이 일반적

문자배열을 선언하고 각 원소를 확인하는 프로그램 예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램 이중인용부호(“ ”)를 사용하여 문자배열을 선언하고, 일반 배열처럼 문자를 저장하여 2개의 문자배열을 선언하고, 이를 각각 출력하는 프로그램을 작성한다.

예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램 // C_EXAMPLE\ch8\ch8_project4\array4.c #include <stdio.h> void main(void) { char s[10] = {'h', 'e', 'l', 'l', 'o'}; // 10개의 공간에 5글자를 대입 char s2[] = "students"; // 문자열 초기화 // s을 %를 이용하여 출력하고, s[5]의 자리의 문자를 확인 printf("s = %s, s[5] = %d \n", s, s[5]); // s2[3]의 문자를 출력함 printf("s2[3] = %c \n", s2[3]); // s2의 크기를 출력 printf("sizeof(s2) = %d \n", sizeof(s2)); printf("%s %s \n", s, s2); } // main() 10개의 공간을 설정했으나, 5개의 공간에만 문자가 저장되고, 그 외의 공간에는 0이 자동으로 삽입됨 자동으로 문자의 길이 + 1만큼의 공간이 할당됨 s[5]에 0이 삽입되어 정상적으로 문자열이 출력됨 문자배열의 크기는 문자길이 + 1바이트

예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램 ‘h’, ‘e’, ‘l’, ‘l’, ‘o’ 다음에 0이 있으므로 문자열의 끝은 ‘\0’이다. 0은 ASCII 코드로 ‘\0’ 이다. “”로 선언해도 일반 배열과 같다. 문자배열의 크기는 문자열 길이 + 1바이트

2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 2차원 배열을 활용하여 화면에 My name is Jane이라는 문장을 출력하는 프로그램을 작성한다.

예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 // C_EXAMPLE\ch8\ch8_project5\array5.c #include<stdio.h> void main(void) { char str[][5] = {"My", "name", "is", "Jane"}; int i; for(i = 0; i < 4; i++) printf("%s ", str[i]); } // for printf("\n"); } // main() 2차원 배열을 선언할 때 행의 개수는 생략가능 i가 0 ~ 3까지 루프를 돌면서 str[0] ~ str[3] 까지의 문자열을 출력한다.

예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 s[0] s[1] s[2] s[3]