Microsoft PowerPoint - Chapter_07.pptx

Similar documents
Chapter_06

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

설계란 무엇인가?

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint 프레젠테이션

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

untitled

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - Chapter_08.pptx

슬라이드 1

untitled

02장.배열과 클래스

歯7장.PDF

chap7.PDF


11장 포인터

금오공대 컴퓨터공학전공 강의자료

13 주차문자열의표현과입출력

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - 10장 문자열 pptx

금오공대 컴퓨터공학전공 강의자료

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - 7장 배열 pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

11장 포인터

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - Chapter_09.pptx

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

03장.스택.key

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

C 언어 프로그래밊 과제 풀이

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - chap06-4 [호환 모드]

Microsoft PowerPoint - chap04-연산자.pptx

歯9장.PDF

Microsoft PowerPoint - chap-12.pptx

YRRZBRRLMCEQ.hwp

OCW_C언어 기초

중간고사

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

C 프로그래밊 개요

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

본 강의에 들어가기 전


Microsoft PowerPoint - Chapter_05.pptx

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것입니다. 2

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

문서의 제목 나눔명조R, 40pt

Infinity(∞) Strategy

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-11.pptx

chap 5: Trees

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

C 프로그래밊 개요

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap12-고급기능.pptx

기초컴퓨터프로그래밍

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션


11장 포인터

2002년 2학기 자료구조

Chapter 4. LISTS

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

Microsoft PowerPoint - chap03-변수와데이터형.pptx

chap8.PDF

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

PowerPoint 프레젠테이션

Microsoft PowerPoint - [CPI16] Lecture 10 - 문자열.pptx

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings

컴파일러

Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max

Microsoft PowerPoint - 제3장-배열.pptx


ch15

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

C++ Programming

Microsoft PowerPoint - chap06-8 [호환 모드]

PowerPoint 프레젠테이션

11장 포인터

윤성우의 열혈 TCP/IP 소켓 프로그래밍

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Transcription:

프로그래밍 1 1 Chapter 7. Arrays May, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj

이장의강의목표 2 배열의정의를이해한다. 배열의선언방법을이해한다. 각배열원소를접근하는방법을이해한다. 문자열의특징을이해한다. 문자열관련라이브러리의사용방법을이해한다. 다차원배열을이해한다. 배열의초기화방법을이해한다. 문자열의배열을이해한다. 이장의결론

1 차원배열의선언 (1/10) 3 배열이란 : 같은유형을갖는변수들의집합 형식 type variable_name[size]; // array example int main() int i; int a[5]; // array define for (i=0; i<5; i++) a[i] = i*2; for (i=0; i<5; i++) printf("%d\n", a[i]); a 를배열의이름 (name) 이라고함 a[0], a[1], a[2], a[3], a[4] 를각각배열의원소 (element) 라고함 return 0; 배열에서색인 (index) 는 0 부터 size-1 까지사용가능

1 차원배열의선언 (2/10) 4 C 의기본유형변수선언및접근 0xfffffffc 번지 A memory 10 1.23 12.3 변수를선언하면메모리에변수공간이할당된다. int num; float f; double d; char ch; c번지 8번지 4번지 0번지 32bits 변수를초기화하면해당메모리값저장 num = 10; f = 1.23; d = f * num; ch = A ; printf( %c, %d\n, ch, num);

1 차원배열의선언 (3/10) 5 배열선언및각원소접근 0xfffffffc 번지 memory 8 a[4] 배열을선언하면 int a[5]; 6 4 2 0 a[3] a[2] a[1] a[0] 메모리입장에서 int a[5]; 는 int v,w,x,y,z; 를선언하고 a[0], a[1], a[2], a[3], a[4] 대신 v, w, x, y, z로접근하는것과동일. a는배열의시작위치, 즉시작하는메모리주소를가리킴 (a == &a[0], 주의 : a는포인터상수임!!) c번지 8번지 4번지 배열의각원소접근 for (i=0; i<5; i++) a[i] = i*2; printf("%d", a[3]); 0 번지 문자형배열을선언하면 32bits char b[6];

