Transcript
Page 1: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

컴퓨터 프로그래밍 2

Week 1: 프로그래밍 개발과정

담당교수 : 최 윤 정

Page 2: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로그램 작성 과정

2

소스파일

test.c

소스파일

test.c

오브젝트파일

test.obj

오브젝트파일

test.obj

실행파일

test.exe

실행파일

test.exe

컴파일러(compiler)

컴파일러(compiler)

링커(linker)

링커(linker)

로더(loader)

로더(loader)

에디터(editer)

에디터(editer)

통합 개발 환경 (IDE)

Page 3: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로그램 작성 단계 편집 (edit)

에디터를 이용하여 원하는 작업의 내용을 기술하여 소스 코드 작성

소스 파일 (source file): 소스 코드가 들어 있는 텍스트 파일

( 예 ) test.c

컴파일 (compile)

소스 파일 -> 기계어로 변환

오브젝트 파일 (object file) : 기계어로 변환된 파일

( 예 ) test.obj

링크 (link)

오브젝트 파일들을 라이브러리 파일들과 연결하여 하나의 실행 파일 생성

실행 파일 (executable file): 실행이 가능한 파일

( 예 ) test.exe3

Page 4: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로그램 작성 단계

4

Page 5: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Q & A

(Q) 소스 파일과 오브젝트 파일 , 실행 파일 중에서 반드시

보관하여야 하는 파일은 무엇일까 ?

5

· (A) 소스 파일 ! 소스 파일만 있으면 컴파일러를 수행시켜서 오브젝트 파일 , 실행 파일은 만들 수 있다 .

· 하지만 소스 파일을 삭제하면 컴파일이 불가능하다 . 따라서 반드시 소스 파일은 잘 보관하여야 한다 . Visual C++ 에서는 프로젝트와 워크스페이스 파일도 같이 보관하는 것이 좋다 . 이러한 파일들은 다시 만들 수도 있지만 번거로운 작업이 된다 .

Page 6: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

워크스페이스와 프로젝트

워크스페이스 (workspace); 작업 공간 , 여러 개의 프로젝트가

있을 수 있다 .

프로젝트 (project): 하나의 실행 파일을 만들기 위하여 필요한

파일들의 그룹

6

워크스페이스 : 여러 개의 프로젝트들을 가지고 있는 작업공간

워크스페이스 : 여러 개의 프로젝트들을 가지고 있는 작업공간

프로젝트 : 실행 파일을 만들기 위하여 필요한 파일들

프로젝트 : 실행 파일을 만들기 위하여 필요한 파일들

Page 7: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

첫 번째 프로그램

7

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}Hello World!

Page 8: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

두 번째 프로그램

사용 IDE 툴 : 코드블럭 , 비쥬얼스튜디어

편한 거 쓰세요

#include <stdio.h>

int main(){

printf(" 코더에게는 작은 한걸음이지만 프로그래머에게는 ");printf(" 거대한 도약이다 !\n");return 0;

}

Page 9: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로그램 코드 입력 : Code:Blocks 에서

프로그램을 생성하기 위하여 [File] 메뉴를 클릭하고 [New] 를

선택한다 . 다음 화면에서 [Empty File] 을 선택하여 코드를 입력한다 .

Page 10: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

컴파일

파일에 위의 코드를 입력한 후에는 컴파일 해야 한다 . 컴파일 해서 실행

파일을 생성하는 것을 빌드한다고 한다 . 화면 왼쪽 상단의 노란색 기어

모양의 [Build] 아이콘을 클릭한다 .

[Build] 아이콘을 클릭하면 Code::Blocks 은 방금 입력한 파일을 어떤

이름으로 저장할 것인지를 먼저 물어보는데 이때 hello.c 라는 이름으로

저장하자 .

Page 11: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

실행

[Build] 아이콘 오른쪽에 있는 녹색 화살표 아이콘을 클릭해서

프로그램을 실행

Page 12: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

비주얼 스튜디오 2013

통합 개발 환경 (IDE: integrated development envi-

ronment): 프로그램 개발에 필수적인 에디터 , 컴파일러 ,

디버거를 하나로 통합한 소프트웨어 도구이다 .

마이크로소프트사가 제공하는 통합 개발 환경

마이크로소프트사에서는 학생 및 초급자를 위하여 Express

버전을 무료로 제공

Page 13: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로그램 작성 과정

프로젝트 생성소스 파일을 프로젝트에

추가

Page 14: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로젝트

프로젝트 (project): 서로 관련 있는 소스 파일들을 하나로 묶어

주는 컨테이너

Page 15: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로젝트 생성

Page 16: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로젝트 속성 설정

