쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.

Slides:



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

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
C++ Espresso 제3장 배열과 포인터.
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
Chapter 7. 조건문.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
5장 배열 작성자 : 변재현.
누구나 즐기는 C언어 콘서트 제8장 배열.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
5장. 참조 타입.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express Slide 1 (of 32)
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
제8장 배열 1부 8.1 배열 8.2 배열의 초기화 8.3 배열의 응용 8.4 정렬과 탐색 8.5 다차원 배열.
11장. 1차원 배열.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
Introduction To Data Structures Using C
C#.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 1 강.
제 3 강.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
5장 배열과 문자열 C 프로그래밍.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
7주차: Functions and Arrays
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제7장 배열 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
C++ Espresso 제15장 STL 알고리즘.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

쉽게 풀어쓴 C언어 Express 제10장 배열 C Express

배열을 사용하면 한 번에 여러 개의 값을 저장할 수 있는 공간을 할당받을 수 있다. 이번 장에서 학습할 내용 배열을 사용하면 한 번에 여러 개의 값을 저장할 수 있는 공간을 할당받을 수 있다. 반복의 개념 이해 배열의 개념 배열의 선언과 초기화 일차원 배열 다차원 배열

배열의 필요성 학생이 10명이 있고 이들의 평균 성적을 계산한다고 가정하자. 방법 #1 : 개별 변수 사용 int s0; 개별변수를 사용하는 방법은 학생수가 많아지면 번거로워집니다. 방법 #1 : 개별 변수 사용 int s0; int s1; … int s9; 방법 #1 : 배열 사용 int[10];

배열이란? 배열(array): 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소 배열 안에 들어있는 각각의 데이터들은 정수로 되어 있는 번호(첨자)에 의하여 접근 배열을 이용하면 여러 개의 값을 하나의 이름으로 처리할 수 있다.

배열 원소와 인덱스 인덱스(index): 배열 원소의 번호 첨자 또는 인덱스

배열의 선언 자료형: 배열 원소들이 int형라는 것을 의미 배열 이름: 배열을 사용할 때 사용하는 이름이 grade 배열 크기: 배열 원소의 개수가 10개 인덱스(배열 번호)는 항상 0부터 시작한다. int score[60];             // 60개의 int형 값을 가지는 배열 grade float cost[12];           // 12개의 float형 값을 가지는 배열 cost char name[50];             // 50개의 char형 값을 가지는 배열 name char src[10], dst[10];   // 2개의 문자형 배열을 동시에 선언 int index, days[7];       // 일반 변수와 배열을 동시에 선언

배열 원소 접근 grade[5] = 80 grade[5] = 80; grade[1] = grade[0]; grade[0] grade[1] grade[2] grade[3] grade[4] grade[5] grade[6] grade[7] grade[8] grade[9] grade[5] = 80 인덱스 grade[5] = 80; grade[1] =  grade[0];     grade[i] = 100;           // i는 정수 변수 grade[i+2] = 100;         // 수식이 인덱스가 된다. grade[index[3]] = 100;   // index[]는 정수 배열

배열 선언 예제 #include <stdio.h> int main(void) grade[0]=10 { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i < 5; i++) printf("grade[%d]=%d\n",i, grade[i]); return 0; } grade[0]=10 grade[1]=20 grade[2]=30 grade[3]=40 grade[4]=50

배열과 반복문 배열의 가장 큰 장점은 반복문을 사용하여서 배열의 원소를 간편하게 처리할 수 있다는 점 grade[0] = 0; #define SIZE 5 ... for(i=0 ; i<SIZE ; i++) grade[i] = 0;  

배열 선언 예제 #include <stdio.h> #include <stdlib.h> #define SIZE 5 int main(void) { int i; int grade[SIZE]; for(i = 0; i < SIZE; i++) grade[i] = rand() % 100; printf("grade[%d]=%d\n", i, grade[i]); return 0; } grade[0]=41 grade[1]=67 grade[2]=34 grade[3]=0 grade[4]=69