1 차원배열의선언 (4/10) 6 배열의장점 #include <stdlib.h> #include <time.h> 배열을이용한지난과제재구현 // 배열사용하지않음 int main() int num0, num1, num2, num3, num4, num5; #include <stdlib.h> #include <time.h> int main() int num[6], i, j; // 배열사용 srand(time(null)); srand(time(null)); while (1) num0 = rand()%45 + 1; num1 = rand()%45 + 1; num2 = rand()%45 + 1; num3 = rand()%45 + 1; num4 = rand()%45 + 1; num5 = rand()%45 + 1; 서로다른숫자 60 개라면? if ((num0!=num1) && (num0!=num2) && (num0!=num3) && (num0!=num4) && (num1!=num2) && (num1!=num3) && (num1!=num4) && (num2!=num3) && (num2!=num4) && (num3!=num4)) break; printf("%d,%d,%d,%d,%d,%d\n", num0,num1,num2,num3,num4, num5); for (i=0; i<6; i++) num[i] = rand()%45 + 1; for (j=0; j<i; j++) if (num[j] == num[i]) i ; break; for (i=0; i<6; i++) printf("%d ", num[i]); 문제풀이방법 (algorithm) 이결정되면, 그것을가장효과적으로구현할수있는자료구조선택능력이중요!! data structure 에는변수 ( 나열형 ), 배열, 리스트, 스택, 큐, 트리, hash, graph 등

1 차원배열의선언 (5/10) 7 배열사용시주의할점 배열의시작인덱스는 0. Boundary check: 배열의경계검사는프로그래머가담당. C 에서배열전체치환은지원안됨 // 배열주의사항 int main() int j=3; int num[3], i, sum = 0; int num2[3]; num[0] = 1; num[1] = 1; num[2] = 1; for (i=0; i<=3; i++) sum += num[i]; printf("%d\n", sum); num2 = num; // error. Then, how?

1 차원배열의선언 (6/10) 8 배열예제 : 한달동안매일정오의기온을입력받아평균기온과가장추운날과더운날구하기 Divide And Conquer 접근방법사용 int main() int i, temp[31], min, max, avg, days; printf("how many days in the month? :"); scanf("%d", &days); // days 값이양수가아니면예외처리 for (i=0; i<days; i++) printf("enter temperature for day %d: ", i+1); scanf("%d", &temp[i]); avg = 0; for (i=0; i<days; i++) avg += temp[i]; printf("average temperature : %d\n", avg/days);? printf("minimum Temperature : %d\n", min); printf("maximum Temperature : %d\n", max);

1 차원배열의선언 (7/10) 9 배열예제 #include <unistd.h> #include <termios.h> int main(void) int i; char mess[80]; struct termios old_tio, new_tio; tcgetattr(stdin_fileno,&old_tio); new_tio=old_tio; new_tio.c_lflag &=(~ICANON ); tcsetattr(stdin_fileno,tcsanow,&new_tio); printf("enter Message (less than 80 characters) \n"); for (i=0; i<80; i++) mess[i] = getchar(); if (mess[i] == '\n') break; printf("\n"); for (i=0; mess[i]!= '\n'; i++) printf("%c", mess[i]); printf("\n"); tcsetattr(stdin_fileno,tcsanow,&old_tio); return 0;

1 차원배열의선언 (8/10) 10 배열예제 // 숫자정렬 #include <stdlib.h> #include <time.h> int main() int org[5], cook[5], tmp; int i, j; srand(time(null)); for (i=0; i<5; i++) cook[i] = org[i] = rand() % 45 + 1; for (i = 1; i < 5; i++) for (j = 0; j < 5 i; j++) if (cook[j] > cook[j + 1]) // swap code tmp = cook[j]; cook[j] = cook[j + 1]; cook[j + 1] = tmp; for (i=0; i<5; i++) printf("%d\t%d\n", org[i], cook[i]);

1 차원배열의선언 (9/10) 11 bubble sorting 상세설명 Cook[5] = 5, 1, 12, -5, 16 5 1 12-1 16 5>1, swap 1 5-5 12 16 1<5, ok 1 5 12-1 16 5<12, ok 1 5-5 12 16 5>-5, swap 1 5 12-5 16 12>-5, swap 1-5 5 12 16 5<12, ok 1 5-5 12 16 12<16, ok <Step 1> <Step 2> 1-5 5 12 16-5 1 5 12 16 1>-5, swap 1<5, ok -5 1 5 12 16-5>1, ok <Step 3> <Step 4>

1 차원배열의선언 (10/10) 12 정렬 (sorting) 은실제프로그램에서많이사용됨 성적처리주소록정렬이진탐색을위한데이터관리최단거리 (shortest path) 발견 등등.. 정렬의방법 bubble sorting insertion sorting selection sorting quick sorting merge sorting Data Structure 수업에서직접작성해보시길

