1 / 60

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 7 장 : 배열과 문자열 도서출판 - 인터비젼. 7 장 배열과 문자열. 학습목표 1. 배열의 의미와 특징에 대해 이해한다 . 2. 배열의 초기화 및 입력방법을 이해한다 . 3. 문자열에 대해 이해한다 . 4. 다차원 배열과 활용에 대해 이해한다. 목차. 7 장 배열과 문자열 예습시간 1. 배열의 기본 개념 [ 기초다지기 ] 배열의 기본 개념 이해하기 2. 문자열 관련 함수들

ossie
Download Presentation

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 최신 C프로그래밍 언어문제해결에서 프로그래밍까지 개정판 7장 : 배열과 문자열 도서출판 - 인터비젼

  2. 7장 배열과 문자열 • 학습목표 • 1. 배열의 의미와 특징에 대해 이해한다. • 2. 배열의 초기화 및 입력방법을 이해한다. • 3. 문자열에 대해 이해한다. • 4. 다차원 배열과 활용에 대해 이해한다.

  3. 목차 • 7장 배열과 문자열 • 예습시간 • 1. 배열의 기본 개념 • [기초다지기] 배열의 기본 개념 이해하기 • 2. 문자열 관련 함수들 • [기초다지기] 문자열 함수 이용하기 • 3. 다차원 배열의 이해 • [기초다지기] 다차원 배열 이해하기 • 실습시간 • 다차원 배열 활용 • 문자열 배열과 관련 함수 • 연습시간 • 배열의 특징 분석

  4. 배열의 기본 개념 예습시간 – 1 교시

  5. 배열의 기본 개념 • 학습 개요 • 배열의 개념에 대해 이야기한다. • 배열의 선언과 초기화 방법에 대해 다룬다. • 1차원 배열과 문자열에 대해 알아본다.

  6. 배열의 기본 개념 • 배열의 기본 개념 • 배열은 동일한 유형의 데이터들의 집합으로 동일한 유형의 많은 데이터 처리를 위해 사용된다. • 일반 변수의 문제점 • 프로그램 내의 동일한 유형의 많은 변수를 각기 다른 이름으로 사용 시 변수를 조작하는데 많은 어려움 존재 • 배열의 선언 형식 • [기억클래스] 데이터형 배열명[배열의크기][배열의크기][…] • 기억 클래스 : 배열이 저장될 메모리상의 위치 및 특징, 생략가능 • 데이터형 : 배열에 저장될 값의 유형 • 배열명 : 배열을 나타내는 대표멍 • [배열의크기] • 배열에 포함될 요소의 수 • 1개일 경우 1차, 2개일 경우 2차원 배열이 된다. • 첨자로 접근.

  7. 배열의 기본 개념 • 1차원 배열 • 선형 리스트 구조를 가지며, 첨자의 개수가 하나인 배열 • 물리적으로 연결된 구조 • 선언 예> int array[10]; • 메모리 구조 • 배열의 대표명 • 배열이 저장된 대표 주소의 의미 • 배열의 각 요소는 첨자를 통해 접근 (예 3요소 : array[2]) • 첨자는 0부터 [배열의 수 -1]값 까지 표현 array (배열의 대표명)

  8. 배열의 기본 개념 • 1차원 배열 활용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     int array[5]; // 5개의 정수형 배열 선언 • 04     int index; • 05     for(index =0 ; index < 5; index ++){ • 06          array[index] = 0; // 첨자를 통한 각 요소 접근 • 07     } • 08 }

  9. 배열의 기본 개념 • 1차원 배열의 선언과 초기화 • C언어는 배열의 선언과 동시에 초기값을 할당하는 방법을 제공 • 선언과 초기화의 예 • static int array[5]={1,2,3,4,5}; • 메모리 구조 • 일반적으로 선언과 동시에 초기화 가능한 배열은 static과 extern 기억클래스 형태의 배열이다. • auto 배열은 선언과 동시에 초기화 할 수 없기 때문에 각 요소 별로 값을 할당해 주어야 한다. • 배열의 선언과 초기화가 동시에 이루어질 경우 첨자의 값 생략 가능 이때 초기값의 개수에 의해 자동적으로 배열 크기 결정됨 • static int array[]={10,20,30,40,50,60}; array

  10. 배열의 기본 개념 • 배열의 선언과 초기화의 예 ※ 일부 컴파일러는 auto 변수에 대한 지역 배열의 초기화 값 설정 기능을 제공한다.

  11. 배열의 기본 개념 • 배열의 요소에 값 할당 • 프로그램 과정 중 언제든지 배열의 각 요소에 값을 할당 할 수 있다. • 배열의 요소에 값 할당은 첨자를 통해 이루어진다. • 첨자를 포함한 배열은 일반변수와 같은 의미를 가진다. • 사용 예 01 int data[10]; 02 data[0] = 30; 03 data[9] = 20; 01 int data[10]; 02 scanf("%d", &data[5]);

  12. 배열의 기본 개념 • 문자열 • 문자배열 : 문자형 데이터 값이 배열로써 존재 • 문자열 : 문자 배열 끝에 NULL('\0') 문자를 포함하는 배열 • 문자배열과 문자열의 관계 • 문자열은 ""을 통해 값을 할당할 수 있다. • 마지막에 NULL('\0')문자가 추가되므로 항상 문자열의 크기는 글자수 + 1을 가진다. • 문자열 역시 선언과 초기화 과정이 동시에 일어날 경우 배열의 크기를 생략할 수 있다. 예> char str[]="good day";

  13. 배열의 기본 개념 • 문자열 • scanf()함수를 사용한 문자열 입력 시 • 키보드를 통해 문자열을 입력 받기 위해서는 %s의 형식 지정 문자를 사용한다. • 입력 데이터가 문자의 배열이기 때문에 문자열 대표 이름을 통해 입력 받는다. • 사용 예 • 01 char input[80]; • 02 scanf("%s",input); • 배열의 크기가 80이므로 79자까지의 문자열의 입력이 가능하다. 배열의 마지막 문자는 자동적으로 NULL('\0')문자로 채워진다.

  14. [기초다지기] 배열의 기본 개념 이해하기 • 1. 1차원 배열의 선언, 초기화 그리고 할당 과정

  15. [기초다지기] 배열의 기본 개념 이해하기 • 1. 1차원 배열의 선언, 초기화 그리고 할당 과정 • 분석 • 홀수 값을 가진 odd와 짝수 값을 가진 even 배열을 하나의 array배열에 담는 프로그램 • odd와 even 배열을 초기화하기 위해 static 타입의 정수형 배열 변수를 선언 • even[]은 초기화 개수에 의해 자동적으로 5개의 배열 공간이 할당 • for문에서 0에서 9까지 10번 반복하면서 홀수의 값은 0,2,4...와 같은 인덱스 값에 저장 • 짝수 값은 1,3,5,... 인덱스의 위치에 저장 • 배열의 인덱스가 0에서부터

  16. [기초다지기] 배열의 기본 개념 이해하기 • 2. 문자 배열과 문자열에 대해 이해하자.

  17. [기초다지기] 배열의 기본 개념 이해하기 • 2. 문자 배열과 문자열에 대해 이해하자. • 분석 • 두 개의 문자열 선언 • 첫 번째 문자열 • 문자 요소단위로 각 배열에 저장하고 마지막에 NULL('\n')문자를 입력 • 두 번째 문자열 • 문자열로 저장 • 출력방법 • 각 요소로 출력할 수 있으며 문자열로 출력 가능 • 첫 번째/ 두번째 for문 : 각 요소별로 출력 • printf함수 : %s를 통해 문자열로 출력 • %s에 매칭되는 것은 배열의 대표명이며 NULL('\0')문자를 만날 때까지 출력

  18. 문자열 관련 함수들 예습시간 – 2 교시

  19. 문자열 관련 함수들 • 학습 개요 • 문자열은 프로그램에서 빈번하게 사용되는 요소이다. • 문자열의 효율적인 사용을 위해 필요한 문자열 관련 표준 라이브러리 함수들에 대해 알아본다. • 문자열 관련 함수 종류 • 문자열 비교 • 길이 구하기 • 복사 및 문자 형태 변환 • 문자열 연결

  20. 문자열 관련 함수들 • 문자열 함수의 사용 • 문자열 함수의 종류 • 문자열 비교 • 길이 구하기 • 문자열 복사 • 두 문자열 연결 • 문자열의 값 반환 • 문자열 관련 함수는 모두 string.h 헤더파일에 포함되어 있다. • 문자열 함수를 사용하기 위해서는 이 스트링 관련 헤더 파일을 프로그램에 다음과 같이 선언해야 한다. • #include <string.h>

  21. 문자열 관련 함수들 • 두 문자열 비교 함수 (strcmp, strncmp) • 이 함수는 ASCII 코드 값에 의해 두 문자열의 크기를 비교한다. • 사용 형식 • 1) int strcmp(str1,str2) • 두 문자열을 비교 하여 정수 값의 결과를 변환 • 반환 결과 • 양수 : str1 > str2 • 0 : str1 == str2 • 음수 : str1 < str2 • 2) int strncmp(str1,str2,n) • 1의 형식과 동일하지만 3번째 인자 n 값을 포함 • n은 몇 번째 문자까지 비교 대상으로 할 것인지를 설정

  22. 문자열 관련 함수들 • 두 문자열 비교 함수 (strcmp, strncmp) • 사용 예 • #include <stdio.h> • #include <①_______________> • void main(){ •         int result1,result2; •         static char string1[] = "hello world"; •         static char string2[] = "hello c"; •         result1 = strcmp(string1, string2); •         result2 = strncmp(string1, string2, 5); •         printf("result1 = %d , result2 = %d \n", result1,result2); • } • 실행결과 : result1 = ②_________, result2 = ③____________ string.h 1 0

  23. 문자열 관련 함수들 • 문자열의 길이 얻기 (strlen) • 문자열의 크기를 얻어온다. • 형식 • int strlen(str) • 사용 예> • #include <stdio.h> • #include <string.h> • void main(){ •         char buffer[80]; •         int length; •         buffer = "Today is good"; •         length= strlen(buffer); •         printf(" %s의 길이는 %d 이다. \n", buffer, length); • } • 실행 결과는 “________________의 길이는 ________이다.” Today is good 13

  24. 문자열 관련 함수들 • 문자열의 처리 (strcpy, strcat, strlwr, strupr) • 문자열 처리는 문자열 복사, 연결, 대소문자 변환 함수를 포함 • strcpy 함수 • 문자열 복사 • 한 문자열을 다른 문자열로 복사 • 형식 : strcpy(str1,str2) • str2의 문자열을 str1에 복사한다. • str1은 str2의 공간보다 크거나 같아야 한다. 그렇지 않을 경우 잘림현상 • strncpy 함수 • strcpy함수와 동일하지만 복사할 문자열의 크기를 지정할 수 있다. • 형식 : strncpy(str1,str2,n) • str2의 n개의 문자를 복사하여 str1에 저장

  25. 문자열 관련 함수들 • 문자열의 처리 • strcpy와 strncpy 사용 예 • #include <stdio.h> • #include <string.h> • void main(){ •         static char target[80], two[40]; •         static char source[] = "Hi everyone"; •         strcpy(target,source); •         strncpy(two, source,2); •         printf("target = %s, two = %s \n" ,target, two); • } • 출력 결과 : target = __________ , two = ____________ Hi everyone Hi

  26. 문자열 관련 함수들 • 문자열의 처리 • strcat 함수 • 두 문자열을 하나의 문자열로 결합 • 형식 : strcat(str1,str2) • str1에 str2의 문자열을 결합한다. • str1은 두 문자열이 결합된 크기보다 커야 한다. • strncat 함수 • 결합할 문자열의 크기를 지정할 수 있다. • 형식 : strncat(str1,str2,n) • str2의 n의 크기만 str1에 결합한다.

  27. 문자열 관련 함수들 • 문자열의 처리 • strcat와 strncat 함수 활용 예 • #include <stdio.h> • #include <string.h> • void main(){ •         static char target[80]= "programming "; •         static char two[80]= "the language "; •         static char source[] = "is easy"; •         strcat(target, source); •         strncat(two, source,2); •         printf("target = %s, two = %s\n" ,target, two); • } • 출력 결과 : target = ___________________ , two = __________________ programming is easy the language is

  28. 문자열 관련 함수들 • 문자열의 처리 • 대소문자 변환 함수 (strlwr, strupr) • strlwr 함수 • 문자열을 소문자로 변환하고 이때의 주소를 반환 • 문자열 포인터 변수 = strlwr(문자열) • strupr 함수 • 문자열을 대문자로 변환하고 이때의 주소를 반환 • 문자열 포인터 변수 = strupr(문자열) • 사용 예> #include <stdio.h> #include <string.h> void main(){         static char *first= "PROGramming ";         static char *second= "language ";         first = strlwr(first);         second = strupr(second);         printf("first = %s, second = %s\n" ,first, second); } 출력 결과 : first = _______________ , second = __________________ programming LANGUAGE

  29. 문자열 관련 함수들 • 문자열의 처리 • 기타 문자열의 처리 함수 • strrev 함수 • 문자열을 역순으로 변환하는 함수 • 형식 : 문자열 변수 = strrev(문자열) // 해당 문자열을 역순으로 반환 • strset 함수 • 문자 상수로 문자열 변수를 모두 채움 • 형식 : strset(문자열 변수, 문자 상수) • 사용 예> • strset(str,'\0'); • 문자열의 모든 값을 NULL 값으로 설정

  30. 문자열 관련 함수들 • 문자열 검색 (strstr) • 특정 문자열에서 해당 문자열을 포함하고 있는 최초의 위치를 반환한다. • 사용형태 • 문자열 포인터 변수 = strstr(str1,str); • str1의 문자열에서 str2의 문자열을 포함하는 최초의 위치를 문자열 포인터 변수에 전달한다. • 사용 예> #include <stdio.h> #include <string.h> void main(){         static char *str= "programming is good";         char *pstr;         pstr = strstr(str,"is");         printf("pstr = %s \n" ,pstr); } 출력 결과 : pstr = _______________ is good

  31. [기초다지기] 문자열 함수 이용하기 • 1. 문자열 비교 , 검색, 결합 등을 이용한 문자열 처리

  32. 다차원 배열의 이해 예습시간 – 3 교시

  33. 다차원 배열의 이해 • 학습 개요 • 다차원 배열의 개념과 의미를 알아본다. • 2차원, 3차원 배열의 구조를 알아본다. • 다차원 문자열의 특징에 대해 알아본다.

  34. 다차원 배열의 이해 • 다차원 배열의 개념 • 2차원 이상의 배열 (첨자가 두개 이상인 배열) • C언어는 7차원 정도의 배열을 지원하지만 보통 3차원 정도를 이용해 프로그래밍한다. • 차원이 복잡할 수록 프로그램의 이해가 어려움 • 첨자의 수에 따라 차원이 결정 • 첨자 2개 : 2차원 배열 • 첨자 3개 : 3차원 배열

  35. 다차원 배열의 이해 • 2차원 배열 • 첨자가 두개인 배열로 개념적으로 행렬의 원리를 가진다. • 기억장소의 저장 순서는 행 우선 순위를 가지고 저장된다. • 배열의 선언/개념적 모델/메모리 저장 관계

  36. 다차원 배열의 이해 • 2차원 배열 선언과 초기화 • 2차원 배열 역시 1차원 배열처럼 초기화 가능 • 초기화 제약 조건 1차원 배열과 동일 • 대입되는 데이터 값이 행렬로 표현 • 선언 및 초기화 예 • static int array[2][3]={{1,2,3},{4,5,6}} • 한 행에 들어가는 열의 개수로 분리 • static int array[2][3]={{1,2},{4,5,6}} • array[0][2]의 값은 들어가지 않는다. • static int array[2][3]={10,20,30,40,50} • (0,0),(0,1),(0,2),(1,0),(1,1)의 순으로 값이 채워짐 • static int array[][3]={{1,2,3},{4,5,6}} • 행의 개수 생략 가능 • 행의 개수 생략 시 초기값에 의해 자동적으로 채워짐 (예 : 2행 3열)

  37. 다차원 배열의 이해 • 3차원 배열의 사용 • 2차원 배열에 면의 개념을 포함시켜 표현된다. • 면,행,열의 개념으로 3개의 첨자로 표현 • 선언, 논리적 표현 그리고 메모리 구조 관계

  38. 다차원 배열의 이해 • 3차원 배열의 초기화 • 3차원 배열의 초기화 역시 2차원 배열의 초기화 과정과 유사 • 초기화 시 생략 가능한 첨자는 면에 대한 첨자이다. • 사용 예> • static int data[][2][3]={1,2,3,4,5,6,7,8,9}; • 0면에 2행 3열의 6개 값이 채워지고 • 1면에 나머지 값이 채워진다. • 결국 이 문장은 data[2][2][3]의 3차원 배열을 가진다.

  39. 다차원 배열의 이해 • 다차원 문자열 • 문자열을 배열로 가진 형태 • 문자열 배열은 문자열 자체가 문자 배열의 형태를 가지므로 2차원 배열 형태를 가진다. • 문자열 배열은 주로 메뉴를 구성하는 많이 이용됨 • 사용 예> • static char txt[3][10]; • 9자 크기의 문자열에 대한 3개의 문자배열 선언 • 문자열 배열의 초기화 • static char txt[3][8] = {"New","Open","Save As"}; • 메모리 구조

  40. 다차원 배열의 이해 • 다차원 배열의 활용 • 다차원 배열의 대표명은 그 배열의 시작 주소의 의미를 가진다. • 열의 첨자를 포함하지 않는 배열 이름은 해당 면이나 행의 시작 주소를 나타낸다. • 사용 예> static char txt[3][8] • 3x8 행렬의 2차원 배열 • 1) 배열의 대표 명으로 사용 • 예> txt : 2차원 배열의 시작 주소의 의미 • 2) 배열의 행 첨자만 가지고 사용 • 예> txt[1] : txt배열의 두 번째 행의 시작 주소 • 3) 배열의 행과 열의 첨자를 모두 포함하여 사용 • 예> txt[1][2] : 배열에 포함된 요소의 이름 • 변수의 의미를 가지고 실제 값을 접근 한다.

  41. [기초다지기] 다차원 배열 이해하기 • 1. 2차원 배열의 선언, 초기화 그리고 접근 방법의 이해 • 분석 • 2차원 배열의 초기화 : 행렬의 요소를 { }를 통해 기술 • 행의 초기값이 주어질 때 행의 요소의 수를 생략 가능 • 행의 수는 값에 의해 결정

  42. [기초다지기] 다차원 배열 이해하기 • 2. 다차원 문자열 활용

  43. [기초다지기] 다차원 배열 이해하기 • 2. 다차원 문자열 활용 • 분석 • 사용자의 선택에 대한 메뉴를 출력 • 문자열 배열은 2차원으로 구성되며 문자열 요소는 " "를 통해 표현 • 각 요소의 열의 크기는 문자열 중 가장 큰 요소 +1 값 • 1이 추가되는 이유 : 문자열이 NULL('\0')문자 포함 • 각 행의 문자열은 %s를 통해 출력 가능 • file[i] 또는 edit[i]와 같이 행 첨자만으로 접근 • 즉 2차원 배열에서 행의 요소만을 포함하는 배열 이름은 각 행의 시작 주소 • 구성요소가 문자열인 경우 그 문자열의 시작 주소

  44. 다차원 배열 활용 실습시간 – 1 교시

  45. 다차원 배열 활용 • 학습개요 • 배열을 이용한 판매실적 보고서 생성 프로그램을 만든다. • 데이터 저장을 위해 2차원 배열을 활용한다.

  46. 다차원 배열 활용 • 판매 실적 보고서 생성 프로그램 • 문제 정의 • XX보험 회사에서 한 해의 판매 실적 보고서를 만들려고 한다. 현재 직원은 5명으로 구성되어 있고 분기별 실적데이터를 가지고 있다. 이 데이터를 이용해 개인별 총합과 분기별 총합 그리고 분기별 평균을 보여주는 보고서를 만든다. 또한 이 분기별 평균을 통해 한해 분기의 판매 현황을 그래프로 보여준다. • 입/출력 조건 • 입력 조건 • 각 사원에 대한 분기별 판매 금액 (단위 : 원) • 출력 조건 • 개인별 총합과 분기 총합/평균을 가진 표 형식의 보고서 • 분기별 평균을 이용한 한해 분기 판매 현황 그래프

  47. 다차원 배열 활용 • 출력 형태 • 판매 실적 보고서 • 분기별 판매 실적 그래프 ============================================================ 판매사원   1/4분기   2/4분기   3/4분기   4/4분기      총합 ============================================================      KIM     34000     56000     23000     78000    191000      LEE     23000     65000     18000     94000    200000    PARK     25000     34000     19000     68000    146000    SONG     18000     52000     23500     73950    167450     CHOI     25000     38000     26000     64000    153000 분기총합    125000    245000    109500   377950    857450 ============================================================ 분기평균  25000.00  49000.00  21900.00  75590.00  171490.00 ============================================================ | | | | | | | * | * | * * | * * ** -------------------------------- 1/4 2/4 3/4 4/4

  48. 다차원 배열 활용 • 관련 함수 및 식 • 1> 개인별 총합 = 개인별로 입력된 4분기의 판매 총합 • 2> 분기별 총합 = 해당분기에 개인별로 판매된 총합 • 3> 한해 총합 = 개인별 총합의 합 • 4> 분기별 평균 = 분기별 총합 / 회사원의 수 •        소수점 2째 자리까지 표시한다. • 5> 년 평균 = 한해 총합 / 회사원 수 • 6> 분기별 평균에 대한 그래프 값 • 년 평균을 100으로 하여 각 분기별 100분율을 계산한다. • 10%당 한개의 별표(*)로 표시한다. • 수식 : 그래프 크기 = ((분기별 평균 X 100) / 년 평균 ) / 10 • 소숫점 이하는 버리고 그래프 개수만큼 분기별로 별표하여 생성

  49. 다차원 배열 활용 • 알고리즘 (또는 플로우차트) • 1. 회사원별 판매 실적 데이터 입력 • 1.1 회사원별 판매 실적을 회사원 수만큼 반복해서 입력 • 1.2 입력된 결과는 2차원 배열의 판매 실적 배열에 저장 • 2. 개인별 총합 계산 • 3. 분기별 총합 및 년 총합 계산 • 4. 분기별 평균 및 년 평균 계산 • 5. 판매 실적 결과 출력 • 5.1 판매 실적에 대한 타이틀 출력 • 5.2 개인별 총합 및 분기별 총합을 포함한 판매 실적데이터 출력 • 5.3 분기별 평균 출력 • 6. 분기별 평균에 대한 그래프 값 계산 • 6.1 전체 평균을 100으로 하는 분기별 평균의 100분율 계산 • 6.2 분기별 평균 10%당 그래프 크기 계산 • 6.3 분기별 크기만큼 그래프 배열에 “*”값 표현 • 7. 분기별 판매 실적 그래프 출력

  50. 다차원 배열 활용 • 프로그램 작성 • 1 단계 • 180 페이지의 프로그램을 분석하고 부족한 부분을 채워 넣은 다음 작성하자. (sale.c로 저장한다.)         ①. i<COUNT         ②. j < 4         ③. data[i][4] += data[i][j];         ④. data[COUNT][i] += data[j][i]         ⑤. data[COUNT+1][i] = data[COUNT][i] / COUNT         ⑥. column_title[i]         ⑦. row_title[i]         ⑧. graph[j][i] = '*'

More Related