배열 선언 예제 #include <stdio.h> #include <stdlib.h> #define SIZE 5 int main(void) { int i; int grade[SIZE]; printf("5명의 점수를 입력하시오\n"); for(i = 0; i < SIZE; i++) scanf("%d", &grade[i]); printf("grade[%d]=%d\n", i, grade[i]); return 0; } 5명의 점수를 입력하시오 23 35 67 45 21 grade[0]=23 grade[1]=35 grade[2]=67 grade[3]=45 grade[4]=21

배열 선언 예제 #include <stdio.h> #define STUDENTS 5 int main(void) { int grade[STUDENTS]; int sum = 0; int i, average; for(i = 0; i < STUDENTS; i++) printf("학생들의 성적을 입력하시오: "); scanf("%d", &grade[i]); } sum += grade[i]; average = sum / STUDENTS; printf("성적 평균= %d\n", average);   return 0; 학생들의 성적을 입력하시오: 10 학생들의 성적을 입력하시오: 20 학생들의 성적을 입력하시오: 30 학생들의 성적을 입력하시오: 40 학생들의 성적을 입력하시오: 50 성적 평균 = 30

잘못된 인덱스 문제 인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생시킨다. C에서는 프로그래머가 인덱스가 범위를 벗어나지 않았는지를 확인하고 책임을 져야 한다. int grade[5]; … grade[5] = 60; // 치명적인 오류!

잘못된 인덱스 예제 #include <stdio.h> int main(void) { int grade[5]; int i;   grade[0]=10; grade[1]=20; grade[2]=30; grade[3]=40; grade[4]=50; grade[5]=60; for(i = 0; i <= 5; i++) printf("grade[%d]=%d\n", i, grade[i]); return 0; } 시스템에 심각한 오류가 발생할 수도 있다.

배열의 초기화 int grade[5] = { 10,20,30,40,50 }; 60 }; grade[0] grade[1] grade[2] grade[3] grade[4] grade[5] 초기값을 일부만 주면 나머지 원소들은 0으로 초기화됩니다. int grade[5] = { 10 , 20 , 30 }; grade[0] grade[1] grade[2] grade[3] grade[4]

배열의 초기화 배열의 크기가 주어지지 않으면 자동적으로 초기값의 개수만큼이 배열의 크기로 잡힌다. 10 20 30 40 50 6 int grade[ ] = { 10 , 20 , 30 , 40 , 50 , 60 }; grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]

배열 초기화 예제 #include <stdio.h> int main(void) { int grade[5] = { 31, 63, 62, 87, 14 }; int i; for(i = 0; i < 5; i++) printf("grade[%d] = %d\n", i, grade[i]); return 0; } grade[0] = 31 grade[1] = 63 grade[2] = 62 grade[3] = 87 grade[4] = 14

배열 초기화 예제 #include <stdio.h> int main(void) { int grade[5] = { 31, 63 }; int i; for(i = 0; i < 5; i++) printf("grade[%d] = %d\n", i, grade[i]); return 0; } grade[0] = 31 grade[1] = 63 grade[2] = 0 grade[3] = 0 grade[4] = 0

배열 초기화 예제 #include <stdio.h> int main(void) { int grade[5] ; int i; for(i = 0; i < 5; i++) printf("grade[%d] = %d\n", i, grade[i]); return 0; } grade[0]=4206620 grade[1]=0 grade[2]=4206636 grade[3]=2018779649 grade[4]=1

배열 초기화 예제 #include <stdio.h> int main(void) { int grade[5] ; int i; for(i = 0; i < 5; i++) printf("grade[%d] = %d\n", i, grade[i]); return 0; } grade[0]=4206620 grade[1]=0 grade[2]=4206636 grade[3]=2018779649 grade[4]=1

