텀프로젝트 포인터, 구조체 PSLab. 이태호.

Slides:



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

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 Part 03 상수, 변수, 자료형 안산 1 대학 디지털정보통신과 임 성 국. 2 이 장의 내용 자료형이란 무엇인가 ? 상수와 변수 정수형 부동소수형 문자형.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
3. printf()와 데이터 형식.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
5장. 참조 타입.
C 프로그래밍.
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
2주차: 변수, 수식, Control Flow.
6장. printf와 scanf 함수에 대한 고찰
14장. 포인터와 함수에 대한 이해.
공학컴퓨터프로그래밍 Python 염익준 교수.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
5장 배열과 문자열 C 프로그래밍.
8주차: Strings, Arrays and Pointers
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Canary value 스택 가드(Stack Guard).
제 6 장 함수(functions).
제 15 강 문자와 코드 shcho.pe.kr.
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 11 구조체.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

텀프로젝트 포인터, 구조체 PSLab. 이태호

텀프로젝트 검사 일정 및 장소 일시 : 12월 22일 장소 : 7-201호 검사 시간 : 30분(발표 15분, 질의 15분) 제출자료 소스코드 설명서 발표자료 "X조.zip"으로 압축하여 21일 23시59분까지 cicpeople에 업로드

텀프로젝트 비기능적 요구사항의 3번 및 4번 기본적으로는 배열을 이용하여 작성하시오 3번,4번 이용 구현시 가산점 부여     

텀프로젝트 소스코드 작성시 함수 및 변수 이름은 의미있는 것을 사용 주석은 반드시 달도록 한다!! 주석 없으면 감점 들여쓰기를 지킨다 내가 가르친 학생이 어디나가서 짜증나는 소스코드 작성하는 꼴은 못보겠다

텀프로젝트 보고서 작성 요령 페이지 제한은 없음 보고서 구성의 예...(반드시 이렇게 하라는 이야기는 아님....)   보고서 구성의 예...(반드시 이렇게 하라는 이야기는 아님....) 프로그램의 목적 조원별 분담 내역 전체적인 설계 요구사항 분석 요구사항 처리 전체 흐름도 기타

텀프로젝트 세부적인 설계 구조체 자료형의 정의 메뉴별 함수 설계 기능을 위하여 사용할 기술 배열 혹은 포인터 보고서 작성요령(계속) 세부적인 설계 구조체 자료형의 정의 메뉴별 함수 설계 기능을 위하여 사용할 기술 배열 혹은 포인터 정렬을 위하여 사용한 알고리즘 사용해야할 라이브러리 기타... 구현사항 함수의 이름, 역할, 매개변수, 반환값 구조체 구현 사용한 라이브러리 함수 느낀점 및 자랑거리(반드시 작성... 추가 점수 들어감)

