1. c programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 ·...

22
1. C Programming 기초 2015-1 Programming Language March 1, 2015 Prof. Young-Tak Kim Advanced Networking Technology Lab. (YU-ANTL) Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : [email protected])

Upload: others

Post on 09-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

1. C Programming 기초

2015-1 Programming Language

March 1, 2015

Prof. Young-Tak KimAdvanced Networking Technology Lab. (YU-ANTL)

Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA

(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])

Page 2: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 2

Outline

소프트웨어 개발과정알고리즘 C 프로그램 작성 절차(Visual Studio) C 프로그램 구성요소디버깅 (debugging)

Page 3: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 3

인류 문명의 진화와 컴퓨터 프로그래밍

인류는 새로운 도구를 효율적으로 현명하게사용함으로써 문명을 진화시켰음 increased productivities (생산성) with new tools of new

materials, powered machines: from stone, stick, bronze, iron, telephone and computers

increased collaborations (협동) among multiple persons increased performance (성능) in value creation increased energy efficiencies (에너지 효율성) 컴퓨터와 프로그래밍을 통하여 이러한 기능을 강화시킴

Page 4: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 4

소프트웨어 개발 과정

Source codes.c, .cc

Object codes.o

Program Executionoutput

Compile

LinkExecutable codes

.exe

Load

Execute

Correct Output ?

임무 완수 !!

Edit program source code

Analysis of the requirementEvaluate Feasibility

Algorithm designData Structure design

Software system designSubsystem design

Block designModule design

Class / Function design

설계 (Design) 구현 (Implementation)

Problem Specifications(Requirements,

Objectives)

문법적오류

논리적오류

Page 5: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 5

요구 사항 분석

프로그램 개발자는 사용자들의 요구사항을 만족시키기위하여 프로그램을 작성

(예) 3년 이상 근무한 직원들의 리스트 출력 정규직만 or 계약직 포함 기준이 되는 날짜가 오늘?

요구 사항 명세서: 사용자의 요구 조건을 만족하도록소프트웨어가 갖는 기능 및 제약 조건, 성능 목표 등을포함 요구 사항을

정리하였습니다. 이 정도면

될까요?

가계부 프로그램이 필요합니

다.

Page 6: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 6

알고리즘

Algorithm is a list of instructions when executed, transform information from input to output The instructions are a finite set of steps

that can be executed, in a definite deterministic order When these steps are actually executed,

the execution must terminate after a finite time.

Page 7: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 7

알고리즘의 개발

핵심적인 부분어떤 단계를 밟아서 어떤 순서로 작업을 처리할 것인지를

설계순서도 (flow chart) 와 의사 코드 (pseudo code)를

도구로 사용알고리즘은 프로그래밍 언어와는 무관알고리즘은 원하는 결과를 얻기 위하여 밟아야 하는

단계에 집중적으로 초점을 맞추는 것프로그램을 작성하기 전에 먼저 알고리즘을구상합니다.

Page 8: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 8

순서도 (flow chart)

프로그램에서의논리순서 또는작업순서 등을그래픽으로표현하기 위한 형식

알고리즘이복잡하면기술하기가힘들어진다.

Page 9: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 9

의사코드 (Pseudo Code)

Pseudo code Simplified list of instructions to show the overall process of

algorithm not following the details of programming language the skeleton of the algorithm should be shown

Page 10: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 10

Pseudo code (1)

Procedure FindMax(dataArray, N)1: //input argument: int dataArray[0..N-1];

// array of data with N elements// output result: maximum value of the given data array

2: int max;3: int index;4: index = 0; //initialize index5: max = dataArray[index];6: while (index < N) {7: if (max < dataArray[index])8: max = dataArray[index];9: index = index + 1;10: } // end while11:12: printout max;13: end // end of Algorithm FindMax()

Page 11: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 11

Pseudo code (2)

Procedure FindAvg(dataArray, N)1: //input argument: int dataArray[0..N-1];

// array of data with N elements// output result: maximum value of the given data array

2: int count;3: double sum, avg;4: count = 0; //initialize index5: sum = 0.0;6: while (count < N) {7: sum = sum + dataArray[count];8: count = count + 1;9: } // end while10: avg = sum / count;12: printout avg;13: end // end of Algorithm FindAvg()

Page 12: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 12

자료구조 (Data Structure)

모든 소프트웨어 개발에서는 효율적인 알고리즘 (algorithm) 과 이 알고리즘에 적합한 자료구조 (data structure)를사용하여야 우수한 성능을 발휘할 수 있음

알고리즘의 예 sorting (정렬): selection sorting, quick sorting search (탐색): depth-first search, breadth-first search shortest path, minimum spanning tree