배열 원소의 개수 계산 int grade[] = { 1, 2, 3, 4, 5, 6 }; int i, size; size = sizeof(grade) / sizeof(grade[0]); for(i = 0; i < size ; i++)         printf("%d ", grade[i]); 배열 원소 개수 자동 계산

배열의 복사 잘못된 방법 올바른 방법 int grade[SIZE]; int score[SIZE]; score = grade;               // 컴파일 오류! 잘못된 방법 #include <stdio.h> #define SIZE 5 int main(void) {         int i;         int a[SIZE] = {1, 2, 3, 4, 5};         int b[SIZE];         for(i = 0; i < SIZE; i++)                 b[i] = a[i];          return 0; } 올바른 방법 원소를 일일이 복사한다

배열의 비교 #include <stdio.h> #define SIZE 5 int main(void) { int i;         int a[SIZE] = { 1, 2, 3, 4, 5 };         int b[SIZE] = { 1, 2, 3, 4, 5 };         if( a == b )                  // ① 올바르지 않은 배열 비교                 printf("잘못된 결과입니다.\n");         else         for(i = 0; i < SIZE ; i++) // ② 올바른 배열 비교         {                 if ( a[i] != b[i] )                 {                         printf("a[]와 b[]는 같지 않습니다.\n");                         return 0;                 }         }         printf("a[]와 b[]는 같습니다.\n"); return 0; } 원소를 일일이 비교한다

실습: 최소값 찾기 우리는 인터넷에서 상품을 살 때, 가격 비교 사이트를 통하여 가장 싼 곳을 검색한다. 일반적으로 배열에 들어 있는 정수 중에서 최소값을 찾는 문제와 같다.

실행 결과 --------------------------------------- 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 28 81 60 83 67 10 66 97 37 94 최소값은 10입니다.

알고리즘 배열 prices[]의 원소를 난수로 초기화한다. 일단 첫 번째 원소를 최소값 minium이라고 가정한다. for(i=1; i<배열의 크기; i++) if ( prices[i] < minimum ) minimum = prices[i] 반복이 종료되면 minimum에 최소값이 저장된다.

실습: 최소값 찾기 #include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE 10 int main(void) { int prices[SIZE] = { 0 }; int i, minimum; printf("---------------------------------------\n"); printf("1 2 3 4 5 6 7 8 9 10\n"); srand( (unsigned)time( NULL ) ); for(i = 0; i < SIZE; i++){ prices[i] = (rand()%100)+1; printf("%-3d ",prices[i]); } printf("\n\n"); 물건의 가격 출력

실습: 최소값 찾기 < < < < > > > > > minimum = prices[0]; for(i = 1; i < SIZE; i++) { if( prices[i] < minimum ) minimum = prices[i]; } printf("최소값은 %d입니다.\n", minimum); return 0; 첫 번째 배열 원소를 최소값으로 가정 현재의 최소값보다 배열 원소가 작으면, 배열 원소를 최소값으로 복사한다. grade[0] grade[1] grade[2] grade[3] grade[4] grade[5] grade[6] grade[7] grade[8] grade[9] 50 50 40 40 30 30 20 20 10 10 20 30 40 60 70 < < < < > > > > > 40 10 50 20 30 min

배열 원소 역순 출력 10 20 30 40 50 #include <stdio.h> #define SIZE 5 int main(void) {         int data[SIZE];         int i;                  for(i = 0; i < SIZE; i++)           // 정수를 입력받는 루프         {                 printf("정수를 입력하시오:");                 scanf("%d", &data[i]);         }         for(i = SIZE - 1;i >= 0; i--)      // 역순출력루프                 printf("%d\n", data[i]);         return 0; } 10 20 30 40 50 data[0] data[1] data[2] data[3] data[4] SIZE = 5 정수를 입력하시오:10 정수를 입력하시오:20 정수를 입력하시오:30 정수를 입력하시오:40 정수를 입력하시오:50 50 40 30 20 10

