본문 바로가기

C80

[62] File IO File Input and Output 0. 파일위치 (프로젝트 위치) FILE* file; 1. 파일쓰기 (write text 모드) ㄴ fopen_s(&file, "파일명", "wt") ㄴ fputs("저장할문자열", file) ㄴ fclose(file) 2. 파일읽기 (read text 모드) ㄴ fopen_s(&file, "파일명", "rt") ㄴ fgets(저장할변수, 읽기사이즈, 파일위치) ㄴ fclose(file) * fgets() 함수는 텍스트를 한 줄씩 읽어옴 ("\n"포함) # define _CRT_SECURE_NO_WARNING # include # include # include # include void main() { // File IO FILE* file;// 저장 메모리 위치.. 2020. 7. 27.
[59] 구조체와 배열 # include # include # include // 구조체와 배열 struct Student { int code; char* name; char subs[3][100] = { {"java"}, {"jsp"}, {"c"} }; int* score; void print() { printf("학번 : %d\n", code); printf("이름 : %s\n", name); for (int i = 0; i < sizeof(subs)/100; i++) { printf("%d) %s : %d점\n", i + 1, subs[i], score[i]); } } }; void main() { Student st = { 0 }; char name[100] = { 0 }; printf("이름입력 : "); scanf_.. 2020. 7. 27.
[58] 구조체 Struct ㄴ 사용자정의 자료형 정의 ㄴ 키워드 구조체명 { 변수 }; ㄴ 키워드 : struct 사용 ㄴ struct 자료형 변수명 = { 0 }; ㄴ 구조체를 담을 변수를 초기화한 후 사용 ㄴ .닷 을 통해 구조체 요소에 접근 . 예제 #include #include #include // 정의 struct Member { int code; char *name; }; // ;세미콜론으로 종료 void print_member(const struct Member &mb) { printf("code : %d\n", mb.code); printf("name : %s\n", mb.name); } // struct Member // { // int code; // char *name; // void print_.. 2020. 7. 27.
[57] 연습문제 : 더블 포인터 // # 학생성적관리 // ex) // 학번 국어 수학 // 0000 0 0 // 0000 0 0 // 0000 0 0 // ... int run = 1; while(run){ printf("------- STUDENT MANAGER-------\n"); printf("code\t국어\t수학\n"); printf("------------------------------\n"); printf("1) 추가\n2) 수정\n3) 삭제\n4) 종료\n"); printf("------------------------------\n"); printf("메뉴선택: "); int sel; scanf("%d", &sel); if(sel == 1){} else if(sel == 2){} else if(sel == 3){} .. 2020. 7. 27.
[56] 더블 포인터 더블 포인터 1) 포인터 : 주소를 담음 (값의 방향 → 일반변수) 2) 더블포인터 : 포인터의 주소를 담음 (값의 방향 → 또다른 포인터) . 2차원 가변배열의 사용을 위함 . 배열의 배열에 접근 ㄴ 더블 포인터를 활용한 동적할당 // int a = 100; // int *p = &a; // int **pp = &p; int **pp = new int*[1]; //*pp = new int[2]; pp[0] = new int[2]; //**pp = 10; pp[0][0] = 10; pp[0][1] = 20; printf("pp[0][0]: %d\n", **pp); printf("pp[0][1]: %d\n", pp[0][1]); // ex) // 학번 C Java Python // 0000 0 0 0 //.. 2020. 7. 27.
[55]-A. 가변 배열 컨트롤러 Ver1. int *p = 0; int cnt = 0; while(1){ printf("-- CONTROLLER --\n"); printf("(cnt : %d)\n", cnt); for(int i=0; i 2020. 7. 27.
[55] 가변 배열 컨트롤러 실습예제 : 동적할당 → 가변 배열 컨트롤러 int *p = 0; int cnt = 0; while(1){ printf("-- CONTROLLER --\n"); printf("(cnt : %d)\n", cnt); for(int i=0; i 2020. 7. 27.
[54] 동적할당 기본 동적할당 1) 포인터 변수 선언 (stack) 2) new를 통한 heap 메모리에 임시 배열생성 ㄴ new 자료형[배열크기] 3) 선언한 변수에 배열대입 [인덱스 0~] 4) delete[] 포인터명 : heap 메모리 삭제 1. 동적메모리는 반드시 포인터 변수에 저장해야 한다. 2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다. // 1. 동적메모리는 반드시 포인터 변수에 저장해야 한다. int *a = new int; // heap 메모리에 한개 생성 int *b = new int[3];// heap 메모리에 3개 생성 // 2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다. delete a; delete[] b; // Stack & Heap int num = 10; i.. 2020. 7. 27.
[52] 문자열 함수 문자열 함수 #include ㄴ 헤더파일 추가 (문자열 함수 제공) 1) strlen() : 문자열의 사이즈 반환 ㄴ strlen( 배열명 ) char fruit[100] = "apple"; printf("%c\n", fruit[1]); char name[100] = { 0 }; printf("이름입력 : "); scanf_s("%s", name, 100); printf("name : %s\n", name); // 1. // strlen() 함수 : 문자열의 사이즈 반환 int size = strlen(name); printf("%d\n", size); 2) strcpy_s() : 문자열 복사 (문자열은 = 대입으로 초기화 불가) ㄴ strcpys( 복사할주소, 크기, 복사대상 ) // 2. // str.. 2020. 7. 27.
[51] 문자열 기본 문자열 . 문자열 : 여러개 문자의 배열 . apple 2020. 7. 27.
[00]-A. 캐릭터 이동 # include # include # include void main(){ // # 숫자이동 // int game[7] = {0, 0, 0, 3, 0, 0, 0}; srand(time(0)); // int Monster = 3; // 1. 왼쪽으로 이동 // 2. 오른쪽으로 이동 // . 예외처리 : 유효하지 않은 경우 경고메세지 출력, 무브하지 않음 // . 캐릭터는 기호로 출력 : // 조건문을 사용해서, // 1) 0일때는 로드표기 / // 2) 몬스터값과 일치하면 캐릭터용 기호 표시 // 0 0 0 3 0 0 0 // _ _ _ ★ _ _ _ int game[7] = {0}; int Monster = 3; int idx = rand() % 7; while(1){ game[idx] = Monste.. 2020. 7. 24.
[00] 캐릭터 이동 실습예제 : 1차원 배열 -> 캐릭터 이동 . 시작 시, 캐릭터를 랜덤으로 위치시킨다. . 이동할 방향을 입력받아 움직인다. (예외처리) 1) 왼쪽 2) 오른쪽 . 캐릭터는 기호로 출력 1) 0 0 0 3 0 0 0 2) _ _ _ ★ _ _ _ . 무한루프 _ _ _ ★ _ _ _ _ _ _ _ ★ _ _ _ _ _ _ _ ★ _ _ _ _ _ _ _★ _ _ _ _ _ ★ _ ... int game[7] = {0}; int Monster = 3; 2020. 7. 24.
[50]-A. 기억력 게임 void print_open(int *f, int size){ printf("------------------ REMEBER ME ------------------\n"); printf("index:\t"); for(int i=0; i 2020. 7. 23.
[50] 기억력 게임 실습예제 : 함수 & 포인터 & 배열 → 기억력 게임 . 처음 1회만 셔플이 된 10장의 카드를 오픈해서 보여준다 . 게임이 시작되면, 블라인드 처리된 카드의 짝을 맞춘다 . 플레이어는 2개의 카드 인덱스를 입력 . 카드의 값(그림)이 일치하면 -> 카드 오픈 . 카드 10장이 모두 열리면 게임종료 ※ 입력을 제외한 모든 '기능'은 함수로 구현 void main(){ int game_num = 10; int front[10] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5}; int back[10] = {0}; // Hint print_front(&front[0], 10); } 2020. 7. 23.
[49]-A. 마리오 무브 풀이 1) int move_right(int size, int *x){ int xx = x[0]; if(*x != size-1){ xx += 1; } return xx; } int move_left(int size, int *x){ int xx = x[0]; if(*x != 0){ xx -= 1; } return xx; } int move_up(int size, int *y){ int yy = *y; if(*y != 0){ yy -= 1; } return yy; } int move_down(int size, int *y){ int yy = *y; if(*y != size-1){ yy += 1; } return yy; } void main(){ // 실습예제 : 함수, 2차원 배열 (더블포인터 학습준비) .. 2020. 7. 23.
[49] 마리오 무브 실습예제 : 함수 & 배열 → 숫자이동 게임 (2차원 배열) . 맵 그리기 (10 X 10) . 이동할 방향을 입력받아, ㄴ 1) 동 2) 서 3) 남 4) 북 . 캐릭터를 이동시킨다. ㄴ 함수실행 2020. 7. 23.
[48] 배열과 함수 . 배열 출력 함수 만들기 // 배열과 함수 // 배열을 출력하는 함수를 만들어보자 void print_arr(int *p, int count){ for(int i=0; i 2020. 7. 23.
[47] 연습문제 : 함수 연습문제 1) // 연습문제) // 값 교체 함수 만들기 (포인터) // 함수명 : swap() int a = 10; int b = 20; swap(&a, &b); 더보기 // 연습문제 : 함수 // -> 갑 교체 함수 만들기 (포인터) void swap(int *num1, int *num2){ int temp = *num1; *num1 = *num2; *num2 = temp; } int main(){ int a = 10; int b = 20; swap(&a, &b); printf("a: %d, b: %d\n", a, b); return 0; } 연습문제 2) // 실습예제 : 함수 & 포인터 // -> 나만의 계산기 만들기 // 각 함수 실행 후,결과 출력 // printf("times:\t %.1f\.. 2020. 7. 23.
[46] 함수의 종류 함수의 종류 1) void 함수명(){} 2) void 함수명(parameter){} 3) int 함수명(){ return integer; } 4) int 함수명(parameter){ return integer; } // 함수의 종류 // 1) void / parameter X void func1(){ printf("hello!\n"); } // 2) void / parameter O void func2(char name){ printf("hello, %c!\n", name); } // 3) 반환할 자료형 / parameter X int func3(){ int num = 10; return num; } // 4) 반환할 자료형 / parameter O int func4(int a, int b){ int .. 2020. 7. 23.
[45] 함수 기본 함수 1) 선언 ㄴ 자료형 함수명(); 2) 정의 ㄴ 자료형 함수명(){ 실행영역 } 3) 사용 ㄴ 함수명(); 3) 매개변수(parameter)와 전달인자(argument) void say_hello(char name);// 함수원형 선언 void main(){ char a = 'A'; say_hello(a); // argument 입력 및 함수실행 } void say_hello(char name){ // parameter를 받음 // printf("누구야 안녕, 반가워!"); printf("%c야 안녕, 반가워!", name); } 2020. 7. 23.
[44] 연습문제 : 포인터 연습문제 1 // 문제 1) // 포인터를 활용한 a와 b 값 교체 int a = 10; int b = 20; 더보기 int a = 10; int b = 20; int *ap = &a; int *bp = &b; int temp = ap[0]; // *ap; *ap = *bp; *bp = temp; printf("a : %d / b : %d\n", *ap, *bp); 연습문제 2 // 문제 2) // 포인터를 활용한 배열 arr1[]과 arr2[] 의 값 교체 // 값을 찾아 교체 : 40 80 int arr1[3] = {30, 40, 50}; int arr2[3] = {60, 70, 80}; 더보기 int arr1[3] = {30, 40, 50}; int arr2[3] = {60, 70, 80}; int.. 2020. 7. 23.
[43] 배열과 포인터 배열의 포인터 변수 선언 . &변수명[index] ㄴ 배열의 기준이 될 주소 한 개를 대입 // 예제 1) int arr[3] = {10, 20, 30}; int *p = &arr[0]; p[1] = 200; printf("arr[1] : %d\n", arr[1]); // 예제 2) int scores[5] = {98, 100, 50, 76, 80}; int *sp = &scores[2]; sp[0] = 10; printf("sp[0~] : %d %d %d\n", sp[0], sp[1], sp[2]); printf("sp[-1] : %d\n", sp[-1]); // 예제 3) int *sp2 = &scores[0]; int *sp3 = sp2; sp3[4] = 0; printf("%d %d %d %d %.. 2020. 7. 23.
[42] 포인터 기본 포인터 Pinter ㄴ 주소를 저장하는 변수 (4byte) ㄴ 포인터는 변수의 주소를 저장한다. 1) 선언 자료형 *변수명; 2) 사용 포인터명 = &일반변수명; ㄴ 주소 : 변수명 앞에 &앤퍼센드를 붙임 ㄴ 주소만 저장할 수 있음 // 포인터 int a = 10; // 일반변수의 선언과 초기화(값 대입) int *p = &a; // 포인터변수의 선언과 초기화(일반변수 주소 대입) // char c = 0; // 1 byte int n = 0; // 4 byte double d = 0; // 8 byte char *cp = &c; // 4 byte(on 32 bits) int *np = &n; // 4 byte double *dp = &d; // 4 byte printf("c의 사이즈는 %d 이다.\n".. 2020. 7. 23.
[41] 셔플 셔플 ㄴ 배열 안에 있는 값을 랜덤으로 배치 . 인덱스 0의 값과 인덱스 랜덤의 값을 교환 . 100번 반복 int scores[5] = {100, 90, 80, 70, 60}; srand((unsigned int)time(NULL)); // while int n = 0; while(n < 100){ int r = rand() % 4 +1; // index 1~4 (0제외) int temp = scores[0]; scores[0] = scores[r]; scores[r] = temp; n += 1; } // for for(int i=0; i 2020. 7. 23.
[40] 정렬 정렬 : 배열응용 . 기준 인덱스(0~)의 변수부터 나머지와 값 비교 . 최대값을 찾아서 값 교환 . 기준 인덱스 증가 . 반복하며 내림차순 정렬 진행 . 흐름 {5, 6, 8, 1, 3} // max = 8 {8, 6, 5, 1, 3} // max = 6 {8, 6, 5, 1, 3} // max = 5 {8, 6, 5, 3, 1} // max = 3 {8, 6, 5, 3, 1} // max = 1 srand(time(0)); int score[5] = {0}; for(int i=0; i 2020. 7. 23.
[39]-A. 회원가입 // 실습예제 : 2차원 배열 // → 회원가입 // . 회원가입 가능 인원은 5명 (제한) // . 정수형의 아이디와 패스워드를 저장 // . 중복되는 아이디는 메세지 출력 (중복되는 아이디 입니다) // . 회원가입 가능인원 초과 시, 메세지 출력 (회원가입 마감) // . Develope // . 로그인, 로그아웃 기능 구현 int members[5][2] = {0}; // GV -> 값 초기화 int cnt = 0; while(1){ printf("---- J O I N ----\n"); // print data for admin printf("cnt : %d\n", cnt); printf("id\tpw\n"); for(int i=0; i 2020. 7. 23.
[39] 회원가입 실습예제 : 2차원 배열 → 회원가입 . 회원가입 가능 인원은 5명 (제한) . 정수 4자리의 아이디와 패스워드를 저장 . 중복되는 아이디는 메세지 출력 (중복되는 아이디 입니다) . 회원가입 가능인원 초과 시, 메세지 출력 (회원가입 마감) . Develope . 로그인, 로그아웃 기능 구현 2020. 7. 23.
[37] 연습문제 : 2차원 배열 연습문제1 int d_arr[3][4] = {{1,2,3,4},{12,33,14,15},{23,24,25,26}}; int s_arr[12] = {0}; // 위 2차원의 값을 1차원 arr에 저장 후 출력 더보기 int k = 0; for(int i=0; i 303 ==> 3200 // 3. 주소 2개를 입력하면 관리비 교환 // 4. 관리비 가장많이 나온집 출력 더보기 int apt[3][4] = { {101, 102, 103, 104}, {201, 202, 203, 204}, {301, 302, 303, 304}, }; int pay[3][4] = { {1000, 1100, 1200, 1300}, {2000, 2100, 12200, 2300}, {3000, 3100, 3200, 3300}, }; /.. 2020. 7. 23.
[36] 2차원 배열 2차원 배열 . 구조 : 자료형 변수명[행수][열수] . 선언 int arr[3][3]; int map[2][3] = {{1,2,3},{4,5,6}}; . 사용 : 행과 열의 인덱스를 넣어 값을 대입 arr[0][0] = 10; # include # incldue void main(){ // 배열 2차원 // 구조 : 자료형 변수명[행수][열수] // 선언 : int arr[3][2]; // Default : Garbage Value // 사용 : arr[0][0] = 10; arr[0][1] = 20; arr[1][0] = 30; arr[1][1] = 40; arr[2][0] = 50; arr[2][1] = 60; printf("%d ", arr[0][0]); // 10 printf("%d ", arr.. 2020. 7. 22.
[35]-A. CGV 영화관 예매 # include # include // 실습예제 : 1차원 배열 // CGV 영화관 예매 // //. 7개 좌석 생성 (좌석에는 고유번호가 있음) //. 사용자에게 좌석번호를 보여주고, //. 원하는 자리의 번호를 입력받는다. //. 좌석의 예약상태를 확인해서, //. 결과를 출력 (예약완료 or 이미 선택된 좌석입니다) //. 매진 시, 메세지 출력 void main(){ int nums[7] = {0};// 모두 0으로 저장 int seats[7] = {0}; for(int n=0; n 2020. 7. 22.