180 likes | 350 Views
멘토링 4 주차. 11.07.26. a[ 0 ][0][0]. a[ 1 ][0][0]. a[ 0 ][0][1]. a[ 1 ][0][1]. a[ 1 ][0][2]. a[ 0 ][0][2]. a[1][0]. a[ 0 ][1][0]. a[ 0 ][1][1]. a[1][1]. a[1][2]. a[ 0 ][1][2]. 3 차원 배열. 행과 열로 구성된 2 차원 배열이 여러 개 있는 형태 배열선언 형식 자료형 배열명 [ 면크기 ][ 행크기 ][ 열크기 ] 예
E N D
멘토링4주차 11.07.26
a[0][0][0] a[1][0][0] a[0][0][1] a[1][0][1] a[1][0][2] a[0][0][2] a[1][0] a[0][1][0] a[0][1][1] a[1][1] a[1][2] a[0][1][2] 3차원 배열 • 행과 열로 구성된 2차원 배열이 여러 개 있는 형태 • 배열선언 형식 자료형 배열명[면크기][행크기][열크기] • 예 int b[3][4][2] //4개의 행과 2개의 열로 구성된 3개의 배열 • 3차원 배열의 논리적인 구조 int a[2][2][3]; //2면 2행 3열 1면 0면 2행 3열 짜리 2차원 배열 2개 배열
* 배열 용량 : 2 * 2 * 3 * sizeof(int) == 48바이트 110 120 100 90 80 60 70 40 30 20 10 50 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] …… a[1][1][2] a[0][0] 0면0행 a[0][1] 0면1행 a[1][0] 1면0행 a[1][1] 1면1행 a[0] (0면) a[1] (1면) int a[2][2][3] = { {{10,20,30}, {40,50,60}}, {{70,80,90}, {100,110,120}} }; 0 면 1 면 3차원 배열의 물리적인 구조 배열
/* 3차원 배열 접근 예 (array3Demo.c)*/ main() { int a[2][2][3] = {{{10,20,30}, {40,50,60}}, {{11,22,33}, {44,55,66}}}; int i, j, k; for (i = 0; i < 2; i++){ for (j = 0; j < 2; j++){ for (k = 0; k < 3; k++){ printf("%3d ", a[i][j][k]); } //for k printf("\n"); } //for j printf("------------\n"); } // for i } 10 20 30 40 50 60 ------------ 11 22 33 44 55 66 ------------ 배열
문자열 처리와 저장 • 문자열 • 문자열은 일련의 문자를 앞 뒤로 인용부호 “”로 둘러싸서 표기 • 문자열은 널(null) 문자('\0')가 문자 배열의 마지막에 저장 • 문자열을 저장하는 배열의 크기는 저장되는 문자의 개수 보다 1이 커야 함 • 만일 \0 문자가 없는 경우는 문자열로 취급하지 않음 • 문자 하나 하나를 배열에 저장하여 문자열 표현 가능 • 반드시 프로그래머가 알아서 널 문자('\0')를 문자열의 마지막에저장 배열
java java 문자열 출력 • 배열이름 • 문자열이 저장된 배열 이름을 이용하여 printf()문을 이용 • 변환문자 %s 배열
문자열의 끝은 \0 문자 • \0 문자의 효과 • 문자열을 구성하는 각각의 문자를 출력하는 방법 • 출력의 제한을 널(\0) 문자로 검사하면 편리 배열
name[0] ... name[4] H o n g \0 0 3 3 - 2 4 0 - 1 8 6 1 \0 \0 \0 문자열 선언 • 문자열 선언과 초기값 부여 char str[10]; char name[5]=“Hong”; char tel1[]=“011-240-1861”; char tel2[15]=“033-240-1861”; char str[] = “hello”; char str[] = {‘h’,’e’,’l’,’l’,’o’,’\0’}; char *str = “hello”; 배열
char str[] = “Hello”; str 1000 1001 1002 1003 1004 1005 배열명은 포인터 상수 str == &str[0] str[0] str[1] str[2] str[3] str[4] str[5] H H e e l l char *str = “Hello”; 1000 1001 1002 1003 1004 1005 l l o o 1000 \0 \0 str str은 포인터 변수 문자열의 메모리 구조 배열
문자열 입출력 • 문자열 입력 함수 • scanf(“%s”, str); :단어입력 • gets(str); :문장입력 • 문자열 출력 함수 • printf(“%s\n”, str); • puts(str); //stringDemo1.c #include <stdio.h> int main(void) { char str1[5] = {'h','e','l','l','o'}; char str2[] = {'h','e','l','l','o', '\0'}; char str3[] = "hello"; char *str4 = "hello"; char str5[10]; // str5 = "hello"; //compile error printf("str5 ? "); scanf("%s", str5); // gets(str5); printf("str1=%s\n", str1); printf("str2=%s\n", str2); printf("str3=%s\n", str3); printf("str4=%s\n", str4); printf("str5=%s\n", str5); } str5 ? hello str1=hello儆缺. str2=hello str3=hello str4=hello str5=hello 배열
//scanf, printf를 사용한 문자열 입출력 (stringDemo2.c) #include <stdio.h> int main(void) { char name[30]; //입력할 문자열의 길이를 예상하여 크기 설정 char tel[20]; printf("What's your name?"); scanf("%s", name); //배열이름은 포인터형 상수이므로 scanf에서 ‘&’사용안함 printf("Hello, %s\n", name); printf("What's your phone number?"); scanf("%s", tel); printf(“phone number : %s\n", tel); } What's your name? Hong-gildong Hello, Hong-gildong What's your phone number? 011-101-1010 phone number : 011-101-1010 배열
//gets, puts를 사용한 문자열 입출력 (stringDemo2.c) #include <stdio.h> int main(void) { char name[30]; //입력할 문자열의 길이를 예상하여 선언 char tel[20]; printf("What's your name?\n"); gets(name); //문장입력(공백 포함한 문자열 입력 가능) puts(name); printf("What's your phone number?\n"); gets(tel); put(tel); } What's your name? hong gil dong hong gil dong What's your phone number? 011 222-1010 011 222-1010 배열
// 문자열의 길이를 구하는 프로그램 작성, stringlen.c #include <stdio.h> #define MAX 100 main() { char str[MAX]; int i; printf("문자열 입력 :"); gets(str); i = 0; while(str[i] != ‘\0’) //널 문자를 만날 때까지 문자의 개수를 증가 i++; printf("string length =%d\n", i); } 문자열 입력 :i am happy string length =10 문자열 입력 :한림 string length =4 배열
연습문제(3) • 하나의 문자열을 입력하여 다른 문자열에 복사하는 프로그램 작성 • 하나의 문자열을 입력 받아 역순으로 출력하는 프로그램 작성 • 두 개의 문자열을 입력하여 첫번째 문자열에 두 번째 문자열을 연결하는 프로그램 작성 문자열 입력 :good morning source : good morning reverse : gninrom doog 첫번째 문자열 입력 :hallym 두번째 문자열 입력 :university result : hallymuniversity 배열
문자열 함수 문자열 처리를 위한 라이브러리함수<string.h> • strlen : 문자열 길이 len = strlen(str); //str의 문자길이를 len에 대입, • strcat : 문자열 결합 strcat(str1, str2); // str1 = str1 + str2 • strcpy : 문자열 복사 strcpy(des,src); //des = src • strrev : 문자열의 문자들의 순서를 바꾸는 함수 str2 = strrev(str1); • strcmp : 문자열 비교 r = strcmp(str1,str2) ; //str1 == str2 => r = 0 //str1 > str2 => r > 0 (양수) //str1 < str2 => r < 0 (음수) • 문자열 변환 str2 = strupr(str); //대문자로 변환 str2 = strlwr(str); //소문자로 변환 f = atof(str); //문자열을 실수로 변환 <stdlib.h> i = atoi(str); //문자열을 정수로 변환 <stdlib.h> 배열
문자열 함수 예 //strringfun1.c #include <stdio.h> #include <string.h> main(){ char str1[30]="hallym "; char str2[11]="University"; char str3[30]; printf ("str1 = %s\n", str1); printf ("str1 length = %d, str1 size = %d\n", strlen(str1), sizeof(str1)); printf ("str2 = %s\n", str2); printf ("str2 length = %d\n", strlen(str2)); printf ("strcat(str1,str2) = %s\n", strcat(str1,str2)); printf ("str1 = %s\n", str1); printf ("strcpy(str3,str1) = %s\n", strcpy(str3,str1)); printf ("str3 = %s\n", str3); printf ("strrev(str3) = %s\n", strrev(str3)); } str1 = hallym str1 length = 7, str1 size = 30 str2 = University str2 length = 10 strcat(str1,str2) = hallym University str1 = hallym University strcpy(str3,str1) = hallym University str3 = hallym University strrev(str3) = ytisrevinU myllah 배열
// ID와 Password를 입력하여 출력하는 프로그램 작성, stringfun2.c #include <stdio.h> #include <string.h> void main() { char id[9]; char pwd[9]; int quit = 0; while(1){ quit = 0; do{ printf("ID입력(8자까지 입력가능, quit-종료):"); gets(id); if (strcmp(id, "quit") == 0) return ; }while (strlen(id) > 8); do { printf("PASSWORD 입력(8자까지 입력가능, quit-종료):"); gets(pwd); if (strcmp(pwd, "quit") == 0) return ; }while (strlen(pwd) > 8); printf("ID:%s, PASSWORD:%s\n", id, pwd); }//while } //main ID입력(8자까지 입력가능, quit-종료):kim PASSWORD 입력(8자까지 입력가능, quit-종료):kim12345 ID:kim, PASSWORD:kim12345 ID입력(8자까지 입력가능, quit-종료):lee PASSWORD 입력(8자까지 입력가능, quit-종료):lee12345678 PASSWORD 입력(8자까지 입력가능, quit-종료):lee1111 ID:lee, PASSWORD:lee1111 ID입력(8자까지 입력가능, quit-종료):quit 배열
//"quit"를 입력할 때까지 점수를 반복 입력하여 총점, 평균 계산, stringfun3.c #include <stdlib.h> void main() { char score[5]; float sum=0.0; float avg; int count = 1; while(1){ printf("%d번 점수입력(quit-종료):", count); gets(score); if (strcmp(strlwr(score), "quit") == 0) break; //소문자로 비교 count++; sum += atof(score); //문자열을 실수로 변환 } avg = sum / count; printf("인원 : %d \n", count); printf("총점 : %.2f \n", sum); printf("평균 : %.2f \n", avg); } 1번 점수입력(quit-종료):100 2번 점수입력(quit-종료):80 3번 점수입력(quit-종료):90 4번 점수입력(quit-종료):99 5번 점수입력(quit-종료):85 6번 점수입력(quit-종료):100 7번 점수입력(quit-종료):quit 인원 : 6 총점 : 554.00 평균 : 92.33 배열