예제 30 20 10 40 50 #include <stdio.h> #define STUDENTS 5 int main(void) {         int grade[STUDENTS] = { 30, 20, 10, 40, 50 };         int i, s;                  for(i = 0; i < STUDENTS; i++)         {                 printf("번호 %d: ", i);                 for(s = 0; s < grade[i]; s++)                         printf("*");                 printf("\n");         }         return 0; } grade[0] grade[1] grade[2] grade[3] grade[4] 30 20 10 40 50 STUDENTS = 5 번호 0: ****************************** 번호 1: ******************** 번호 2: ********** 번호 3: **************************************** 번호 4: ************************************************** 30 20 10 40 50

배열과 함수 배열의 경우에는 사본이 아닌 원본이 전달된다. int main(void) { ... get_average( , int n); } int get_average(int score[], int n) sum += score[i]; 배열 매개 변수의 경우, 원본이 직접 참조됩니다.

배열과 함수 #include <stdio.h> #define STUDENTS 5 int get_average(int score[], int n);     // ① int main(void) {         int grade[STUDENTS] = { 1, 2, 3, 4, 5 };         int avg;         avg = get_average(grade, STUDENTS);         printf("평균은 %d입니다.\n", avg);         return 0; } int get_average(int score[], int n)      // ②         int i;         int sum = 0;         for(i = 0; i < n; i++)                 sum += score[i];         return sum / n; 배열이 인수인 경우, 참조에 의한 호출 배열의 원본이 score[]로 전달

배열이 함수의 인수인 경우 1/2 #include <stdio.h> #define SIZE 7 void square_array(int a[], int size); void print_array(int a[], int size); int main(void) {         int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7 } ;         print_array(list, SIZE);            square_array(list, SIZE);           print_array(list, SIZE);            return 0; } // 배열은 원본이 전달된다. (인수 : 배열)

배열이 함수의 인수인 경우 2/2 void square_array(int a[], int size) { int i;         for(i = 0; i < size; i++)                 a[i] = a[i] * a[i]; } void print_array(int a[], int size)                 printf("%3d ", a[i]);         printf("\n"); 배열의 원본이 a[]로 전달 1   2   3   4   5   6   7 1   4   9  16  25  36  49

원본 배열의 변경을 금지하는 방법 void print_array(const int a[], int size) { ... } 함수 안에서 a[]는 변경할 수 없다.

정렬이란? 정렬은 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것 정렬은 컴퓨터 공학분야에서 가장 기본적이고 중요한 알고리즘중의 하나

정렬이란? 정렬은 자료 탐색에 있어서 필수적이다. (예) 만약 사전에서 단어들이 정렬이 안되어 있다면?

선택정렬(selection sort) 선택정렬(selection sort): 정렬이 안된 숫자들중에서 최소값을 선택하여 배열의 첫번째 요소와 교환

선택정렬(selection sort) 선택정렬(selection sort): 정렬이 안된 숫자들중에서 최소값을 선택하여 배열의 첫번째 요소와 교환 몇 개의 단계만 살펴보자. 5 3 8 1 2 7

선택 정렬 #include <stdio.h> #define SIZE 10 int main(void) { int list[SIZE] = { 3, 2, 9, 7, 1, 4, 8, 0, 6, 5 }; int i, j, temp, least; for(i = 0; i < SIZE-1; i++) least = i; for(j = i + 1; j < SIZE; j++) if(list[j] < list[least]) least = j; temp = list[i]; list[i] = list[least]; list[least] = temp; } for(i = 0;i < SIZE; i++) printf("%d ", list[i]); printf("\n"); return 0; 내부 for 루프로서 (i+1)번째 원소부터 배열의 마지막 원소 중에서 최소값을 찾는다. 현재의 최소값과 비교하여 더 작은 정수가 발견되면 그 정수가 들어 있는 인덱스를 least에 저장한다. 0 1 2 3 4 5 6 7 8 9 list[i]와 list[least]를 서로 교환

