배열, 포인터, 함수 Review & 과제 1, 2.

Slides:



Advertisements
Similar presentations
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
Advertisements

쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 1장 C 언어의 소개.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
C 프로그래밍.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
제5장 제어명령
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
C ++ 프로그래밍 시작.
변수와 자료형.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
13. 포인터와 배열! 함께 이해하기.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
17장. 포인터의 포인터.
어서와 C언어는 처음이지 제23장.
C.
printf("Global Korea\n");
실습과제 1번 배열 크기 : 8 문자열 길이 : 7 // MBCS 예제: 출력 결과 이해하기
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
프로그래밍 기법 최적화 프로그래밍.
11장. 1차원 배열.
Presentation transcript:

배열, 포인터, 함수 Review & 과제 1, 2

배열 같은 자료형을 가진 연속된 메모리 공간으로 이루어진 자료구조 같은 자료형을 가진 변수들이 여러 개 필요할 때 사용

int arr[100]; 배열의 선언 자료형: 배열의 자료형 배열 이름: 변수명과 같이 배열을 구분하는 이름. 배열의 이름은 배열의 시작 주소를 가리키는 포인터 배열 길이: 배열을 구성하는 원소의 개수 배열 크기: 원소 하나의 크기 * 배열의 길이 ex) 4(int) * 100(배열길이) int arr[100]; 자료형 배열이름 배열 길이

배열의 초기화 길이가 지정된 배열의 초기화 – 2_15.c 길이가 지정되지 않은 배열의 초기화 – 2_16.c

배열의 접근 0 번 인덱스(index)부터 시작 int arr[10]; arr[3]은 arr[0]의 주소(&arr[0])로부터 (자료형의 크기)*3만큼 떨어진 곳의 주소에 들어있는 값이다. arr[0] arr[1] arr[2] arr[3] arr[4] arr[5] arr[6] arr[7] …

int arr[3][4]; 2차원 배열의 선언 자료형: 배열의 자료형 배열 이름: 변수명과 같이 배열을 구분하는 이름. 2차원 배열의 이름은 배열의 시작 주소를 가리키는 이중 포인터 배열 길이: 배열의 요소 길이를 행과 열로 지정 배열 크기: 원소 하나의 크기 * 배열의 길이 ex) 4(int) * 3(행) * 4(열) 행 열 int arr[3][4]; 자료형 배열이름 배열 길이

2차원 배열을 어디에 쓸까? m x n 행렬을 나타내는 데 쓴다 n 𝒂 𝟏, 𝟏 𝒂 𝟏,𝟐 𝒂 𝟏,𝟑 𝒂 𝟏,𝟒 𝒂 𝟐,𝟏 𝒂 𝟏, 𝟏 𝒂 𝟏,𝟐 𝒂 𝟏,𝟑 𝒂 𝟏,𝟒 𝒂 𝟐,𝟏 𝒂 𝟐,𝟐 𝒂 𝟐,𝟑 𝒂 𝟐,𝟒 𝒂 𝟑,𝟏 𝒂 𝟑,𝟐 𝒂 𝟑,𝟑 𝒂 𝟑,𝟒 m

m x n 행렬(m x n Matrix) A = 𝑎 1,1 ⋯ 𝑎 1,𝑛 ⋮ ⋱ ⋮ 𝑎 𝑚,1 ⋯ 𝑎 𝑚,𝑛  행렬의 정의: 수나 기호, 수식 등을 네모꼴로 배열한 것 A[i][j] : 𝑎 𝑖,𝑗 (행렬A의 i번째 행 j번째 열의 원소) A = 𝑎 1,1 ⋯ 𝑎 1,𝑛 ⋮ ⋱ ⋮ 𝑎 𝑚,1 ⋯ 𝑎 𝑚,𝑛 j번째 열 i번째 행

2차원 배열의 초기화 int arr[3][4] = {{1, 2}, {3}, {4, 5}};  선언과 동시에 초기화 하는 방식 3 4 5

𝑐 𝑖,𝑗 = 𝑘=1 𝑛 𝑎 𝑖,𝑘 ∗ 𝑏 𝑘,𝑗 , 1≤i≤m, 1≤j≤r 행렬의 곱셈 행렬 A의 열의 개수와 행렬 B의 행의 개수가 같아야 곱셈이 가능 𝑐 𝑖,𝑗 = 𝑘=1 𝑛 𝑎 𝑖,𝑘 ∗ 𝑏 𝑘,𝑗 , 1≤i≤m, 1≤j≤r

예제 연습 2x4 행렬과 4x2 행렬의 곱셈 8 4 2 1 3 3 6 4 ∗ 1 7 2 4 5 2 6 12 = ? https://www.acmicpc.net/problem/2740

포인터 메모리의 주소를 저장하는 변수 주소의 크기가 4 bytes 라고 하면, 포인터의 크기도 4 bytes다. 즉, 32bit 환경에서는 4 bytes, 64bit 환경에서는 8 bytes다.

포인터의 연산 * 연산자는 피연산자(보통 포인터)에 저장되어 있는 주소에 들어있는 값을 가져온다. ex) *ptr & 연산자는 피연산자(보통 변수명)가 저장되어있는 메모리 주소를 기져온다. ex) &val

포인터의 장점? 메모리 주소를 이용하여 다양한 변수들에 접근하고 제어하기 용이하다. a = 1 ptr = &a b = 3 c = 5

포인터의 장점? 메모리 주소를 이용하여 다양한 변수들에 접근하고 제어하기 용이하다. a = 1 ptr = &b b = 3 c = 5

