10주차: Structures and Others

Slides:



Advertisements
Similar presentations
1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
C 언어 (STS ) 10. Pointer Applications.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제14장 동적 메모리.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6주차: Functions in C and Others
2주차: 변수, 수식, Control Flow.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
Chapter 08. 함수.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
[ 단원 04 ] 반복과 배열.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
7주차: Functions and Arrays
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
7 생성자 함수.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

10주차: Structures and Others

목차 Array와 Pointer의 관계 Call-by Reference continue & break 문 Storage Class static String Library Structure Type

Array와 Pointer의 관계 int a[100]; 위의 선언은 a[0], a[1], ..., a[99]의 정수 100개의 배열에 대한 선언이다. 위에서 a는 주소(pointer)이며 배열의 첫 번째 원소 a[0]의 주소를 나타낸다.

int a[100]은 메모리에 있다. a[0] a[1] a[99] 1000 1004 1396 a

a의 이용 int a[100]; int *iptr; iptr은 int pointer type 변수이다. iptr = a; a의 값(1000번지)을 iptr에 넣는다. 즉, iptr은 1000번지라는 값을 가지게 된다. 그러면 *iptr은 무엇인가? iptr이 가리키는 주소는 a[0]의 주소이며 *iptr은 a[0]이다.

iptr은 1000이라는 값을 가지며 iptr이 a[0]을 가리킨다고 생각해도 좋다. 1004 1396 a a는 1000이라는 값을 가지는 포인터 상수이다. iptr iptr은 1000이라는 값을 가지며 iptr이 a[0]을 가리킨다고 생각해도 좋다.

iptr로 할 수 있는 일 *iptr는 a[0]이다. iptr + 1의 값은? a[0]의 다음 원소인 a[1]의 주소이다. iptr은 int pointer이기 때문에 iptr + 1은 1001이 아니라 정수의 크기에 맞춰 계산된다(이 경우는 1004). 따라서 *(iptr + 1)은 a[1]이다.

Call-by-Reference 함수의 인자를 직접 접근하는 전달 방식 C에서는 call by value를 사용한다. 함수의 인자로 값을 복사해서 그대로 전달한다(6주차 강의 참고). call by reference의 효과는 포인터 변수를 이용한다.

Call-by-Reference Example #include<stdio.h> void swap(int *p, int *q) { int tmp; tmp = *p; *p = *q; *q = tmp; } int main(void) int i = 3, j = 5; swap(&i, &j); .... 포인터를 함수의 인자로 넘겨주는 것은 어떤 변수의 주소(&i, &j)를 넘겨 주는 것이므로 그 주소에 저장된 값을 변경할 수 있다. 포인터를 사용하지 않으면 함수의 인자로 받은 값을 변경할 수 없다.

continue & break 문 순환문(for, while, do-while) 내부에서 사용된다. continue; continue를 만나면 순환문의 다음 순환(next iteration)으로 바로 넘어간다. break; 순환문을 빠져 나간다.

break 문 예제 -이 프로그램은 키보드에서 정수를 하나씩 입력 받다가 7을 입력 받으면 while loop을 빠져 나간다. #include<stdio.h> int main(void) { ... while(scanf(“%d”, &i) == 1){ if(i == 7) break; } -이 프로그램은 키보드에서 정수를 하나씩 입력 받다가 7을 입력 받으면 while loop을 빠져 나간다.

The Storage Class static Storage classes auto, extern, register, static Static static 자신이 선언된 block에서만 접근이 가능하지만 프로그램이 실행되는 동안은 메모리에 계속 존재한다. auto의 경우는 block에서만 존재할 뿐더러 block에서만 메모리에 존재한다. extern static

static variable -call_cnt 변수는 static 변수이므로 compute_sum이 처음 호출될 때 메모리에 할당되고 그 이후 프로그램 종료시까지 계속 남아 있는다. -예제에서 call_cnt는 한 번만 0으로 초기화되고 그 이후는 계속 값이 더해진다. ... int compute_sum(int a[]) { static int call_cnt = 0; call_cnt++; }

extern static ... static int v; int compute_sum(int a[]) { static int call_cnt = 0; call_cnt++; } -변수 v는 extern static 변수로 자신이 선언된 파일에서만 이용이 가능하다. 나머지는 extern 변수와 같다.

extern & extern static 파일 1 파일 n 외부 영역(global) static int v; /* 파일 n에서만 볼 수 있다. */ 함수 A 함수L main함수 외부 영역(global) int w; /* 모든 파일에서 볼 수 있다. */

String Library 프로그램의 첫 부분에 string.h를 include하고 사용하면 된다. strcpy 함수 등이 있다.

Structure Type structure array와 같이 derived data type이다. 여러 가지 항목을 가진 객체를 변수로 만들고 싶을 때 사용한다. 예를 들어, 성적 처리 프로그램에서 학생 데이터