변수의 값을 서로 교환할 때 다음과 같이 하면 안됨 grade[i] = grade[least]; // grade[i]의 기존값은 파괴된다! grade[least] = grade[i]; 올바른 방법 temp = list[i]; list[i] = list[least]; list[least] = temp;

순차탐색 순차 탐색은 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법 50 10 20 30 성공 비교 10 20 30 40 50 10 grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]

순차 탐색 #include <stdio.h> #define SIZE 10 int main(void) { int key, i; int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; printf("탐색할 값을 입력하시오:"); scanf("%d", &key); for(i = 0; i < SIZE; i++) if(list[i] == key) printf("탐색 성공 인덱스= %d\n", i); printf("탐색 종료\n"); return 0; } for 루프를 이용하여 list[i]와 key를 비교하는 연산을 배열의 크기만큼 반복한다. 만약 list[i]와 key가 같으면 탐색은 성공되고 키값이 발견된 배열의 인덱스를 출력한다. 탐색할 값을 입력하시오:7 탐색 성공 인덱스 = 6 탐색 종료

이진 탐색 이진 탐색(binary search): 정렬된 배열의 중앙에 위치한 원소와 비교 되풀이

이진 탐색 #include <stdio.h> #define SIZE 16 int binary_search(int list[], int n, int key); int main(void) { int key; int grade[SIZE] = { 2,6,11,13,18,20,22,27,29,30,34,38,41,42,45,47 }; printf("탐색할 값을 입력하시오:"); scanf("%d", &key); printf("탐색 결과= %d\n", binary_search(grade, SIZE, key)); return 0; }