문자열 (string) 문자열의사용 (1/4) Null Character( \0 ) 로종료되는문자유형 (char type) 의 1 차원배열 로묶인문자들의집합 ( 컴파일러가자동으로 \0 추가 ) 문자열을저장할배열의크기는문자열의크기 + 1 (9page 예제의일부수정 ) 13 printf("enter Message (less than 80 characters) \n"); for (i=0; i<80; i++) mess[i] = getchar(); nice\n가입력되면.. if (mess[i] == '\n') break; n i c e \n mess[i] = '\0'; printf("\n"); for (i=0; mess[i]!= '\0'; i++) printf("%c", mess[i]); printf("\in"); puts(mess); printf("%s\n", mess); (9page 예제의일부수정 ) 1 차원문자배열이문자열로바뀜 \0 가없다면?

문자열의사용 (2/4) 14 문자열관련라이브러리 입출력 gets(str), puts(str): 입출력처리 ( \r 과 \0 간에변환 ) 문자열관리 strlen(), strcpy(), strcmp(), strcat() strcpy(to_str, from_str) : 문자열복사를사용하기위해포함 strcat(to_str, from_str) : 문자열연결 strcmp(str1, str2) : 문자열비교 ( 사전식순서 ) strlen(str) : 문자열길이복귀 ( \0 제외 ) Thank you \r 를입력하면? #include <string.h> // 문자열입출력예제 // strcpy() 를사용할때필요 main() char str1[80], str2[80]; printf("enter a string (less than 80 chars) : \n"); gets(str1); for (i=0; str2[i]; i++) strcpy(str2, str1); printf("%c", str2[i]); puts(str2); or printf( %s, str2);

문자열예제 문자열의사용 (3/4) 15 #include <string.h> main() char str1[80], str2[80]; int i; Thanks God \r 가입력되고 Its Friday \r 가입력 printf("enter the first string: "); gets(str1); printf("enter the second string: "); gets(str2); printf("%s is %d chars long\n", str1, strlen(str1)); printf("%s is %d chars long\n", str2, strlen(str2)); i = strcmp(str1, str2); if (!i) printf("the string are equal\n"); else if (i < 0) printf("%s is less than %s\n", str1, str2); else printf("%s is greater than %s\n", str1, str2); if (strlen(str1) + strlen(str2) < 80) strcat(str1, str2); printf("%s\n", str1);

문자열의사용 (4/4) 16 문자열예제 ( 개발자가흔히하는실수 ) #include <string.h> // 배열예제.. be cautious main() char limit = 'h'; char str[8]; int i, count = 0; gets(str); for (i=0; i<(int)strlen(str); i++) if (str[i] < limit) count++; harry 가입력되면? harrypotter 가입력되면? printf("[%d] characters are smaller than %c\n", count, limit);

다차원배열 (1/3) 17 이차원배열 형식 type variable_name[size][size]; 0xfffffffc 번지 memory int a[2][3]; a[1][2] a[1][1] a[1][0] a[0][2] a[0][1] a[0][0] a == &a[0][0], a[1] == &a[1][0]. c번지 8번지 4번지 0번지 삼차원배열 type variable_name[size][size][size]; 32bits

다차원배열 (2/3) 18 이차원배열의예 main() int i, j; int twod[4][5]; // 4X5 행렬 for (i=0; i<4; i++) for (j=0; j<5; j++) twod[i][j] = i*j; for (i=0; i<4; i++) for (j=0; j<5; j++) printf("%d ", twod[i][j]); printf("\n");

다차원배열 (3/3) 19 함께해봅시다 : 2 과목을수강하는 6 명의학생의시험점수를관리하기위한프로그램의템플릿 #define MAX_STUDENTS 6 #define NR_OF_SUBJECT 2 int score[max_students][nr_of_subject]; int main(void) int i, j; for (i=0; i<6; i++) for(j=0; j<2; j++) printf("[%d] 번째학생의 [%d] 번째과목성적은?", i+1, j+1); scanf("%d", &score[i][j]); printf("============listing===========\n"); for (i=0; i<6; i++) printf("[%d] 번째학생 :", i+1); for (j=0; j<2; j++) printf("\t [%d] 번째과목성적 : [%d]", j, score[i][j]); printf("\n"); return 0;

배열의초기화 (1/3) 20 형식 type variable_name[size]=value, value,, value; int main(void) int arr1[5]=1, 2, 3, 4, 5; int arr2[]=1, 2, 3, 4, 5, 6, 7; int arr3[5]=1, 2; int ar1len, ar2len, ar3len, i; ar1len = sizeof(arr1) / sizeof(int); // 배열 arr1 의길이계산 ar2len = sizeof(arr2) / sizeof(int); // 배열 arr2 의길이계산 ar3len = sizeof(arr3) / sizeof(int); // 배열 arr3 의길이계산 for(i=0; i<ar1len; i++) printf("%d ", arr1[i]); printf("\n"); for(i=0; i<ar2len; i++) printf("%d ", arr2[i]); printf("\n"); for(i=0; i<ar3len; i++) printf("%d ", arr3[i]); printf("\n"); return 0;