Page 17: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로젝트 속성 설정

응용 프로그램 설정에서 반드시 SDL 체크를 해제할 것 !

-> 해제하지 않으면 여러 가지 오류가 발생함 !

Page 18: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

프로젝트에 소스 파일 추가

솔루션 탐색기를 왼편에 붙이려면 , [ 도구 ]- 아래편 [ 환경설정내보내기 ]- 사용환경을 C++ 로 선택합니다 .

Page 19: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

파일 확장자를 .c 로 한다 .

Page 20: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

소스 코드 입력

Page 21: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

컴파일

컴파일 : 소스 파일을 기계어 파일로 만드는 과정

Page 22: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

빌드

Page 23: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

실행

Page 24: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

실행 결과

Page 25: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오브젝트 파일과 실행 파일이 생성된 것을 확인할 수 있다 .

오브젝트 파일과 실행 파일이 생성된 것을 확인할 수 있다 .

오브젝트 파일과 실행 파일의 생성

25

Page 26: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

C 프로그램 관찰

많은 중괄호 { }, 소괄호 ( ), 백슬래시 (\) 의 사용

C 는 철자에 민감

C 프로그램에서는 단어와 단어 사이에 자유롭게 공백을 넣을 수

있다 .

C 에서 명령어와 함수를 입력할 때는 소문자만을 사용해야 한다 .

별거 아닌 것 같지만 들여쓰기 잘하자 .!

Page 27: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

함수는 프로그램을 이루는 블록

C 프로그램은 여러 개의 함수로 이루어진다 -> 함수는 다시

여러 개의 문장들로 이루어진다 -> 문장들은 순차적으로

실행되면서 작업을 수행한다 .

함수

Page 28: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

main() 함수

main() 은 명령어가 아니라 함수이다 .

함수는 하나의 작업을 수행하는 루틴이다 .

모든 C 프로그램은 항상 main() 함수를 포함해야 한다 .

#include <stdio.h>int main(){

printf(" 코더에게는 작은 한걸음이지만 프로그래머에게는 ");printf(" 거대한 도약이다 !\n");return 0;

}

Page 29: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

데이터의 종류

문자

정수

부동소수점수 ( 실수라고도 불린다 .)

Page 30: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

문자

문자는 컴퓨터가 표현할 수 있는 하나의 글자이다 .

C 의 모든 문자들은 작은따옴표로 감싼다 .

‘A’ ‘a’ ‘4’ ‘%’ ‘Q’ ‘!’ ‘ +’ ‘=‘ ‘ ]’

Page 31: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

문자열

만약 한 문자 이상을 지정할 필요가 있다면 큰따옴표를 사용해서

문자들을 감싸면 된다 .

이것은 문자열 (string) 이라고 불린다 .

다음은 C 문자열이다 .

“C is fun to learn.”

Page 32: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

숫자

정수 (integer) 가 있다 .

부동소수점수 (floating-point number)

10 54 0 –121 –68 752

547.43 0.0 0.44384 9.1923 –168.470 .22

Page 33: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

정수 vs 부동소수점수

정수를 사용할 것인가 아니면 부동소수점수를 사용할 것인가는

프로그램이 작업하는 데이터에 달려있다 .

Page 34: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

마무리 예제

/* 문자 , 정수 , 부동소수점수를 사용하는 프로그램 */#include <stdio.h>Int main(){

printf(“ 나는 현재 %c 프로그래밍 언어를 학습하고 있다 .", 'C');printf(" 나는 지금 막 %d 장을 끝냈다 .", 2);printf(" 나는 현재 %.1f 퍼센트 준비되어 있다 . ", 99.9);printf(" 다음 챕터 학습을 위하여 !");return 0;

}

Page 35: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

출력 결과

나는 현재 C 프로그래밍 언어를 학습하고 있다 .나는 지금 막 2 장을 끝냈다 .나는 현재 99.9 퍼센트 준비되어 있다 . 다음 챕터 학습을 위하여 !

Page 36: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Lab

다음과 같은 실행 결과를 출력하도록 프로그램을 작성하여 보자 .

프로그램에서 각종 상수값들을 printf() 함수의 변환 문자를

사용하여서 출력해본다 .

빛의 속도는 0.000000km/s 입니다 .중력 가속도는 9.800000m/s 제곱입니다 .나는 20 살이고 키는 175.500000 입니다 .나의 이름은 김철수입니다 .나는 현재 4 장까지 학습을 끝냈습니다 .계속하려면 아무 키나 누르십시오 . . .

Page 37: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Hint

기본적인 형식 지정자는 다음과 같은 것들이 있다 .

Page 38: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

마무리 예제#include <stdio.h>

