Transcript 윈도우 프로그래밍
프로그래밍1 및 실습 (C언어) - 0장 및 1장- 숭실대학교 컴퓨터학부 2007년 1학기 김완섭 [email protected] 이 과목에서는 무엇을 배우는가? • 이 과목에서는 무엇을 배우는가? – C언어를 배운다. – 프로그래밍을 배운다. • 궁금한 내용들 – – – – – 왜 언어 (Language)라고 하는가 ? 왜 언어의 이름이 C 일까? 프로그래밍 ? 프로그램과 소프트웨어 ? 차이점이 무엇인가? 프로그래머? 개발자(Developer)? 2 숭실대학교 컴퓨터학부 왜 이름이 C일까? (p.1) • ABCD? • B언어 – 1967년, Martin Richards에 의해 개발된 언어 – BCPL 언어에 기반을 두고 있다. • C언어 – 1972년 개발된 Dennis Ritchie에 의해 만들어진 언어 – UNIX 운영체제를 위한 시스템 언어로 개발됨 • C++ 언어 – C에 기반을 두고 있다. • JAVA 언어 – C++에 기반을 두고 있다. 3 숭실대학교 컴퓨터학부 프로그램과 소프트웨어 • 프로그램(Program) ? – 프로그램은 컴퓨터에게 어떤 일의 수행을 지시하는 명령어(instruction)의 집 합이다. 쉽게 말하면, 실행파일들. • 소프트웨어(Software) ? – 일반적으로 프로그램과 같은 의미로 사용된다. – 사전 : 컴퓨터 프로그램 및 그와 관련된 문서들을 통들어 이르는 말. 컴퓨터 를 관리하는 시스템 프로그램과 문제 해결에 이용되는 다양한 형태의 응용 프로그램으로 나뉜다. • 예) – 아래아 한글 (워드 프로세서) – 프로그램 : 실행파일들 – 소프트웨어 : 실행파일들 + 매뉴얼 등 4 숭실대학교 컴퓨터학부 용어정리 • 컴퓨터에서 특정 목적의 일을 수행하는 프로그램을 만드는 과정을 프로 그래밍한다 라고 한다. • 이러한 프로그램을 만드는 사람을 프로그램 개발자(Developer) 또는 프 로그래머(Programmer)라고 한다. • 개발자란 그 범위가 상당히 넓을 수 있고, 프로그래머란 개발자 중에서 도 프로그램 원시 코드를 만드는 개발자를 의미한다. 5 숭실대학교 컴퓨터학부 C 프로그래밍을 왜 배우는가? • 컴퓨터란 무엇인가? – Compute(계산)하는 기계 – 더하기, 빼기 등의 단순한 숫자연산을 처리하는 기계이다. – 컴퓨터에게 어떤 일을 시키기 위해서는 프로그래밍을 배워야 한다. • 프로그래밍 언어의 종류 – Assembly, Cobol, Fortran, Basic, C, C++, JAVA 등의 다양한 언어 – 각 언어의 특징, 장단점이 있다. – 적절한 언어 및 개발 툴을 선택하여 사용한다. • 개발툴 – C언어 : Visual C++, Borland C++, Turbo C++ – JAVA 언어 : Jbuilder, Eclipse, Kawa 등등 6 숭실대학교 컴퓨터학부 0장. 영으로부터 시작 (p.1) • 왜 이 책은 1장이 아니라 0장에서부터 시작하는가? • C언어에서 0이라는 숫자가 갖는 특별한 의미 – C에서는 1이 아니라 0이 시작이다. – C에서 0은 거짓을 의미하고 0이외의 숫자는 참을 의미한다. – C에서 포인터의 널 값은 0으로 나타낸다. 7 숭실대학교 컴퓨터학부 0.1 왜 C언어인가? (P.2) • C는 작은 언어이다. ( 외울 것이 적고 배우기 쉽다. ) • 대부분의 프로그램이 C언어로 만들어졌다. • C는 이식성이 좋다. • C는 간결하다. • C는 모듈성이 좋다. • C는 C++과 Java의 기반이 되는 언어이다. • (참고) 각각의 장점에 대해서 책을 참고하시오. 8 숭실대학교 컴퓨터학부 0.2 ANSI C 표준 (p.3) • ANSI ? – American National Standards Institute – 미국 표준 협회 • ANSI C – 미국표준협회(ANSI)에서 표준화(약속) 한 C언어이다. • ANSI/ISO C – ISO (International Organization for Standardization) – 국제적으로 공인된 표준이다. • 개발회사들은 이 표준에 맞추어 컴파일러를 개발한다. 9 숭실대학교 컴퓨터학부 프로그래밍의 절차 • 아래와 같은 순서로 프로그램을 작성한다. 1단계 소스코드 작성 2단계 컴파일 3단계 디버그 10 4단계 실행 숭실대학교 컴퓨터학부 프로그래밍의 절차 • 좀 더 정확하게 설명하면 – – – – 소스코드 작성 컴파일 (by 컴파일러) 링크 (by 링커) 실행파일 생성 11 숭실대학교 컴퓨터학부 프로그래밍의 절차 : 컴파일 • 컴파일 • 목적파일의 생성, Ctrl+F7 • [Build] 메뉴에서 [Compile HelloWorld.c] 라는 메뉴 실행 12 숭실대학교 컴퓨터학부 프로그래밍의 절차 : 디버깅(에러 수정) • 에러 – 프로그램 과정에서 나타나는 문제를 에러(Error) – 에러는 크게 컴파일 시간에 발생하는 에러와 실행 시간에 발생한 에러로 구 분 • 컴파일 시간에 발생하는 에러를 “컴파일 (시간) 에러” • 실행 시간에 발생한 에러는 “실행 (시간) 에러 – 실행 시간 에러는 넓은 의미로 링크 과정과 실행 과정에서 발생하는 에러로 볼 수 있음 • 디버깅 – 컴파일 에러나 실행 에러를 수정하는 과정을 디버깅(debugging) • 디버깅이란 버그를 잡는다는 의미로 여기서 버그란 바로 에러를 의미 13 숭실대학교 컴퓨터학부 통합개발환경 • 통합개발환경 – 컴파일러, 디버거, 링커, 에디터 등을 통합적으로 제공하는 개발 환경 을 통합 개발 환경(Integrated Development Environments) – 통합 개발 환경의 대표적 제품이 MS의 비쥬얼 C++(MS Visual C++) • Visual C++ – 프로그램 언어 C와 C++를 이용하여 응용 프로그램을 개발할 수 있는 개발 도구 – 이용할 버전은 Microsoft Visual C++ 6.0 Professional Edition 14 숭실대학교 컴퓨터학부 프로그래밍의 예 : 1단계 소스코드 작성 • 화면에 Hello World 라고 출력하는 간단한 프로그램을 작성. – Visual C++ 프로그램을 사용한다. (또는 UNIX에서 vi 편집기 사용) – HelloWorld.c 라는 이름으로 파일을 생성한다. – 아래와 동일하게 입력한다. #include <stdio.h> int main(void) { printf( “ Hello World \n"); return 0; } 15 숭실대학교 컴퓨터학부 프로그래밍의 예 : 2단계 컴파일 • UNIX 환경이라면, – $ cc HellowWorld.c • 윈도우 환경에서 Visual C++을 사용하는 경우라면 – 단축키로 [Ctrl+F5] – 메뉴에서 [Build] – [Execute HelloWorld.exe]를 실행 16 숭실대학교 컴퓨터학부 프로그래밍의 예 : 3단계 디버그(에러수정) • Error를 수정한다. • Warning은 우선 무시해도 좋다. 17 숭실대학교 컴퓨터학부 프로그래밍의 예 : 4단계 실행 • UNIX 환경이라면 $ a.out Hello World 프로그램 수행 결과 • Windows 환경이라면 – [Ctrl + F5] 단축키를 실행하면 자동으로 실행된다. – 또는 HelloWorld.exe 파일을 찾아서 직접 실행한다. C:\StartC\debug\HelloWorld.exe Hello World 프로그램 수행 결과 18 숭실대학교 컴퓨터학부 프로그램 이해하기 (1, #include) • 전처리기 지시자(Preprocessor directives) #include <stdio.h> • Stdio.h 라는 파일을 포함(사용)하겠다는 것을 의미한다. • Stdio.h 는 어떤 파일인가? – Standard Input Output 의 약자이다. – 이 파일 안에서 입력, 출력에 해당하는 기능들이 정의되어 있다. – Printf(), Scanf() 함수를 사용하기 위해서는 이 파일을 포함해야 한다. • #으로 시작되는 것을 전처리문이라고 한다. – 컴파일러는 전처리기를 포함하고 있다. – 컴파일을 하기 전에 전처리 기능을 수행한다. 19 숭실대학교 컴퓨터학부 프로그램 이해하기 (2, #include) • 전처리기 지시자(Preprocessor directives) #include <stdio.h> – #으로 시작하는 문장을 전처리기 지시자(preprocessor directives) – 컴파일 하기 전에 먼저 처리해야 할 일을 수행하도록 명령을 내리는 문장 – 문장 #include는 다음에 나오는 헤더 파일(header file)을 이 문장이 있는 부 분에 삽입하는 역할을 수행 – 즉 문장 #include 다음에는 헤더 파일의 이름을 <파일이름> 형식으로 반드시 기술 #include <헤더파일이름> – #include 문장은 반드시 한 줄에 모두 기술 20 숭실대학교 컴퓨터학부 프로그램 이해하기 (3, main) • Main 이라는 함수 이해하기 int main(void) • main() 이라는 함수를 정의한다. • 모든 프로그램은 main 함수로부터 시작한다. • 하나의 프로그램은 1개 이상의 함수로 구성된다. • 함수를 이해하기 – 두수를 더하는 함수 – 제곱하는 함수 • 함수의 입력과 출력을 표시해야 한다. – 출력 : int (정수) – 입력 : void (없음) 21 숭실대학교 컴퓨터학부 프로그램 이해하기 (4, main) • 함수 main()은 C 언어에서 프로그램이 시작되는 함수로, 프로그램이 실 행되려면 프로그램은 반드시 main() 함수를 가져야 함 • 함수 main()에서 기술되는 단어인 int, main, void는 모두 소문자로 대소 문자를 구분하여 정확히 기술 – int 와 main 사이의 공백은 단어를 구별하는 중요한 의미가 있으므로, 하나 이상의 공백은 반드시 필요 – main 이후의 라인의 집합기호 {는 반드시 있어야 하며, 이는 main() 함수의 시작을 의미 – 마찬가지로 마지막 줄에 있는 집합 기호 }는 main 함수의 끝을 의미하고 main() 함수의 마지막에 반드시 기술 • 함수 main(void) 이후의 문장에서 여러 줄에 걸쳐 문장이 있는 것을 볼 수 있는데, 이것은 프로그램 읽기(readability)를 쉽게 하기 위함 – 반드시 줄마다 하나의 문장을 기술해야 하는 것은 아님 22 숭실대학교 컴퓨터학부 프로그램 이해하기 (5, main) • main 함수의 형식 (1) int main(void) { printf(“ Hello World “); return 0; } • main 함수의 형식 (2) void main(void) { printf(“ Hello World “); } • main 함수의 형식 (3) main() { printf(“ Hello World “); } 23 숭실대학교 컴퓨터학부 프로그램 이해하기 (6, printf) • printf 라는 함수 이해하기 printf(“ Hello World \n”); – 화면에 출력할 때 사용하는 함수이다. – Stdio.h 라는 헤더파일에 이 함수가 정의되어 있다. – 두개의 “…” 사이에 들어있는 문장을 그대로 출력한다. – 그런데 \n 은 화면에 그대로 출력되지 않는 것을 볼 수 있다. – 역슬래시( \ or 키보드에서 통화표시) 가 있으면 특수한 의미로 해석 – \n 은 New Line 즉 한 칸을 내려온다는 것을 의미한다. – 함수의 마지막에는 세미콜론 ( ; ) 이 꼭 나와야 한다. 주의하자 24 숭실대학교 컴퓨터학부 프로그램 이해하기 (7, printf) • 아래의 코드를 실행하면 무엇이 출력되겠는가? #include <stdio.h> int main(void) { printf(“from sea to “); printf(“shining C”); printf(“\n”); return 0; } 25 숭실대학교 컴퓨터학부 프로그램 이해하기 (8, printf) • %s 를 사용하여 문자열 출력하기 #include <stdio.h> int main(void) { printf(“ 최초에서 최고로~ 숭실대학교 \n“); printf(“ 최초에서 최고로~ %s \n”, “숭실대학교” ); printf(“ %s %s\n”, “최초에서 최고로~”, “숭실대학교”) return 0; } 26 숭실대학교 컴퓨터학부 프로그램 이해하기 (9, 정수형 변수사용하기) • 변수를 사용하기 ( 정수 ) #include <stdio.h> main() { int age = 25; printf(“ 안녕하세요. 제 이름은 김숭실입니다. \n “); printf(“ 제 나이는 %d 입니다. ”, age); } 27 숭실대학교 컴퓨터학부 프로그램 이해하기 (10, 변수 계산하기) • 변수를 사용하기 ( 계산하기 ) #include <stdio.h> main() { int a = 25; int b = 2; int c = a*b; printf(“ %d 곱하기 %d는 %d 입니다. ”, a,b); } 28 숭실대학교 컴퓨터학부 프로그램 이해하기 (11, 문자형 변수 사용하기) • 변수를 사용하기 ( 문자 ) #include <stdio.h> main() { char c1 = ‘A’; printf(“ 안녕하세요. 제 이름은 김숭실입니다. \n “); printf(“ 제가 좋아하는 알파벳은 %c 입니다. ”, c1); } 29 숭실대학교 컴퓨터학부 프로그램 이해하기 (12, 실수형 변수 사용하기) • 변수를 사용하기 ( 실수 ) #include <stdio.h> main() { char c1 = ‘A’; int age = 25; float height = 170.5; printf(“ 안녕하세요. 제 이름은 김숭실입니다. \n “); printf(“ 제 나이는 %d 입니다. ”, age); printf(“ 제가 좋아하는 알파벳은 %c 입니다. ”, c1); printf(“ 저의 키는 %f 입니다. “, height); } 30 숭실대학교 컴퓨터학부 프로그램 이해하기 (13, scanf 함수) • 사용자로 부터 입력받는 함수 (키보드) : 정수 입력 #include <stdio.h> main() { int age; printf(“당신의 나이를 입력하세요 : “); scanf(“%d”, &age); } printf(“ 당신은 %d 살 이군요 ”, age); printf(“ 5년 후에는 %d살입니다. “, age+5); 31 숭실대학교 컴퓨터학부 프로그램 이해하기 (14, scanf 함수) • 사용자로 부터 입력받는 함수 (키보드) : 문자입력 #include <stdio.h> main() { char c1; printf(“당신의 좋아하는 알파벳을 입력하세요 : “); scanf(“%c”, &c1); } printf(“ 당신은 %c 를 좋아하는군요 ”, c1); 32 숭실대학교 컴퓨터학부 프로그램 이해하기 (15, scanf 함수) • 사용자로 부터 입력받는 함수 (키보드) : 연속된 문자입력 – ABC 입력, A B C 입력 #include <stdio.h> main() { char c1, c2, c3; printf(“3개의 알파벳을 입력하세요 : “); scanf(“%c%c%c”, &c1, &c2, &c3); } printf(“ 당신은 %c%c%c 를 좋아하는군요 ”,c1,c2,c3); printf(“ 당신은 %3c%3c%3c 를 좋아하는군요 ”,c1,c2,c3); 33 숭실대학교 컴퓨터학부 프로그램 이해하기 (16, scanf 함수) • 사용자로 부터 입력받는 함수 (키보드) #include <stdio.h> main() { float height; printf(“당신의 키를 입력하세요(센치) : “); scanf(“%f”, &height); } printf(“ 당신의 키는 %f 센치 이군요 ”, height); printf(“ 5센치더 자라면 %f 가 됩니다. “, height+5); printf(“ 5센치더 자라면 %8.2f 가 됩니다. “, height+5); 34 숭실대학교 컴퓨터학부 프로그램 이해하기 (17, scanf 함수) • 교재의 20 페이지 중간의 표를 참고하자. • • • • • c : 단일문자. d : 십진 정수 f : 부동 소수점 숫자 (float) lf : 부동 소수점 숫자 (double) s : 문자열 35 숭실대학교 컴퓨터학부 1.5 Printf()와 Scanf()의 사용 • 20-21 페이지의 예제 #include <stdio.h> int main(void) { char c1, c2, c3; int i; float x; double y; printf(“\n%s\n%s”, “input three characters”, “an int, a float, and a double : “ ); scanf(“%c%c%c%d%f%lf”, &c1, &c2, &c3, &I, &x, &y); printf(“\nHere is the data that you typed in:\n”); printf(“%3c%3c%3c%5d%17e%17e\n\n”, c1, c2, c3, i, x, y); } return 0; 36 숭실대학교 컴퓨터학부 1.5 Printf()와 Scanf()의 사용 • 앞의 예제를 실행한 후 입력하기 – ABC 3 55 77.7 – A B C 3 55 77.7 37 숭실대학교 컴퓨터학부 참고 • 지금까지 배운 내용 – – – – – – – 왜 C언어인가? Visual C++ 을 이용한 프로그램 개발 방법 1.1 1.2 간단한 C언어 프로그램 맛보기 1.3 변수, 수식, 배정 (int, float, char, = ) 1.4 #define 과 #include 1.5 printf() 함수와 scanf()의 사용 방법 1.10 운영체제의 고찰 (UNIX에서의 C 프로그램 개발 방법) • 1장 수업에서 제외한 내용 – – – – 1.6의 예제 프로그램 (p.24-29) 1.7 함수 1.8 배열, 문자, 포인터 1.9 파일 38 숭실대학교 컴퓨터학부