이차원배열의초기화 배열의초기화 (2/3) 21 // 2 차원배열초기화예제 int main() int i, j; int a[2][3] = 1, 2, 3, 4, 5, 6; char ch; int a[2][3] = 1, 2, 3, 4, 5, 6; or int a[2][3] = 1, 2, 4, 5; for (i=0; i<2; i++) for (j=0; j<3; j++) printf("%d ", a[i][j]); printf("\n"); printf("%d\n", sizeof(ch)); printf("%d\n", sizeof(i)); printf("%d\n", sizeof(a[0][0])); printf("%d\n", sizeof(a));

배열의초기화 (3/3) 22 배열의초기화시크기없는배열 (unsized array) 사용가능 #include <string.h> int main() char prompt[] = "Enter command"; int a[] = 1,4,9,16,25; int b[][3] = 1,4,9,16,25,36; printf("%s\n", prompt); printf("%d\n", a[4]); printf("%d %d %d\n", b[0][0], b[0][2], b[1][0]); b[2][] 또는 b[][] 는사용불가 C 에서는맨왼쪽차원만크기미지정가능 printf("%d, %d, %d\n", sizeof(prompt[0]), sizeof(prompt), strlen(prompt)); printf("%d, %d\n", sizeof(a), sizeof(a[0])); printf("%d, %d, %d\n", sizeof(b), sizeof(b[0][0]), sizeof(b[0]));

문자열배열 (1/2) 23 문자유형의이차원배열 ( 문자열의 1차원배열 ) 예제 : 학번을입력받아대응되는학생이름을출력 int main() char names[10][20]; int i, query; for (i=0; i<10; i++) printf("%d 번이름을입력하세요 : ", i+1); gets(names[i]); do printf(" 학생의번호입력 : "); scanf("%d", &query); query ; if ((query < 0) (query > 9)) printf(" 학생이없습니다 \n"); break; printf("%d번의이름은 %s\n", query+1, names[query]); while (1);

문자열배열 (2/2) 24 예제 : 전자사전 #include <string.h> char words[][2][40] = "grain", " 곡물 ", "grand", " 중요한, 화려한 ", "grant", " 허락하다 ", "grape", " 포도 ", "grasp", " 잡다, 쥐다 " "", "" ; int main() char query[12]; int i; printf("enter English word: "); gets(query); for (i=0; strcmp(words[i][0], ""); i++) if (!strcmp(words[i][0], query)) printf("==> %s\n", words[i][1]); break; if (!strcmp(words[i][0], "")) printf("not in dictionary\n");

이장의결론 25 배열을선언방법을이해각배열원소를접근하는방법을이해문자열의특징을이해 gets, puts, strcpy, strcmp, strlen, strcat 사용방법을이해다차원배열을이해배열의초기화방법을이해문자열을배열원소로사용하는방법을이해

과제 26 주소록작성 이름과 Cellular Phone 전화번호로구성된주소록작성 5명의이름과전화번호는미리초기화최대 20의이름과번호추가기능이름과전화번호 list 기능이름으로검색기능이름으로정렬기능 help 기능 Bonus: 이름삭제기능, 전화번호로정렬, 전화번호로검색

과제 : template 27 #include <string.h> // 자료구조초기화 #define MAX_ENTRY 25 #define MAX_CHARS 20 char address[max_entry][2][max_chars] = " 유비 ", "011-111-1111", " 관우 ", "017-111-1111", " 장비 ", "016-111-1111", " 조자룡 ", "011-777-7777", " 제갈량 ", "019-111-1111", ; int current_index = 5; // 내부함수 int addr_add(); // 정상적인경우 0 복귀, 문제발생의경우 -1 복귀 int addr_help(); int addr_sort(); int addr_list(); int addr_search();

과제 : template 28 // 메인함수 main() char cmd[20]; printf("my address program\n"); while (1) printf("enter any command (help to show commands) : "); gets(cmd); if (!strcmp(cmd, "quit")) printf("have a nice day..\n"); break; else if (!strcmp(cmd, "help")) addr_help(); else if (!strcmp(cmd, "sort")) addr_sort(); else if (!strcmp(cmd, "list")) addr_list(); else if (!strcmp(cmd, "add")) addr_add(); else if (!strcmp(cmd, "search")) addr_search(); else printf(" 잘못된명령어입니다 \n"); addr_help();