텀프로젝트 발표자료 작성 요령 프로그램의 목적 팀원별 분담사항 구조체 자료형의 정의 각 메뉴별 동작 과정 및 구현사항(각각 한페이지 정도로... 정렬에 사용한 알고리즘 소개 느낀점

포인터 포인터 간접참조 int 포인터 상수 1024 int형 데이터 double 포인터 변수 1052 double형 데이터 포인터(pointer)란? 데이터를 저장하기 위해 할당된 메모리 공간의 주소 포인터 상수(pointer constant): 메모리 주소 값 포인터 변수(pointer variable): 주소 값을 저장할 수 있는 변수 데이터에는 자료형이 연관되어 있으므로 포인터에도 자료형이 연관됨(예: int 포인터, double 포인터 등) 간접참조(indirection, dereferencing) 포인터가 가리키는 곳을 따라가 연관된 데이터 혹은 그 데이터가 저장된 공간을 참조하는 것 간접참조한 데이터의 자료형은 포인터 자료형을 이용하여 판단함 포인터 간접참조 int 포인터 상수 1024 int형 데이터 double 포인터 변수 1052 double형 데이터

포인터 선언과 사용 포인터 선언 형식 포인터 사용 예 포인터와 일반 변수를 함께 선언 자료형 *포인터변수; 1 one 3 2 int one = 1; // int 변수 int *to_one; // int 포인터 변수 to_one = &one; // to_one은 one을 가리킴 one = one + 1; // one ≡ 2 one = *to_one + 1; // one ≡ 3 *to_one = one + 1; // one ≡ 4 포인터와 일반 변수를 함께 선언 int one, *to_one; int one, *to_one = &one; // 선언과 함께 초기화! 1 one 3 2 4 to_one

배열과 포인터 배열 이름을 포인터에 저장 포인터 가감연산 배열 이름은 배열이 할당된 공간의 주소이므로 포인터 상수임 따라서 배열 이름을 포인터 변수에 저장할 수 있음 이 때, 포인터의 타입은 배열 원소를 가리킬 수 있는 타입이어야 함 포인터 가감연산 포인터에 가감연산을 취하면 포인터가 가리키는 자료의 크기 단위로 포인터 값이 증감함 포인터 가감 연산 예: int a[10], *p = a; p += 2; 포인터 p 값은 2만큼 증가하는 것이 아니라 2 * sizeof(int)만큼 증가함

sizeof ?? sizeof(char)는 얼마일까? sizeof(int)는 얼마일까? sizeof(long)는 얼마일까? p int *p; p += 1;

배열과 포인터 void main(){ int a[3] = {1,2,3}; int *b = a; printf(“%d, %d, %d”, a[0], a[1], a[2]); printf(“%d, %d, %d”, *b,*(b+1),*(b+2)); }

문자열(string) 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다. 예 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다.  예 "Hello" : 문자열 "A" : 문자열 'A' : 문자 C 언어에서 문자열은 문자 배열 형태로 저장된다. ©우균, 창병모

문자열 변수의 선언과 초기화 예를 들어 char s[16] ="C programming !"; char t[ ] = "C programming !";  char s[ ] = "C 프로그래밍 !"; char s[16]= {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','!','\0'}; 문자열에 한글 넣을때… 배열의 크기는 얼마일까요?? 7개라는 사람은 그동안 잤구만… 9개라는 사람은 꾀가 있어… 10개라는 사람은 기특하다 정답은 14개 한글은 2바이트 문자!! 알파벳이나 기호는 1바이트!! ©우균, 창병모

포인터와 문자열 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 예를 들어 char *포인터변수명; char *p  = "Hello"; char m[] = "world";     p H e l l o \0 m[0] m[1] m[2] m[3] m[4] m[5] m w o r l d \0

포인터 대입 p = m; 실행 후 H e l l o \0 p w o r l d \0 m 즉, 포인터 p에 배열 m이 저장하는 “world\0”문자열을 저장하는 것이 아님!!

배열과 포인터 void main(){ char a[4] = {‘a’,’a’,’a’,’\0’}; char *b = a; printf(“%s”,a); printf(“%s”, b); *(b+1) = ‘b’; }

포인터를 이용한 문자열 입력 문자형 포인터 변수의 선언 예 1 (실행 시간 오류) 예 2 예 3 포인터(주소)를 저장하기 위한 기억공간만 할당 문자열이 저장될 기억장소는 확보되지 않음 예 1 (실행 시간 오류) char *name; scanf("%s", name); 예 2 char name[81]; 예 3 char name[81], *p = name; scanf("%s", p); ©우균, 창병모

문자열 입출력: gets()와 puts() 한 번에 한 문자열을 입력/출력할 수 있다. char *gets(char *str);  표준 입력으로부터  문자열을 읽어 들여 문자형 포인터 str이 가리키는 기억장소에 저장하고 포인터 str를 리턴한다 int puts(char *str);  str이 가리키는 문자열을 표준 출력에 출력한다. ©우균, 창병모

sscanf()와 sprintf() sscanf() 함수와 sprintf() 함수 scanf(), printf() 함수와 사용 방법과 역할은 비슷함. 표준 입출력 대신에 문자열에 대해 입출력 int sprintf(char *str, char *format, ...); 문자열에 출력하는 함수로 포인터 str이 가리키는 곳에 문자열 형태로 출력한다. int sscanf(char *str, char *format, ...); 문자열로부터 입력을 받는 함수로 포인터 str이 가리키는 문자열로부터 데이터를 읽어 들인다. ©우균, 창병모

stringio.c 실행결과: C programming language C programming language C programming language is beautiful ©우균, 창병모

문자열관련 라이브러리 함수 문자열 함수 설명 strlen(str) 문자열 str의 길이를 리턴한다. strcpy(str1, str2) 문자열 str2를 str1으로 복사한다. strcat(str1, str2) 문자열 str2를 str1에 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

문자열 길이 함수 문자열의 길이는 문자열 내에 있는 문자의 개수이다. int strlen(char *str); 문자열의 끝에 있는 '\0'은 길이에 포함되지 않음 ©우균, 창병모

문자열 복사함수 strcpy(t,s) char *strcpy(char *str1, char *str2); 문자열 str2를 str1에 복사하고 포인터 str1을 리턴 str1이 가리키는 기억 장소는 문자열을 복사할 수 있을 만큼 충분히 커야 함. char *strncpy(char *str1, char *str2, int n) str2의 최대 n바이트를 str1에 복사 ©우균, 창병모

문자열 접합 함수 strcat() 함수 char *strcat(char *str1, char *str2); 두 문자열을 접합하여 새로운 문자열을 만드는 함수 char *strcat(char *str1, char *str2); str1의 문자열 끝('\0')에 str2의 문자열 시작을 접합한다. str1의 기억장소는 두 문자열을 연결할 수 있을 만큼 충분히 커야 한다 포인터 str1을 리턴한다. char *strncat(char *str1, char *str2, int n) 최대 n개의 문자를 접합 ©우균, 창병모

문자열 비교 함수 strcmp() 함수 char *strcmp(char *str1, char *str2); 두 개의 문자열을 차례로 한 문자씩 비교하는 함수 char *strcmp(char *str1, char *str2); 두 문자열을 차례로 한 문자씩 비교한다.  두 문자열이 같으면 0을 리턴 다르면 서로 다른 문자의 차이(ASCII 코드값의 차이)를 리턴 str1 문자열이 str2 문자열 보다 크면 양수를 작으면 음수 리턴 char *strncmp(char *str1, char *str2, int n) 최대 n개의 문자까지 비교 ©우균, 창병모

문자열 내의 특정 문자 검색 함수 strchr(), strrchr() 함수 문자열 내의 특정 문자의 위치를 검색하는 함수이다. 문자열 내의 특정 문자가 처음/마지막으로 나타난 위치(포인터) char *strchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 처음으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. char *strrchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 마지막으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. ©우균, 창병모

문자열 내의 특정 문자열 검색 함수 strtrstr() 함수 문자열 내의 특정 문자열의 위치를 검색하는 함수 char *strstr(char *str1, char *str2); str2이 가리키는 문자열을 str1이 가리키는 문자열에서 찾아 처음으로 발견되는 문자열의 위치 포인터를 리턴 찾는 문자열이 없으면 NULL을 리턴 ©우균, 창병모

문자열 변환 함수 수를 나타내는 문자열을 읽어 들이면 문자열 형태로 저장 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 int atoi(char *str);       문자열 str을 int 정수로 변환하여 리턴한다. long atol(char *str); 문자열 str을 long int 정수로 변환하여 리턴한다. double atof(char *str); 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

토큰 추출 strtok() 함수 char *strtok(char *str1, char *str2); 하나의 큰 문자열로부터 토큰(단어)을 추출해 내는 함수 긴 문자열 내에 있는 각 단어에 대한 조작에 사용 char *strtok(char *str1, char *str2); str2 문자열에 포함되어 있는 문자들을 분리자(delimiter)로 사용 포인터 str1이 가리키는 문자열에서 토큰을 추출 처음 호출: 최초의 토큰에 대한 포인터가 리턴 다음 호출: str1 대신에 NULL을 지정하여 다음 토큰의 포인터가 리턴 이 함수가 NULL을 리턴할 때까지 이 과정을 반복 가능 ©우균, 창병모

실습1 문자를 복사하는 strcpy 함수를 직접 만들어보자!! 함수로 작성하실 것!! 매개변수는 포인터를 사용 복사한 문자열의 길이를 반환하도록 할 것!!

실습2 정수를 입력받고 정수를 2,8,10,16 진수로 표현하는 프로그램을 만드세요. gets를 사용해 입력받도록 하세요.