포인터의 장점? 메모리 주소를 이용하여 다양한 변수들에 접근하고 제어하기 용이하다. a = 1 ptr = &b b = 4 c = 5

포인터의 장점? 메모리 주소를 이용하여 다양한 변수들에 접근하고 제어하기 용이하다. a = 1 ptr = &c b = 4

포인터의 장점? 메모리 주소를 이용하여 다양한 변수들에 접근하고 제어하기 용이하다. a = 1 ptr = &c b = 4

함수의 정의 return_type function_name(parameters) { /* … */ return (return_type)expression; }

Prototype int func (int, char, double*);

function_name(arguments) 함수 호출 function_name(arguments)

함수의 정의 및 함수 호출

인자(argument) 함수 호출 시 넘겨주는 값 func(1, 3)

매개변수(parameter) 함수 정의부에서 정의된 변수 void func(int a, int b) { /* … */ }

Call by value 함수의 인자(argument)로 값을 넘겨준다. 값이 함수로 넘어갈 때 복사된 값이 넘어간다. 함수에서는 복사된 값을 사용한다.

Call by Reference 인자(argument)로 메모리 주소를 담고있는 변수를 넘겨준다. 함수 내에서 그 메모리 주소에 담겨있는 값에 접근할 수 있다.

Call by value

Call by reference

함수를 이용한 재귀(Recursion)

함수를 이용한 재귀(Recursion) 탈출조건

함수를 이용한 재귀(Recursion) 탈출조건

재귀를 이용한 전수조사 방법 Depth First Search Back tracking = DFS + 커팅

과제 1, 2

과제 1-12 //중간피라미드 space = 0; #include<stdio.h> space2 = length - 1; for (i = 1; i <= length; i++, space++, space2--) { for (j = 0; j<length + space; j++) { if (i >= length - n + 1) { if (j<space2) printf(" "); else printf("*"); } if (i >= length - n + 1) printf("\n"); //역피라미드 for (i = 0; i<n; i++) { for (j = 1; j <= i + middle_line; j++) for (j = 1; j <= n - i; j++) for (j = n - i - 1; j >= 1; j--) return 0; #include<stdio.h> int main(void) { int n, i, j; scanf("%d", &n); int middle_line = n * 2 - 1; int space = 0 + middle_line; int space2 = middle_line + n - 1; int length = n + (n - 1) * 2 + 1; //피라미드 for (i = 1; i <= n; i++, space++, space2--) { for (j = 0; j<n + space; j++) { if (j<space2) printf(" "); else printf("*"); } printf("\n"); //중간역피라미드 for (i = 0; i<n - 1; i++) { for (j = 1; j <= i; j++) for (j = 1; j <= length - i; j++) for (j = length - i - 1; j >= 1; j--)

과제 1-14(1) if (num1 == a) { strike++; } else if (num1 == b || num1 == c) { ball++; if (num2 == b) { else if (num2 == a || num2 == c) { if (num3 == c) { else if (num3 == a || num3 == b) { printf("%d Strike %d Ball \n", strike, ball); ball = 0, strike = 0; return 0; #include <stdio.h> #define true 1 int main(void) { const int a = 3, b = 5, c = 1; static int count = 0; int ball = 0, strike = 0; int num1, num2, num3; while (true) { scanf("%d %d %d", &num1, &num2, &num3); count++; if (num1 == a && num2 == b && num3 == c) { printf("3 Strike Out!!\n"); printf("%d Game Played\n", count); break; }

과제 1-14(2) #include <stdio.h> int main() { int input[3], i; const int ans[3] = { 3, 5, 1 }; int strike, ball; while (1) { printf("guess: "); for (i = 0; i < 3; i++) scanf("%d", &input[i]); strike = 0, ball = 0; for (i = 0; i < 3; i++) { if (input[i] == ans[i]) strike++; else if (input[i] == ans[(i + 1)%3] || input[i] == ans[(i + 2)%3]) ball++; } printf("%d Strike %d Ball\n", strike, ball); if (strike == 3) break; return 0;

과제 1-15 #include <stdio.h> int main (void){ char n; float a,b; while(1) { scanf("%c", &n); scanf("%f %f", &a, &b); if (n=='+') printf("%f\n", a+b); else if (n=='-') printf("%f\n", a-b); else if (n=='*') printf("%f\n", a*b); else if (n=='/') printf("%f\n", a/b); else if (n=='q') break; } return 0;

과제 2-9 #include <stdio.h> #include <string.h> void push(char); void pop(); int size(); char top(); int main() { char input[100]; char stack[100 + 1]; int len, i; int valid = 1; scanf("%s", input); len = strlen(input); for (i = 0; i < len; i++) { if (input[i] == '(') push(input[i]); else if (input[i] == ')') { //size가 0인데 ')'가 등장했다는 것은 짝이 안맞는다는 뜻 if (size() == 0) { valid = 0; break; } else pop(); if(size()!=0) valid = 0; printf("%s\n", valid ? "True" : "False"); return 0;

#include <stack> 함수: push, pop, size, top, empty void push(element): 스택의 맨 위에 원소를 추가한다. void pop(): 스택의 맨 위의 원소를 제거한다. size_type size(): 스택에 있는 원소의 개수를 반환한다. element_type top(): 스택 맨 위의 원소를 반환한다. void empty(): 스택이 비어있으면 true, 아니면 false를 반환한다. http://www.cplusplus.com/reference/vector/vector/?kw=vector