Structure Type의 선언 우선 타입을 선언하자. 변수의 선언과는 다른 개념이다. struct student { char name[20]; int kor; int eng; int math;}; 위의 선언은 멤버 name[], kor, eng, math를 가지는 student라는 struct type의 선언이다.

struct student 타입은? char name[20] struct student int kor int eng int math struct student

struct Example(1/3) #include<stdio.h> struct student{ char name[20]; int kor, eng, math; }; int main(void) { struct student class_mem; ... -struct student{ ....는 struct student라는 데이터 타입의 선언이다. -struct student class_mem;은 struct student 타입의 변수 class_mem의 선언이다.

struct Example(2/3) #include<stdio.h> #include<string.h> ... int main(void) { struct student class_mem; class_mem.kor = 70; class_mem.eng = 60; -class_mem.kor는 class_mem이라는 변수의 멤버 kor를 나타낸다. class_mem.kor는 int 타입이다.

struct Example(3/3) strcpy(dst, src)는 string src를 dst로 복사하는 함수이다. #include<stdio.h> #include<string.h> ... int main(void) { struct student class_mem; .... strcpy(class_mem.name, “Babe”); strcpy(dst, src)는 string src를 dst로 복사하는 함수이다. 이 예제에서는 변수 class_mem의 멤버 char name[20]에 “Babe”라는 값을 복사한다.

struct 타입의 복사 struct student tclass_mem; tclass_mem = class_mem class_mem의 각 멤버(name, kor, eng, math)들의 값이 tclass_mem의 각 값으로 복사된다.

strcpy 함수 string.h 파일을 include하고 사용 #include<string.h> strcpy(char array(destination string), char array(source string))

데이터 파일에서 항목들을 읽어 오기(1/3) 노정렬 34 76 39 허준 45 23 89 전지현 12 34 29 ...

데이터 파일에서 항목들을 읽어 오기(2/3) -class_mem이라는 struct student 타입의 배열을 선언한다. .... int main(void) { struct student class_mem[10]; char line[1024], tmp_name[20]; int tmpkor, tmpeng, tmpmath, i; FILE *dfile; dfile = fopen(“data.txt”, “r”); -class_mem이라는 struct student 타입의 배열을 선언한다. -파일을 연다.

데이터 파일에서 항목들을 읽어 오기(3/3) .... i = 0; while(fgets(line, 1024, dfile)){ sscanf(line, “%s %d %d %d”, tmp_name, &tmpkor, &tmpeng, & tmpmath); strcpy(class_mem[i].name, tmp_name); class_mem[i].kor = tmpkor; class_mem[i].eng = tmpeng; class_mem[i].math = tmpmath; i++; ... }

fgets & sscanf 함수 fgets(char array, char count, file pointer); fgets(line, 1024, dfile); dfile에서 한 줄을 읽어서(최대 1024 문자만큼) line에 복사한다. 파일의 끝까지 읽었으면 NULL(0)을 return한다. sscanf(char array, “...”, ...); scanf와 같으나 단지 입력을 char array에서 받는다.

교재에서 강의와 연관된 부분 6장 9장 11장 p. 659(for fgets()) 6.3, 6.4, 6.11 9.1, 9.2, 9.3, 9.4 11장 11.3 p. 659(for fgets())

최종과제( - 6.13) 성적처리프로그램 데이터 파일의 형식 처리해야 할 내용 출력 양식 그 외의 요구 사항

데이터의 형식 학번 이름 국어 영어 수학 2000-001 노정렬 34 76 39 2000-002 허준 45 23 89 2000-003 전지현 12 34 29 .... 데이터 파일은 강의 홈페이지에서 가져갈 것. 총 50명의 데이터임

처리해야 할 내용 각 학생의 평균 점수 계산 각 과목별 평균 점수 계산 전체 평균의 계산 학생별 평균의 평균 각 학생의 평균 점수순으로 정렬하여 화면에 출력

출력 양식 학번 이름 국어 영어 수학 평균 ....(평균점수순으로 정렬하여 출력) 과목별 평균 전체 평균

그 외의 요구 사항 학생들을 점수별로 정렬하는 작업은 함수를 이용할 것 예) void sort_student(struct student[], int arrcnt); 과제에 어려움이 있으면 e-mail이나 직접 찾아와서 질문 하세요...(301동 451호, 오전 10시 – 오후 9시 정도까지 있습니다.)

제출물 원래 숙제에서 제출하던 것 소스 코드는 e-mail로도 보낼 것 표지, 설명, 소스코드, 실행결과, 감상 kbhwang@scai.snu.ac.kr

기말 고사 6월 20일 예정 강의 자료를 중심으로 공부할 것