자전거를 배우려면 안장에 올라가 페달을 밟아라. C 언어의 특징 쉽다 연습이다. 자전거를 배우려면 안장에 올라가 페달을 밟아라. C 프로그래밍을 배우려면 컴퓨터 앞에 앉아 프로그래밍하라. 넘어지면 피나고 자전거 망가진다. 에러 나도 피 안나고 컴퓨터 멀쩡하다. 친절하게도 컴파일러가 에러 교정을 가이드한다. 더욱 친절하게도 교수님이 지도해 준다.
컴퓨터 프로그래밍 공부의 왕도 이 책은 예제에 의한 학습 연습에 의한 학습 연습, 또 연습, 또 연습하고… 그러다 보면 어느새 고수.. 이 책은 절 끝에서 예제 프로그램의 다양한 변신을 해 봄 3~7장 뒤에는 스스로 해 보는 프로젝트 문제
스타일 좋은 스타일은 어디서나 각광받는다. 프로그래밍 목표 = 옳게 작동 + 좋은 스타일 이 책은 스타일링 요소를 중요하게 다룬다. 좋은 스타일은 어디서나 각광받는다. http://tvpot.daum.net/clip/ClipViewByVid.do?vid=JTJf238z1wA$ 나쁜 스타일 좋은 스타일
1.1 나도 C 프로그래머이다. 구문과 의미를 이해하면 나도 C 프로그래머이다. #include main() 함수 printf() retrun 0와 반환형 int 주석문 /* … */
1.1.1 명령문 모든 명령문의 끝은 ;로 끝남 C 언어의 명령문 종류는 많지 않다. 여러 문을 하나의 묶음으로 만들려면 복합문 { … } 주석문 여러 줄 /* ... */ 한 줄 // ... C의 예약어
C 프로그래밍 절차
컴파일러 (부록 E) C 언어를 기계어로 번역 명령어 라인 인터페이스 통합 개발 환경 (IDE)
Dev C++ 컴파일러 사용하기
오류 메시지를 주의깊게 살피는 습관을 가져라.
C 언어의 정의
예제 1 //******************************************************************** // 표준 출력에 Hello World !를 출력하는 프로그램 #include <stdio.h> #include <stdlib.h> int main() { puts("Hello, World !"); system("PAUSE"); return 0; }
printf(), puts(),putchar() 의 차이점은? printf의 경우에는 %d 등과 같은 서식문자열을 출력할 수 있고, puts는 단순히 문자열만 출력 가능 즉, 단순 문자열만 출력하는 경우라면 puts를 쓰는 것이 좋음
예제 2 //******************************************************************** // '본인의 학과, 본인의 학번, 이름' 을 출력하는 프로그램 #include <stdio.h> #include <stdlib.h> int main() { puts("본인의 학과, 본인의 학번, 이름"); system("PAUSE"); return 0; }
1.2 입출력을 해 보자. 라인 5: 변수 선언 라인 10의 scanf(): 키보드에서 데이터를 입력 라인 12: 연산을 수행하고 결과를 celsius라는 변수에 저장
프로그램의 전형적인 실행 과정
출력문 printf()
입력문 scanf() 입력 리스트에는 단일 변수 변수 앞에 주소 연산자 &
연습 문제 (실습 용)
1.3 메뉴를 제공하자. 여러 기능을 가진 프로그램이 가치가 더 높다. 두 가지 기능의 프로그램으로 확장해 보자. if 문으로 ‘선택’ 라인 5-7: 변수 선언 라인 9-13: 메뉴 디스플레이
1.3 메뉴를 제공하자. 변수 choice의 값에 따라 세 가지 경우 중의 하나를 실행 라인 15-20: 인치 센티미터 라인 21-26: 화씨 섭씨 라인 27-30: 틀린 메뉴
1.3.1 변수 변수: 어떤 값을 저장하는 곳 사용되기 전에 반드시 정의 모든 변수는 형을 가짐 (3장에서 자세히 공부) celsius, fahrenheit, centimeter, inch는 float 형 (실수) choice는 int 형 (정수) 정의할 때 초기화 가능 언제 어떻게 초기화 할지 판단은 프로그래머의 몫
변수 변수(variable) 사용 전 변수 선언 자료형 변수이름; 데이터를 저장하는 데 사용되는 기억 장소의 이름이다. 변수 이름과 저장할 데이터 값의 유형(자료형)을 지정해야 한다. 자료형 변수이름; char c; short sum;
변수 이름을 잘 지어라. 작명법 만일 choice를 kkk로 바꾸면 기능은 같지만 스타일이 망가진다. 하얀 양복에 빨간 구두를 신은 우스운 스타일 menu는 여전히 멋진 스타일 ‘데이터의 의미를 뜻하는’ 이름은 붙여 주어라. 작명법 i, I, start, v12, _init등은 허용 8i, start*는 허용 안됨 때로 두 단어 붙여 작명 예) initial_condition이나 InitialCondition
식별자 식별자 x25 X age01 sum _jumsu address_01 25x X# 01age sum* -jumsu 변수, 상수, 함수 등에 대한 이름 문자와 숫자로 구성되며 첫 번째 글자는 반드시 문자 밑줄문자’_’도 하나의 문자로 사용될 수 있음 대소문자를 구별 바른 이름 잘못된 이름 x25 X age01 sum _jumsu address_01 25x X# 01age sum* -jumsu address-01 바른 식별자, 잘못된 식별자
대입문 expression을 계산하여 얻은 값을 변수 a에 저장
예제 3 실행결과: 첫 번째 점수는 7 두 번째 점수는 10 세 번째 점수는 8 네 번째 점수는 9
1.3.2 if 문 제어문은 프로그램의 실행 순서를 제어함 if 문: 조건에 따라 실행할 문을 선택
if 문 형식 if (조건식) 제어 흐름 조건식이 참이면 문장1을 실행하고, 다음 문장으로 진행 문장1; 제어 흐름 조건식이 참이면 문장1을 실행하고, 다음 문장으로 진행 조건식이 거짓이면 문장1을 실행하지 않고, 다음 문장으로 진행 조건식 거짓 참 문장 1
if 문 예 if (x > 0) printf ("x가 양수이다."); if (a < min) min = a; 주의! C 언어에서는 0은 거짓으로 0 이외의 값은 모두 참으로 간주한다. if (x) printf("x가 0이 아님“);
if-else 문 if-else 문은 조건에 따라 실행할 문장을 선택할 수 있다. 구문 형식 if (조건식) 제어 흐름 문장1; else 문장2; 제어 흐름 조건식이 참이면 문장1을 실행하고, 거짓이면 문장 2 실행 조건식 문장 2 거짓 참 문장 1
if-else 문 예 a, b 값 중 작은 값을 min에 대입하는 문장 if (a < b) min = a; else min = b;
복합문(compound statement) 중괄호로 둘러싸인 문장들의 집합 필요하면 변수 혹은 상수들을 먼저 선언할 수 있다. 구문 형식 { 선언들; 문장 1; 문장 2; . . . 문장 n; } 주의! 복합문도 하나의 문장처럼 사용될 수 있다
예제4 실행결과: 입력 1: 20 입력 2: 35 작은 값: 20 큰 값: 35
중첩된 if(nested if) if 문 내에 또 다른 if 문을 포함할 수 있다. 예 이미 결정한 사항에 기초하여 또 다른 결정을 할 수 있다. 예 if (num1 < num2) if (num1 < num3) min = num1; else min = num3;
예제5
중첩된 if 문 중첩된 if 문에서, else 절은 짝이 없는 가장 가까운 if와 짝이 된다. if (num1 < num2) if (num1 < num3) min = num1; else min = num3; vs { if (num1 < num3) min = num1; } else min = num3;
중첩된 if 문을 이용한 다중선택 형식 if (조건식1) 문장1; else if (조건식2) 문장2; ... 문장1; else if (조건식2) 문장2; ... else if (조건식n) 문장n; 조건식1 참 거짓 문장 1 참 조건식2 문장 2 거짓 조건식n 참 문장 n 거짓
예제6 실행결과: 점수 입력: 85 점수: 85 학점: B
if 문의 일반적 구문 조건식 ci는 관계 연산자로 만듦 exp는 단일 변수 또는 수식
연습 문제 (실습 용)
1.3.3 중첩 선택 주 메뉴와 부 메뉴를 가지도록 기능 확장해 보자.
…
프로그램에 자주 등장하는 여러 형태의 중첩 구조
연습 문제 (실습 용)
1.4 반복하자. 서비스를 반복하도록 기능 확장 (while 문 이용) …… …… ……
1.4.1 while 문
while 문 while 문 구문 형식 제어 흐름 조건이 거짓이 될 때까지 동일한 문장을 반복해서 실행한다. 문장1; 제어 흐름 조건식을 계산하고, 그 값이 참(0이 아닌 값)인 동안 문장 1를 반복해서 실행한다. 조건이 거짓이 되면 while 문을 종료하고 다음 문장을 실행한다. 조건식 문장 참 거짓
예제7 실행결과: 1부터 100까지 홀수의 합은 2500 입니다.
연습 문제 (실습 용)
1.5 함수를 만들자. …… …… …… 함수: 특정한 작업을 전문적으로 해 주는 프로그램 모듈 함수 호출: 라인 16과 37 함수의 원형: 라인 8 …… …… ……
함수의 정의 함수의 일반적 구문
함수의 정의와 선언 int Add(int i, int j) { int result = i+j; return result; } 전달 인자와 반환 값, 둘 다 있는 함수 int Add(int i, int j) { int result = i+j; return result; }
함수의 정의와 선언 함수 호출 과정의 이해 #include <stdio.h> int Add(int i, int j) { int result = i + j; return result; } int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0;
연습 문제 (실습 용)
1.5.2 매개 변수와 반환 값을 가진 함수 함수의 정보 교환 매개 변수: 라인 20의 fahr return 문: 라인 25
연습 문제 (실습 용)
1.6 또 다른 반복 …… 온도 변환 표를 만드는 문제 START에서 END까지 DELTA 만큼씩 증가 #define 문은 기호 상수 정의 #define symbol constant ……
1.6.1 for 문
for 문 for 문 구문 형식 제어 흐름 보통 정해진 회수만큼 반복할 때 사용된다. 문장1; 제어 흐름 수식1: 초기화를 위한 수식 루프를 시작하기 전에 한번 계산 수식2: 부울 조건식 문장1 실행 전에 계산 값이 참(0이 아닌 값)이면 문장1 실행 거짓(값이 0)이면 루프를 벗어남 수식3: 수식2의 변수 증가/감소 위한 식 문장1 실행 후에 계산 수식2 문장1 참 거짓 수식1 수식3
for 문 예 for 루프를 사용해서 1부터 100까지의 자연수의 합 계산 for (count = 1; count <= 100; count++) total = total + count; for (count = 100; count > 0; count--) total = total + count;
아래 while을 for로 바꿔 쓰면, 보다 간략하게 고쳐 쓰면,
연습 문제 (실습 용)
1.7 프로그래밍 스타일: 가독성 프로그래머의 개성 프로그래밍은 과학이 아니라 예술이라 말하기도 함 프로그램 스타일은 프로그래머의 개성에 많은 영향을 받음 프로그램의 모양에 관한 스타일 하나: 가독성을readability 높여라. 들여 쓰기 의미 있는 변수 이름 기능별로 구분하기 위한 빈 줄 아래는 나쁜 스타일이다. 소프트웨어의 유지보수와 재사용 측면에서 매우 중요
연습 문제 (실습 용)
1.8 C 언어의 특징 1972년 Dennis Ritchie와 Ken Thompson이 개발, 현재 가장 널리 쓰이는 언어임 학생이 가져야 할 마음 자세 중요하다. C를 잘 하면 C++와 Java도 잘 한다. 재미있다. 나의 개성을 발산하자. 다른 언어와 차별성 Unix와 밀접한 관련이 있다. (Linux 기반 임베디드에 적합) 간결하다. 기계에 가깝다. C++는 C의 객체 지향 버전이다.
C 언어의 개론 (1) 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 프로그래밍 언어로 작성된 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역해 주는 역할을 하는 번역기
C 언어의 개론 (2) C 언어의 장점 C 언어의 단점 익숙해지는데 오랜 시간이 걸리지 않는다. 이식성이 좋다. 효율성이 높다. C 언어의 단점 프로그래밍 하는데 많은 주의를 요한다. 완전한 고급 언어에 비해 상대적으로 어렵다.
C 언어 유래 및 특징 1972년 Dennis Ritchie가 설계함 C 언어에 직접 영향을 준 언어들 특징 UNIX 운영체제 개발에 사용됨 C 언어에 직접 영향을 준 언어들 Algol CPL BCPL B C 특징 구조화된 언어로서 모듈별 설계가 가능하다. 이식성이 높다(다양한 하드웨어에서 사용 가능). 효율적이다(처리속도가 빠르다). 다양한 연산자를 제공한다. 동적 메모리 관리가 가능하다.