자료구조의 예 단순 배열 (simple array) 구조체 (structure) 구조체 배열 (array of structure) 자기참조 구조체 (self-referential structure) Linked List, Binary Tree Heap, priority queue Map, Skip list

Page 13: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 13

효과적인 프로그램 개발 방법 (1)

프로그램 설계 (알고리즘 및 자료구조 설계)에 더 많은시간을 투자할 것 주어진 문제를 해결하기 위한 효율적인 알고리즘을 먼저 구성할것

구성된 알고리즘에 적합한 자료구조를 선택할 것 예) 100,000개의 학생 데이터로 부터 0.01초의 데이터 처리 시간내에 특정 조건을 만족하는 학생을 탐색 (search)하여야 하는경우, 어떤 자료구조를 사용하며, 어떤 방식으로 탐색할 것인가 ? array vs. linked list vs. binary tree linear search vs. binary search

Page 14: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 14

효과적인 프로그램 개발 방법 (2)

프로그램 오류 수정을 위한 debugging 방법을 먼저숙달 할 것 프로그램 소스코드 상에 존재하는 문법적 에러 및 논리적인에러를 빨리 찾아내는 방법을 먼저 숙달

Visual studio의 debugging 기능을 먼저 확인하고, 숙달할 것 break point 기능 trace 기능 각 단계에서의 local variable 값 확인

Page 15: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 15

Source Program Coding

알고리즘의 각 단계를 프로그래밍 언어를 이용하여 기술어떤 프로그래밍 언어로도 가능알고리즘을 프로그래밍 언어의 문법에 맞추어 기술한

것을 소스 프로그램(source program)소스 프로그램은 주로 텍스트 에디터나 통합 개발 환경을

이용하여 작성

(Q) 알고리즘 개발과 코딩 중 어떤 것이 더 어려울까?드디어 코딩을 시작합니다.

(A) 알고리즘 개발이 더 창의적인 작업이고 더 어렵다

Page 16: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 16

Source code documentations

Standard comment at each source code file produced in this course/*** File Name: "???.c" or "xxx.h", or "yyy.cpp"* Description:* - This program is . . . . . . ** Programmed by Gil-Dong Hong,* Last updated: Version 2.0, March 1, 2011 (by Young-Chul Kim).** ========================================================* Version Control (Explain updates in detail)* ========================================================* Name YYYY/MM/DD Version Remarks* John Doe 2009/11/15 1.0 1:1 Chatting on UDP * socket, 2 threads* John Doe 2010/05/01 1.1 User interface has been* updated with GUI* Mark Kim 2010/08/03 2.0 Major change in the* program structure* ========================================================*/

Page 17: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 17

Compile

소스 프로그램을 목적 프로그램으로 변환하는 작업컴파일러가 수행컴파일 오류: 문법 오류 (예) He go to school;

오류가 발생하면 소스 프로그램을 수정한 후에 다시컴파일

They goes to school.....

영어한국어

번역가

문장에 오류가 있습

니다.

Page 18: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 18

Link

컴파일된 목적 프로그램을 라이브러리와 연결하여 실행프로그램을 작성하는 것

라이브러리(library): 프로그래머들이 많이 사용되는기능을 미리 작성해 놓은 것 (예) 입출력 기능, 파일 처리, 수학 함수 계산

링크를 수행하는 프로그램을 링커(linker)라고 한다.

Hello!

Page 19: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 19

실행 (execution)과 디버깅 (Debugging)

실행 파일: 실행 파일은 윈도우즈에서는 .exe라는 확장자실행 시간 오류(run time error): 0으로 나누는 것 잘못된 메모리 주소에 접근하는 것

논리 오류(logical error): 문법은 틀리지 않았으나 논리적으로 정확하지 않는 것 (예)

①그릇1과그릇2를준비한다. ②그릇1에밀가루, 우유, 계란을 넣고 잘섞는다. ③그릇2를 오븐에넣고 30분동안 350도로굽는다.

Page 20: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 20

Debugging

소스에 존재하는 오류를 잡는 것

Page 21: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 21

소프트웨어의 유지 보수 (maintenance)

소프트웨어의 유지 보수가 필요한 이유 디버깅 후에도 버그가 남아 있을 수 있기 때문 소프트웨어가 개발된 다음에 사용자의 요구가 추가될 수 있기때문

유지 보수 비용이 전체 비용의 50% 이상을 차지

Page 22: 1. C Programming 기초elearning.kocw.net/.../2015/yeungnam/kimyoungtak/1-2.pdf · 2016-09-09 · 대학원정보통신공학과 차세대네트워킹연구실 1 - 2 프로그래밍언어-교수김영탁

대학원정보통신공학과차세대네트워킹연구실 프로그래밍언어 - 교수 김영탁1 - 22

프로그램 통합 개발 환경

Visual Studio 2013