이진 탐색 int binary_search(int list[], int n, int key) { int low, high, middle; low = 0; high = n-1; while( low <= high ){ // 아직 숫자들이 남아있으면 printf("[%d %d]\n", low, high); // 하한과 상한을 출력한다. middle = (low + high)/2; // 중간 위치를 계산한다. if( key == list[middle] ) // 일치하면 탐색 성공 return middle; else if( key > list[middle] )// 중간 원소보다 크다면 low = middle + 1; // 새로운 값으로 low 설정 else high = middle - 1; // 새로운 값으로 high 설정 } return -1;

실행 결과 탐색할 값을 입력하시오:34 [0 15] [8 15] [8 10] [10 10] 탐색 결과= 10

2차원 배열 int s[10]; // 1차원 배열 int s[3][10]; // 2차원 배열

2차원 배열의 구현 2차원 배열은 1차원적으로 구현된다.

2차원 배열의 활용 #include <stdio.h> int main(void) {         int s[3][5];         // 2차원 배열 선언         int i, j;             // 2개의 인덱스 변수         int value = 0;       // 배열 원소에 저장되는 값                  for(i=0;i<3;i++)                     for(j=0;j<5;j++)                             s[i][j] = value++;                         printf("%d\n", s[i][j]);         return 0; } 1 2 3 ... 11 12 13 14

2차원 배열의 초기화 int s[3][5] = { { 0, 1, 2, 3, 4 }, // 첫 번째 행의 원소들의 초기값   {  0,  1,  2,  3,  4 }, // 첫 번째 행의 원소들의 초기값   { 10, 11, 12, 13, 14 }, // 두 번째 행의 원소들의 초기값   { 20, 21, 22, 23, 24 } // 세 번째 행의 원소들의 초기값 };

2차원 배열의 초기화 int s[ ][5] = { { 0, 1, 2, 3, 4 }, // 첫 번째 행의 원소들의 초기값   {  0,  1,  2,  3,  4 }, // 첫 번째 행의 원소들의 초기값   { 10, 11, 12, 13, 14 }, // 두 번째 행의 원소들의 초기값   { 20, 21, 22, 23, 24 }, // 세 번째 행의 원소들의 초기값 };

2차원 배열의 초기화 int s[ ][5] = { { 0, 1, 2 }, // 첫 번째 행의 원소들의 초기값   {  0,  1,  2 },        // 첫 번째 행의 원소들의 초기값   { 10, 11, 12 },         // 두 번째 행의 원소들의 초기값   { 20, 21, 22 }           // 세 번째 행의 원소들의 초기값 };

2차원 배열의 초기화 int s[ ][5] = { 0, 1, 2, 3, 4, // 첫 번째 행의 원소들의 초기값   0, 1, 2, 3, 4,          // 첫 번째 행의 원소들의 초기값   5, 6, 7, 8, 9,           // 두 번째 행의 원소들의 초기값 };

3차원 배열 #include <stdio.h> int main(void) {         int s[3][3][3];      // 3차원 배열 선언         int x, y, z;          // 3개의 인덱스 변수         int i = 1;            // 배열 원소에 저장되는 값                  for(z=0;z<3;z++)                     for(y=0;y<3;y++)                             for(x=0;x<3;x++)                                     s[z][y][x] = i++;         return 0; }

다차원 배열 인수 #include <stdio.h> #define YEARS 3 #define PRODUCTS 5 int sum(int grade[][PRODUCTS]); int main(void) {         int sales[YEARS][PRODUCTS] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };         int total_sale;         total_sale = sum(sales);         printf("총매출은 %d입니다.\n", total_sale);         return 0; } int sum(int grade[][PRODUCTS])         int y, p;         int total = 0;         for(y = 0; y < YEARS; y++)                 for(p = 0; p < PRODUCTS; p++)                         total += grade[y][p];         return total; 총매출은 45입니다. 첫번째 인덱스의 크기는 적지 않아도 된다.

다차원 배열 예제 #include <stdio.h> #define CLASSES 3 학급 0의 평균 성적 = 2 학급 1의 평균 성적 = 12 학급 2의 평균 성적 = 22 전체 학생들의 평균 성적 = 12 #include <stdio.h> #define CLASSES  3 #define STUDENTS 5 int main(void) {         int s[CLASSES][STUDENTS] = {                 {  0,  1,  2,  3,  4 },      // 첫번째 행의 원소들의 초기값                 { 10, 11, 12, 13, 14 },     // 두번째 행의 원소들의 초기값                 { 20, 21, 22, 23, 24 },     // 세번째 행의 원소들의 초기값         };         int clas, student, total, subtotal;         total = 0;         for(clas = 0; clas < CLASSES; clas++)         {                 subtotal = 0;                 for(student = 0; student < STUDENTS; student++)                         subtotal += s[clas][student];                 printf("학급 %d의 평균 성적= %d\n", clas, subtotal / STUDENTS);                 total += subtotal;         } printf("전체 학생들의 평균 성적= %d\n", total/(CLASSES * STUDENTS)); return 0; }

행렬 행렬(matrix)는 자연과학에서 많은 문제를 해결하는데 사용

다차원 배열을 이용한 행렬의 표현 3 3 0 9 9 1 8 0 5 #include <stdio.h> #define ROWS 3 #define COLS 3 int main(void) {         int A[ROWS][COLS] = {       { 2,3,0 },                                         { 8,9,1 },                                         { 7,0,5 } };         int B[ROWS][COLS] = {       { 1,0,0 },                                         { 1,0,0 },                                         { 1,0,0 } };         int C[ROWS][COLS];         int r,c;         // 두개의 행렬을 더한다.         for(r = 0;r < ROWS; r++)                 for(c = 0;c < COLS; c++)                         C[r][c] = A[r][c] + B[r][c];         // 행렬을 출력한다.         {                         printf("%d ", C[r][c]);                 printf("\n");         }              return 0; } 중첩 for 루프를 이용하여 행렬 A의 각 원소들과 행렬의 B의 각 원소들을 서로 더하여 행렬 C에 대입한다. 3 3 0 9 9 1 8 0 5

Q & A