int main(){

printf(" 빛의 속도는 %fkm/s 입니다 . ", 300000);printf(" 중력 가속도는 %fm/s 제곱입니다 . ", 9.8);

printf(" 나는 %d 살이고 키는 %f 입니다 . ", 20, 175.5);printf(" 나의 이름은 %s 입니다 . ", " 김철수 ");printf(" 나는 현재 %d 장까지 학습을 끝냈습니다 . ", 4);

return 0;}

Page 39: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

학습 정리

C 함수 이름 다음에는 반드시 소괄호를 붙여야 한다 . C 프로그램은

여러 개의 함수로 이루어지는데 C 프로그램에서 main() 함수는 항상

필요하다 .

C 는 다른 어떤 함수들보다 main() 을 가장 먼저 실행한다 .

가독성을 위하여 C 프로그램에는 여분의 공백을 넣어도 된다 .

정수가 0 이 아니면 앞에 0 을 붙이지 말자 .

문자는 반드시 작은따옴표로 둘러싸야 하고 문자열은 큰따옴표로

둘러싸야 한다 . 정수는 소수점을 가지지 않는 수이고 부동소수점수는

소수점을 가진다 .

Page 40: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Supplement

40

Page 41: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

첫번째 프로그램의 설명

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}

41

Hello World!

Page 42: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

주석

주석 (comment): 프로그램에 대한 설명

42

/* 한줄로된주석 */

int main(void) /* 줄의일부분인주석 */

/* 여러줄로된주석 */

/* 한줄로된주석 */

int main(void) /* 줄의일부분인주석 */

/* 여러줄로된주석 */

주석은 프로그램을 설명하는 글입니다 .

Page 43: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

헤더 파일 포함

#include 는 소스 코드 안에 특정 파일을 현재의 위치에 포함

헤더 파일 (header file): 컴파일러가 필요로 하는 정보를 가지고

있는 파일

stdio.h: standard input output header file

주의 !: 전처리기 지시자 문장 끝에는 세미콜론을 붙이면 안 된

다 .

43

#include <stdio.h>#include <stdio.h>

Page 44: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

함수

12 xy

44

함수 (function): 특정한 작업을

수행하기 위하여 작성된 독립적인

코드

(참고 ) 수학적인 함수

프로그램 = 함수의 집합

main() 은 가장 먼저 수행되는 함수

int main(void)int main(void)

함수

입력

출력

Page 45: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

문장

함수는 여러 개의 문장으로 이루어진다 .

문장들은 순차적으로 실행된다 .

45

Page 46: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Hello World!

출력 함수 printf()

printf() 는 컴파일러가 제공하는 함수로서 출력을 담당합니다 .

큰따옴표 안의 문자열을 화면에 출력합니다 .

46

printf(“Hello World!”);printf(“Hello World!”);

Page 47: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

함수 반환문

return 은 함수의 결과값을 외부로 반환합니다 .

47

return 0;return 0;

main()

printf(“Hello World!”);return 0;

운영 체제

운영 체제

Page 48: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

응용 프로그램 #1

다음과 같은 출력을 가지는 프로그램을 제작하여 보자 .

48

Hello World!Kim ChulSoo

Page 49: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

첫번째 버전

문장들은 순차적으로 실행된다는 사실 이용

49

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");printf(“Kim ChulSoo");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");printf(“Kim ChulSoo");return 0;

}

Hello World!Kim ChulSoo

우리가 원하는

결과가 아님 !

Page 50: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

줄바꿈 문자 \n

줄바꿈 문자인 \n 은 화면에서 커서는 다음줄로 이동하게 한다 .

50

Page 51: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

변경된 프로그램

줄바꿈 문자를 포함하면 우리가 원하던 결과가 된다 .

51

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n");printf(“Kim ChulSoo");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n");printf(“Kim ChulSoo");return 0;

}

Hello World!Kim ChulSoo

Page 52: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

응용 프로그램 #2

다음과 같은 출력을 가지는 프로그램을 제작하여 보자 .

52

3X1=33X2=63X3=9

Page 53: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

응용 프로그램

역시 문장들은 순차적으로 수행된다는 점을 이용한다 .

53

/* 첫번째 프로그램의 응용 */#include <stdio.h>

int main(void){

printf("3 X 1 = 3\n");printf("3 X 2 = 6\n");printf("3 X 3 = 9\n");

return 0;}

/* 첫번째 프로그램의 응용 */#include <stdio.h>

int main(void){

printf("3 X 1 = 3\n");printf("3 X 2 = 6\n");printf("3 X 3 = 9\n");

return 0;}

Page 54: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 수정 및 디버깅

