프로그래밍 1 1 Chapter 1. A Tutorial Introduction March, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj
이장의강의목표 2 컴퓨터구조를이해한다. 하드웨어와소프트웨어를이해한다. 개발환경에대한이해 C 프로그램을컴파일하는방법을이해한다. C 언어의기본요소를이해 printf 함수이해이장의결론
컴퓨터구조 (1/5) 3 Hardware / Software 소프트웨어 하드웨어
컴퓨터구조 (1/5) 4 하드웨어 Secondary storage Main memory Input device Output device CPU
컴퓨터구조 (2/4) 5 하드웨어구성요소 중앙처리장치 (central processing unit) 컴퓨터의두뇌 : 데이터연산, 논리연산 (ALU), 제어 (control Unit) 레지스터 (register) x86, ARM, PPC, Sparc, Alpha, MIPS, SH4, XScale, 메인메모리 (memory) : 휘발성 메모리셀 : 메모리내의개별적인저장공간 바이트 (byte) 와비트 (bit) Address Memory Data 저장장치 (storage device) : 비휘발성 디스크, CD-ROM, 플로피, Flash Memory(NOR, NAND 등 ) 입출력장치 입력장치 (input device) : 키보드, 마우스, Key Pad, Touch Screen 출력장치 (output device) : 모니터, 프린터, LCD 통신장치 모뎀 (modem), 이더넷 (Ethernet), IrDA, CDMA, Bluetooth
컴퓨터구조 (3/4) 6 소프트웨어 사용자 응용프로그램 운영체제 하드웨어
컴퓨터구조 (4/4) 7 소프트웨어구성요소 운영체제 자원관리자 (resource manager) 물리적자원 / 추상적자원응용프로그램 사용자의특정목적을달성하게하는소프트웨어 워드프로세서, 게임소프트웨어 데이터베이스 컴파일러프로그램언어
프로그래밍언어 8 프로그래밍언어 개발자와컴퓨터간에약속구문 (syntax) 과의미 (semantics) 로구성 프로그래밍언어구분 기계어 (machine language): 컴퓨터가바로실행가능 이진 (binary) 코드, CPU의종류에따라다름어셈블리어 (assembly language) 기계어명령어와 1:1 대응 어셈블러 (assembler) 고급언어 (high-level language) 하나의명령문이어셈블리어명령문여러개에해당 컴파일러 (compiler) 또는인터프리터 (interpreter) C, C++, Java, Basic, Pascal, Perl,
Overall of Compilation Compiler 9 Editor C file Other Object & Library Compiler ASM file Linker Executable File Error Msg Assembler Object file Loader Input Data Results Debugger
리눅스환경 (1/4) 10 Standalone (usually with multi-boot) Virtualization Client-Server In our course Client: terminal emulator (telnet client, putty, ) Server: Linux system (PC) IP: 220.149.236.4
리눅스환경 (2/4) 11 Client telnet, ssh, ping, putty, SecureCRT, mlterm,
리눅스환경 (3/4) 12 Putty with ssh IP: 220.149.236.4 (type 이 ssh 인지, port 가 22 인지확인 ) Translation: choose UTF-8
리눅스환경 (4/4) 13 Login and shell ID: sys123456 ( 학번 ) Default passwd: ********* (passwd 명령을사용하여바꿀것 )
Command Overview of UNIX/Linux Commands 14
man Utility 15 man : Displays the System Manual $ man passwd $ man 5 passwd Section Finding manual on 1 User Commands 2 System Calls 3 Subroutines 4 Devices 5 File Formats 6 Games 7 Miscellaneous 8 System Administration 9 Kernel 10 New
기본명령어 (1/4) 16 file related command 파일생성 vi, gcc, mknod, 파일복사 / 이동 cp, mv, ln, 파일삭제 rm 파일이름보기 ls 파일내용보기 more, cat, head, tail, objdump, hexdump 파일속성제어 chmod, chown, chgrp, touch 파일 redirection >
기본명령어 (2/4) 17 디렉터리 (directory) a set of files 계층구조를제공 home directory, root directory, current directory relative path, absolute path directory related command 생성 mkdir 이동 cd 삭제 rmdir 현재위치 pwd
기본명령어 (3/4) 18 vi(visual interface) 파일편집기 UNIX 시스템에서사용하는가장일반적인편집기텍스트기반편집강력한기능제공 3가지기본모드제공 명령모드 입력모드 last-line 모드
기본명령어 (4/4) 19 파일속성제어 파일마다 permission 과 owner 존재
VIM (1/5) 20 실행 $ vi [option] filename vi 수행 명령모드 입력모드 I(i)nsert A(a)ppend O(o)pen R(r)eplace Change Command mode Colon(:) slash(/) escape return Last Line mode last line 모드 Input mode 종료 :wq, :x 문서저장후종료 :q! 문서를저장하지않고종료
커서이동명령 VIM (2/5) 21 h, j, k, l 좌, 하, 상, 우 { 한문단위로이동 ( 현재문장의처음으로 } 한문단아래로이동 ) 현재문장의끝으로 ^ or 0 행의시작으로이동 H 화면맨윗줄로이동 $ 행의끝으로이동 M 화면중간줄로이동 gg 문서의시작으로이동 L 화면맨아랫줄로이동 G 문서의끝으로이동 w 다음단어로이동 :n n 행으로이동 b 이전단어로이동 ng n 행으로이동 CTRL+f 한화면아래로 z enter 현재줄을화면의처음으로 CTRL+d 반화면아래로 Nz enter N 번째줄을화면의처음으로 CTRL+b 한화면위로 z. 커서 line을화면중앙으로 CTRL+u 반화면위로 Nz. N 번째줄을화면중앙으로 CTRL+e 화면한줄아래로 z- 현재줄을화면맨아래로 CTRL+y 화면한줄위로 Nz- N 번째줄을화면맨아래로
VIM (3/5) 22 입력모드전환명령 i 커서위치부터입력 o 커서의다음줄에입력 I 커서행맨앞부터입력 O 커서의이전줄에입력 a 커서위치다음부터입력 s 커서위치한글자지우고입력 A 커서행맨뒤부터입력 S 커서위치한줄지우고입력 r 현재커서위치문자를다른문자로변경 C 현재커서위치에서뒤쪽줄을삭제하고입력 R 현재커서위치부터 replace 실행취소 u : 바로전에수행한 vi 명령모드명령어취소 U : 헌재줄에서수행한모든 vi 명령모드명령어취소줄을변경하면취소불가
복사및삭제 VIM (4/5) 23 x or dl 커서위치한글자삭제 yy, Y 커서위치줄을버퍼로복사 X or dh 커서앞글자삭제 Nyy or NY N 줄을버퍼로복사 nx 커서앞 N개글자삭제 u 되돌리기 dw 커서위치단어삭제 p 버퍼내용을커서아래줄에추가 d$ or D 커서위치부터행끝까지삭제 P 버퍼내용을커서위줄에추가 d0 커서위치앞부터행처음까지삭제 dj 커서가있는행과그다음행삭제 dd 커서가있는행삭제 dk 커서가있는행과그이전행삭제 저장및종료 :w 저장 :q 종료 :w! 강제저장 :q! 강제종료 :w filename 현재파일 filename으로저장 :e 현재파일불러옴 :w >> filename filename에덧붙여서저장 :e filename filename 파일불러옴 :wqorzzor:x 저장후종료 :wq! 강제저장후종료
VIM (5/5) 24 그밖의유용한기능 v : block 지정 ctrl + w n: 가로창분할 :%s/old/new/g : old문자열을 new문자열로치환 :2,6s/old/new/g : 2행과 4행사이의 old문자열을 new문자열로치환 / : 문자열검색 n은다음문자, N인이전문자
소스코드컴파일 25 컴파일러의구분 IDE (Integrated Development Environments): 통합개발환경 Command line Compiler 본강의에서사용할컴파일러 GNU gcc, 그외Microsoft Visual C++ (command line 명령은 cl), Turbo C/C++, Borland C/C++,
Compilation in Linux 26 Overall
C 프로그램구성요소 (1/6) 27 C 프로그램의특징 System Software 개발도중프로그래머에의해만들어짐 High-level과 Low-level 언어의장점포함 (middle-level lang.) Brevity ( 간결성 ) Generality ( 범용성 ) C++, Java의기반알고리즘기술언어. 프로그래머간의대화도구
C 프로그램구성요소 (2/6) 28 기본요소 변수와유형 확장요소 연산자와수식 함수 배열과포인터 구조체 입출력 문장
C 프로그램구성요소 (3/6) 29 comment ( 주석 ) keyword hello.c /* First Example of C */ #include <stdio.h> preprocessor directive header file int main(void) { main 함수 printf("hello world~\n"); return 0; } 함수인자함수의시작과끝라이브러리함수호출문 문장의끝은항상 ; 선행처리지시자 (Preprocessor Directive) 문장은 ; 으로끝나지않는다.
C 프로그램구성요소 (4/6) 30 프로그램 모든 C 프로그램은함수들로구성 ( 최소한 main 함수하나는포함 ) 함수 { } 함수는문장또는연관된문장의집합 (block) 으로구성 함수이름, 반환자료형, 매개변수 ( 인수, 인자 ) 함수이름에는알파벳, 숫자, 특수문자로는 _ 만사용가능, 숫자가첫문자일수는없음 ( 실제이부분은 compiler dependent) caller, callee /* 함수프로토타입 */ ret-type function-name(param-lists) { statement sequence }
C 프로그램구성요소 (5/6) 31 문장 프로그램의수행동작 (operation) 을의미모든문장은 ;( 세미콜론 ) 으로끝남문장은수식과연산자, 그리고 C 키워드로구성문장의종류에는제어문, 반복문, 치환문, 선택문, 선언문등이존재 수식과연산자 변수 수식은변수 ( 또는상수 ) 와연산자로구성연산자에는산술, 논리, 관계, 치환, 비트연산자등이존재 메모리의특정주소를이름으로접근가능하도록함 유형 (type) 을갖는다.
C 프로그램구성요소 (6/6) 32 라이브러리함수 다양한부가기능을제공하는함수집합 입출력 메모리할당 스트링 ( 문자열 ) 조작 수학함수 통신 C 는전처리기사용 선행처리지시자 (preprocessor directive) #include #define 조건컴파일 인라인처리 위두가지의사용이 C 를매우간결하면서매력적인언어로만들었다
프로그램에주석달기 33 주석 : /* */, 일부컴파일러에서는 // 도지원 주석의중요성 여러개발자가각자가맡은부분을프로그램한이후통합하였다. 다음문제가발생했을때이중가장벌금을많이내야할개발자는? 컴파일시에오류를야기하는프로그램개발자 수행중에버그를야기시킨개발자 프로그램에주석을달지않는개발자 ( 프로그램은잘동작함 ) 기한내에완료하지못한개발자 주석인없는프로그램보고서는제출하지않은것과동일!!! 주석에는날짜, 작성자, 프로그램명세 ( 설계서수준 ), 필요할경우각문장별주석기술 Indentation 도반드시지킬것
표준라이브러리와 printf 함수 (1/2) 34 printf 사용예 PrintfOne.c (p. 43) #include <stdio.h> int main(void) { printf("hello Everybody\n"); printf("%d\n", 1234); printf("%d %d\n", 10, 20); return 0; } Results Hello Everybody 1234 10 20 printf( ) 함수 첫번째인자내용을화면에출력 \n : 줄바꿈 (escape sequence) %d : 부호가있는정수출력 ( 서식문자 )
표준라이브러리와 printf 함수 (2/2) 35 printf 사용예 printf 내에서인자는, 로구분 printf( 인자 1, 인자 2); printf("%d\n",1234); printf("1234\n"); printf( 인자 1, 인자 2, 인자 3); printf("%d %d\n", 10, 20); printf("10 20\n"); Results 1234 10 20
요약 36 컴퓨터구조 리눅스정의, 접근방법이해 파일, 프로세스관련명령어이해 컴파일관련시스템프로그램이해 C 언어의기본요소를이해 함수, 헤더파일, 문장구분 표준라이브러리 printf 함수이해 기본사용법 과제 #1. - printf 함수와 %d 서식문자를사용하여구구단 2 단을출력하시오. - 10 개이상리눅스명령어사용하기 (vim 과 gcc 포함 ). - 보고서에는반드시본인 ID 가있어야함 (eg. whoami, date 사용 )
( 부록 ) Windows 프로그램컴파일과정 37 과정 1: 프로그램작성
( 부록 ) Windows 프로그램컴파일과정 38 과정 2: 컴파일 (compile) cl (MS Visual C++), bcc (Borland C++), gcc (Linux), tc (Turbo C)
( 부록 ) Windows 프로그램컴파일과정 39 과정 3: 수행 prompt> cl /help 사용해볼것. C:\Program Files (x86)\microsoft Visual Studio 12.0\VC\bin
( 부록 ) Windows 프로그램컴파일과정 40 What is Visual Studio? An integrated development environment (IDE) from Microsoft Microsoft Windows, as well as web sites, web applications and web services C, C++ and C++/CLI (via Visual C++), VB.NET (via Visual Basic.NET), C# (via Visual C#), and F# <https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs>
( 부록 ) Windows 프로그램컴파일과정 41 IDE (Integrated Development Environment) 사용 <Visual Studio 2013>
( 부록 ) Windows 프로그램컴파일과정 42 IDE 사용 (project 생성 ) New Project
( 부록 ) Windows 프로그램컴파일과정 43 IDE 사용 (project 생성 ) Visual C++ Win32 Win32 Console Application
( 부록 ) Windows 프로그램컴파일과정 44 IDE 사용 (project 생성 ) Select Next
( 부록 ) Windows 프로그램컴파일과정 45 IDE 사용 (project 생성 ) Select Next
( 부록 ) Windows 프로그램컴파일과정 46 IDE 사용 (project 생성 ) Source Files Add New Item
( 부록 ) Windows 프로그램컴파일과정 47 IDE 사용 (project 생성 ) Select C++ File (.cpp) Enter new file name (.c).c or.cpp?
( 부록 ) Windows 프로그램컴파일과정 48 IDE 사용 (project 생성 ) Enter source code /* Description : The First Example */ /* Date : March 1. 2015 */ /* Author : Jung Kyu Park */ #include <stdio.h> int main(void) { printf("hello world~ written in IDE\n"); }
( 부록 ) Windows 프로그램컴파일과정 49 프로젝트컴파일 : F7 ( 파일컴파일 : Ctrl+F7) 수행 : Ctrl+F5 or 명령프롬프트
( 부록 ) Windows 프로그램컴파일과정 50 F7 로컴파일이안될때 Tool Option (Environment Keyboard Visual C++ 6)
( 부록 ) Windows 프로그램컴파일과정 51 IDE 사용 (project 생성 ) Check error
( 부록 ) Windows 프로그램컴파일과정 52 결과보기 : Method 1 system( pause ) 넣기 /* Description : The First Example */ /* Date : March 1. 2015 */ /* Author : Jung Kyu Park */ #include <stdio.h> main() { printf("hello world~ written in IDE\n"); system("pause"); }
( 부록 ) Windows 프로그램컴파일과정 53 결과보기 : Method 2 Project Properties (ALT+F7) Configuration Properties Linker System Subsystem Console (SUBSYSTEM:CONSOLE)
( 부록 ) Windows 프로그램컴파일과정정리 54 시작 step 1: MS Visual C++ 실행프로젝트생성 step 2: [File]-[New] 선택 step 3: project 생성 Visual C++, Win32, Win32 Console Application step 4: Console Application, An empty project step 5: project 생성완료 *.sln 프로젝트파일생성됨파일생성 step 6: [Project]-[Add New Items ] or Right Click on Source Files step 7: C++ File (.cpp) 프로그램작성 step 8: 프로그램작성. [File]-[Save] 컴파일 step 9: [Build]-[Build Solution] (F7) step 10: Output windows 상에서 error, warning 확인수행 step 11: [Debug]-[Start without Debugging] (Ctrl+F5) step 12: 실행결과확인