컴파일이나 실행 시에 오류가 발생할 수 있다 .

에러와 경고

에러 (error): 심각한 오류

경고 (warning): 경미한 오류

오류의 종류

컴파일 시간 오류 : 대부분 문법적인 오류

실행 시간 오류 : 실행 중에 0 으로 나누는 연산 같은 오류

논리 오류 : 논리적으로 잘못되어서 결과가 의도했던 대로 나오지

않는 오류

54

Page 55: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 메시지의 분석

55

Compiling... test.cc:\cprogram\test\test.c(7) : error C2143: syntax error : missing ';' before 'return' Error executing cl.exe.

에러가 발견된 소스 파일명

에러가 발견된 라인의 번호 문법적인 오류(syntax error)가 있었음을 나타낸다.

return 앞에 ;를 빠뜨렸다는의미이다.

Page 56: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 수정 과정

56

ERROR!!소스파일

test.c

소스파일

test.c

오브젝트파일

test.obj

오브젝트파일

test.obj

실행파일

test.exe

실행파일

test.exe

컴파일러(compiler)

컴파일러(compiler)

링커(linker)

링커(linker)

실행(execution)

실행(execution)

실행 시간 오류실행 시간 오류

논리 오류논리 오류컴파일 시간 오류컴파일 시간 오류

Page 57: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 #1

57

/* 에러가 발생하는 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n")return 0;

}

/* 에러가 발생하는 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n")return 0;

}

--------------------Configuration: test - Win32 Debug--------------------Compiling...test.cC:\PROJECT\test\test.c(7) : error C2143: syntax error : missing ';' before 'return'Error executing cl.exe.

test.exe - 1 error(s), 0 warning(s)

문장의 끝에 ; 이 없음 !!

Page 58: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 #2

58

/* 에러가발생하는프로그램 * /#include <stdio.h>

int main(void){

printf("Hello World!\n")return 0;

}

/* 에러가발생하는프로그램 * /#include <stdio.h>

int main(void){

printf("Hello World!\n")return 0;

}

--------------------Configuration: test - Win32 Debug--------------------Compiling...test.cc:\project\test\test.c(9) : fatal error C1071: unexpected end of file found in commentError executing cl.exe.

test.exe - 1 error(s), 0 warning(s)

* 과 / 이 떨어져 있음-> 전체가 주석처리됨

Page 59: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 #3

59

/* 첫번째 프로그램 */#include <stdio,h>

int main(void){

print("Hello World!");return 0;

}

/* 첫번째 프로그램 */#include <stdio,h>

int main(void){

print("Hello World!");return 0;

}

--------------------Configuration: test - Win32 Debug--------------------Compiling...test.cc:\project\test\test.c(2) : fatal error C1083: Cannot open include file: 'stdio,h': No such file or directory

stdio.h 로 적어주어야

Page 60: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

오류 #4

60

/* 첫번째프로그램 */#include <stdio.h>

int main(void){

print("Hello World!");return 0;

}

/* 첫번째프로그램 */#include <stdio.h>

int main(void){

print("Hello World!");return 0;

}

-------------------Configuration: test - Win32 Debug-------------------- Compiling... test.c C:\CPROGRAM\test\test.c(6) : warning C4013: 'print' undefined; assuming extern returning int Linking... test.obj : error LNK2001: unresolved external symbol _print Debug/test.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.

test.exe - 2 error(s), 1 warning(s)

print 가 아니라

printf임

Page 61: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

논리 오류

다음과 같은 출력을 가지는 프로그램을 작성하여 보자 .

61

Hello World! Good Morning

Page 62: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

논리 오류가 존재하는 프로그램

62

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n"); // ①printf("Good Morning\n");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!\n"); // ①printf("Good Morning\n");return 0;

}

Hello World!Good Morning

줄바꿈 문자인 \n때문에 줄이 바뀌었음 .

Page 63: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

논리 오류가 수정된 프로그램

63

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World! "); // ①printf("Good Morning\n");return 0;

}

/* 첫번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World! "); // ①printf("Good Morning\n");return 0;

}

Hello World! Good Morning

논리 오류 수정 !!

Page 64: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

디버깅

디버깅 : 논리 오류를 찾는 과정

64

Page 65: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

디버거의 명령어 정의

F5 (Go): 실행

F10 (Step Over): 한 문장씩 실행 ( 함수도 하나의 문장 취급 )

F11 (Step Into): 한 문장씩 실행 ( 함수 안으로 진입 )

F9 (Breakpoint): 현재 문장에 중단점을 설정

65

Page 66: 컴퓨터 프로그래밍  2  Week 1 :  프로그래밍 개발과정

Q & A

66


Recommended