|
들어가기 전에
C프로그램에 대한 설명은 DOS운영체제를 기준으로 합니다.
int의 크기는 운영체제와 하드웨어에 따라 2byte, 4byte의 각기 다른 크기를 가지지만
일반적으로 2byte로 간주하여 설명합니다.
DOS에서 파일이름은 8글자와 3글자의 확장자를 .(닷)으로 구분합니다.
파일의 확장자가 없을 수도 있고 파일의 이름이 8글자 이하일 수도 있지만 파일이름이 8글자를 초과할 수 없으며
확장자가 3글자를 초과할 수 없습니다.
예) sample01.doc (파일이름.확장자)
'\'(back slash)는 '\'와 같은 것입니다. 영문 키보드에서는 '\'로 되어있으나 한글 키보드에서는 우리나라 통화단위 원(\)을 사용하기 위해 글자의 모양을 '\'으로 바꿔놓은 것으로 그 문자의 코드 값은 둘 다 같으므로 C 언어에서 설명하는 확장자(escape sequence) '\'는 키보드로 '\'를 타자하며 화면에도 '\'으로 표시됩니다.
<사진 출처 : http://blog.daum.net/legna18/290?srchid=IIME4NPg000#A2075010F4B46A4812FD548&srchid=IIME4NPg000 >
3쪽 C프로그램의 특징
논리적이며 구조적인 시스템 프로그래밍 언어이다.
하드웨어 제어가 가능하다.
프로그램 이식성이 높다.
간략한 문법 표현으로 함축적인 프로그램 작성이 용이하다.
저급 언어 특성을 가진 고급 언어이다.
5쪽 C 프로그램의 완성과정
① 코딩(Cording) : 소스 파일(source file) 생성과정
☞ 확장자 .c 파일 생성 (문서 파일), 에디터등으로 소스코드(source code)작성
② 컴파일(Compile) : 소스 파일을 목적파일로 변환 ☞ 확장자 .obj 파일 생성 (기계어(이진)파일), 실행 불가능
③ 링킹(Linking) : 목적파일을 연결하여 실행파일로 변환 ☞ 확장자 .exe 파일 생성 (실행 가능한 파일)
10쪽 C 프로그램의 구성
main() 함수는 가장 먼저 호출되는 함수로 모든 프로그램에 반드시 존재해야 한다.
C 프로그램의 블록은 중괄호 { 와 }로 이루어진다.
선행처리기(Preprocessor)가 처리하는 명령을 제외한 모든 수행 문장 뒤에는 세미콜론(;)을 붙인다.
12쪽
(1) 예약어 : 박스안에 적힌 예약어들을 어떤 것이 있는지 대충 눈에 익혀두기 바랍니다.
http://cafe.daum.net/c-study/4tdN/98 ☞ C 프로그래밍 keyword 참고
(2) 명칭
영문자와 숫자의 조합으로 만든다.
명칭의 첫 문자는 영문자나 밑줄이어야 한다.
특수문자를 사용해서는 안 된다(단, 밑줄(_)은 사용 가능).
문자 사이에 공백이 있어서는 안 된다.
예약어를 사용할 수 없다.
영문자 대문자와 소문자는 서로 구별하여 사용한다.
명칭의 길이는 컴파일러에 따라 차이가 있다(일반적으로 32자까지 인식 가능).
참고) 공백문자(whitespace)는 공백(blank), 탭문자(tab, \t), 개행문자(newline, \n) 등 3가지를 통틀어 일컫는 말입니다. 이 3가지 공백문자는 컴파일러에 의해 서로 완전히 동일하게 취급됩니다. 즉 컴파일러는 원시 화일 내에 존재하는 이 3가지 공백문자를 전혀 구별하지 않습니다. 단 문자 상수나 문자열 상수내에서는 예외입니다. (임인건, 터보C정복, 가남사, 1991)
(5) 설명문
여러줄에 걸친 설명문을 넣기 위해서는 /*와 */를 사용한다.
한 줄짜리 설명문을 넣기 위해서는 보통 //을 사용한다.
프로그램의 어느 부분에도 위치할 수 있다.
2개 이상의 라인으로 계속될 수 있다.
참고) 주석(설명문)은 매크로 전개 이후에 하나의 공백(blank)으로 치환됩니다. 따라서 주석은 공백문자의 역할도 겸합니다.
22쪽 연습문제
1. 실행될 때의 확장자 라. sample.exe
도스에서 실행 가능한 파일은 .bat, .com, .exe입니다. 그 외의 확장자를 갖는 파일은 실행할 수 없습니다.
batch(한 묶음, 일괄), command(명령), execute(실행하다)
------------------------------------------------------------------------------------------------------------------
참고
실행 파일로는 EXE, COM, BAT 등이 있다. 이를테면, 한 디렉터리에 COM 파일과 EXE 파일이 확장자만 다르고 같은 이름을 가지고 있다고 하면 이 경우 COM 파일이 우선하여 실행된다.
COM 포맷은 가장 단순한 실행 포맷이며, 메타데이터는 없고, 코드와 데이터만 포함하고 있으며 일부 세그먼트의 오프셋 0x0100에서 로드되어 실행된다. 세그멘테이션 모델이 잘 동작하기 때문에 구조 배치가 필요하지 않다.
(출처 : http://ko.wikipedia.org/wiki/COM_%ED%8C%8C%EC%9D%BC )
EXE는 일반적인 파일 확장자로 컴퓨터 프로그램의 실행 파일을 가리킨다. 오픈VMS, 도스, 마이크로소프트 윈도, 리엑트오에스, OS/2 운영 체제에서 사용할 수 있다.
실행 프로그램 자체뿐 아니라, 많은 EXE 파일들은 비트맵, 실행 프로그램이 그래픽 사용자 인터페이스를 사용하는, 아이콘과 같은 리소스라고 불리는 다른 구성 요소들을 포함할 수 있다.
도스 실행 파일 포맷은 64 킬로바이트로 크기가 제한되는 COM 실행 파일과 다르다. 도스 실행 파일 헤더는 여러 개의 세그먼트가 DMA에서 로드될 수 있으며 64 킬로바이트 이상의 실행 파일을 지원하는 리로케이션 정보를 포함하고 있다.
(출처 : http://ko.wikipedia.org/wiki/EXE)
MS-DOS, OS/2, 윈도에서 쓰이는 배치 파일(batch file)은 명령 인터프리터에 의해 실행되게끔 고안된 명령어들이 나열되어 있는 텍스트 파일이다. 배치 파일이 실행될 때, COMMAND.COM 또는 cmd.exe와 같은 셸 프로그램이 파일을 읽어 명령어를 줄 단위로 실행한다. 배치 파일은 보통 실행 파일을 자동으로, 연속적으로 실행할 때 유용하며 시스템 관리자가 따분한 일들을 자동화하기 위해 자주 사용한다.
(출처 : http://ko.wikipedia.org/wiki/.bat)
-------------------------------------------------------------------------------------------------------------------
2. 설명문(comments)을 나타낸 것 중 틀린 것은? 라. 설명문의 길이는 너무 길면 안 된다.
설명문의 길이는 제한이 없습니다.
설명문은 /* 과 */ 이 짝을 이루며 /* 은 설명문의 시작을 의미하고 */은 설명문의 끝을 의미합니다. 즉 최초 발견되는 /*부터 시작하여 최초 발견되는 */ 까지가 설명이며 /* 이 없이 */ 이 등장하면 오류처리됩니다.
한 줄 짜리 설명문 기호 // 을 사용하면 설명문의 끝을 따로 표시하지 않으며
//의 뒤에 위치한 그 줄의 내용은 모두 설명문입니다.
설명문은 프로그램의 실행에 영향을 미치지 않으며 본인이나 다른 사람이 프로그램을 수정할 때 이해하기 쉽도록 써주는 것입니다. 설명문은 아무 곳이나 위치해도 됩니다.
예) // 이 글은 설명문입니다.
/* 이 글은 설명문입니다. */
/* 이 글은
설명문입니다.*/
int num; // 이 글은 설명문입니다.
printf("%d/*이 글은 설명문입니다.*/ \n", 5);
printf("%d /* 이글은 /*설명/*문입니다.*/\n", 5);
printf("%d /* 이글은 /*설명/*문입니다.*/*/\n", 5); // 오류발생
3. C 프로그램의 설명 중 틀린 것은? 가. 모든 프로그램은 콜론(:)으로 끝난다.
선행처리기를 제외한 모든 수행 문장은 세미콜론(;)으로 끝납니다.
C 프로그램이 정상적으로 끝나는 것은 main()함수의 끝(})에 도달한 경우, main()함수에서 return문을 만난 경우, C프로그램의 어디에서든 exit를 만난 경우입니다.
프로그램 작성 시 에디터는 아무거나 사용해도 상관이 없습니다. 일반적으로 소프트웨어 개발 키트(SDK : Software Development Kit) 혹은 통합 개발 환경 (IDE : Integrated development environment)에서 제공하는 내장 에디터를 사용합니다.
(참고)
에디터(Editor) : 프로그램 작성 등을 위한 간단한 문서 편집기 (프로그램 작성에 사용할 수 있습니다)
워드프로세서(Word Processor) : 각종 글꼴, 글자 크기 등을 변환하며 서류를 작성, 출력하기 위한 문서 편집기 (프로그램 작성시 사용할 수 없습니다)
4. 다음 중 예약어(reserved word)가 아닌 것은?
가. char : 문자형 변수를 선언
나. for : 반복문(루프:loop)에 사용
다. include : 파일을 포함시킴
라. play : C 프로그램에서 특별히 규정되지 않은 일반 단어로 사용자가 임의의 변수나 함수의 이름으로 사용할 수 있음
예약어는 C 프로그램에서 특정한 용도로 정해놓은 것을 말하며 사용자가 임의의 용도로 사용할 수 없습니다.
5. C 프로그램 작성 시 반드시 작성해야 하는 함수는?
가. scanf() 문자나 숫자 등을 키보드로 부터 받아들이는 함수
나. printf() : 문자, 숫자등을 화면에 표시하는 함수
다. malloc() : 메모리를 동적 할당하는 함수
라. main() : C 프로그램의 시작임을 의미하는 함수
C프로그램이 수행 될 때 main() 함수의 시작부분을 프로그램의 시작점으로 인식하기 때문에 반드시 작성해주어야 합니다.
void main()
{ <----- 프로그램의 시작
...
} <----- 프로그램의 끝
6. 무엇을 하는 프로그램인가?
#include <stdio.h> // printf(), scanf()를 사용하기 위하여 포함시킨 헤더 파일
int radius, area; // 변수의 용도를 짐작하기 쉽게 의미있는 이름으로 변수명을 정하되 예약어는 사용할 수 없다
void main() // 반드시 작성해야 하는 함수
{ // main() 함수의 블럭 시작은 프로그램의 시작을 의미
printf("Enter radius;"); // Enter radius; 라고 화면에 출력
scanf(%d", &radius); // radius라는 변수에 10진 정수를 키보드로 부터 받아들임
area = (int) ((3.141592) * radius * radius; /* 원주율 값을 소수점 아래를 버리고 정수로 만들어
radius값의 제곱에 곱한 다음(πR²)
area라는 변수에 그 값을 저장
(정확한 순서는 원주율 값을 정수(3)으로 만든 다음 반지름을 곱한 값에 또 반지름을 곱함) */
printf("\n\n Area = %d\n", area); /* 줄을 두 번 바꾼 다음 Area = 을 출력한 후 %d자리에
area에 저장된 값을 정수로 화면에 출력*/
} // main() 함수의 블럭의 끝은 프로그램의 끝을 의미
반지름을 입력받아 원의 면적을 계산하여 그 결과를 화면에 출력하는 프로그램
(참고) 함수에서 다시 설명합니다. C 프로그램이 어떻게 작성되는지를 간략히 설명하는 것이므로 세세한 내용을 지금 기억할 필요는 없습니다.
7.
(1) 에디터(editor) :
(참고) 워드프로세서(word processor) :
(2) 링커(linker) : 컴파일된 목적파일들을 라이브러리 파일과 연결하여 실행파일을 만드는 도구.
링킹(Linking) 과정이 끝나면 .exe확장자를 가진 실행파일이 만들어진다 (7쪽)
(3) 로더(loader) : 프로그램을 수행하도록 사용자의 프로그램을 필요한 시스템 루틴과 함께 중앙 처리 장치에 적재하는 프로그램
(4) ANSI : 미국 표준 협회(American National Standards Institute, ANSI)는 미국의 산업 표준을 제정하는 기구이며, 여기서 제정된 표준을 또한 ANSI라고 부르기도 한다. ISO에 가입되어 있다. (위키백과)
8. 잘못된 문장 찾기
#include <stdio.h>
void main(); // void main()으로 세미콜론이 없어야 함
{
printf("keep looking!");
printf("You\'ll find it! \n"); // '\''는 printf() 함수의 문자열 안에서 '(작은 따옴표, Apostrophe)를 화면에 나타낸다는 뜻
return 0; // void main()은 void형이므로 값을 리턴할 수 없으므로 삭제하거나 return; 으로 고쳐야 함
}
"You\'ll find it! \n" 에서 \(백슬래쉬, 역슬래쉬)는 확장열(escape sequence)라고 함(차후 자세히 설명하겠습니다)
9. 에러 메시지
#include <stdio.h>
void main() {
printf("This is a program with a");
do_it("problem!"); // Function 'do_it' should have a prototype ('do_it'함수의 원형이 선언되지 않았다)
return 0; // 'main()' cannot return a value (main() 함수는 값을 리턴할 수 없다)
}
다음과 같이 고친다면 문제없이 실행될 것입니다.
#include <stdio.h>
void do_it(char *str)
{
printf("%s", str);
}
void main() {
printf("This is a program with a");
do_it("problem!");
return; // 이 줄을 아예 삭제해도 됩니다.
}
이 프로그램을 실행하면 This is a program with aproblem!이라고화면에 찍힙니다. a와 problem사이에 공백이 없으니 문제가 있긴 있군요 ^^;.
참고) return문은 그 함수를 벗어난다는 뜻이고 main()함수는 프로그램의 시작이요, 끝이므로
main() 함수에서 return은 프로그램을 끝낸다는 뜻입니다.
위 예제에서는 return이 없어도 main() 함수의 블럭끝에 도달하므로 저절로 프로그램이 종료됩니다.
10.
하드웨어(hardware) : (1) CPU, (3) ALU, (5) 입출력 장치(I/O unit)
소프트웨어(software) : (2) C 컴파일러(compiler), (4) C 선행처리기(preprocessor)
(출처 : http://blog.naver.com/PostView.nhn?blogId=rkddlsghk98&logNo=30146555591
기출문제
1. 다음 중 원시 프로그램이 번역되어 실행될 때의 파일 확장자로서 올바른 것은? (2점) <2012 1학기><2011 동계 ><2006 2학기>
① sample.c 원시 파일(source file)
② sample.obj 목적 파일(원시파일을 compile한 결과물)
③ sample.doc doc는 document파일의 확장자로 주로 사용함
④ sample.exe 목적파일을 링킹하여 생성된 실행 가능한 파일
2. 다음 중 사용자 정의 명칭으로 올바른 것은? (2점) <2011 동계 ><2011 1학기><2007 2학기>
① For 대소문자를 다른 문자로 취급하므로 예약어 for와 관련이 없으므로 사용가능함
② 2knou 숫자로 시작할 수 없음
③ int 변수를 정수형으로 선언하는 예약어
④ OUN TV 공백이 허용되지 않음
3. 다음 중 사용자 정의 명칭으로 올바른 것은? (2점) <2004 2학기>
① 2m 숫자로 시작할 수 없음
② for 반복문을 나타내는 예약어
③ KBS@TV 변수명에는 _(밑줄)을 제외한 특수문자를 사용할 수 없음
④ a_7
4. 다음 중 C 프로그램 완성과정의 순서로 올바른 것은? (2점) <2011 1학기>
① 코딩 → 실행 → 링킹 → 컴파일링
② 코딩 → 링킹 → 실행 → 컴파일링
③ 코딩 → 컴파일링 → 링킹 → 실행
④ 코딩 → 컴파일링 → 실행 → 링킹
5. 다음 중 설명문의 설명으로 잘못된 것은? (2점)<2011 1학기>
① 기호 /*와 */를 사용한다.
② 프로그램의 어느 부분에도 위치할 수 있다.
③ 프로그램의 실행에 영향을 미친다.
④ 한 줄짜리 설명에는 보통 기호 //를 사용한다.
6. 다음 프로그램 중 잘못된 문장은? (2점) <2011 1학기><2006 2학기>
#include <stdio.h>; --------------- ㉠
void main() { -------------------- ㉡
printf("keep looking!"); ----------- ㉢
printf("You\'ll find it! \n"); ------- ㉣
}
① ㉠ ② ㉡ ③ ㉢ ④ ㉣
7. 다음 중 C 언어의 예약어(Reserved word)가 아닌 것은? <2006 2학기>
① static ② for ③ sizeof ④ play : 변수나 함수명으로 사용할 수 있다.
8. 다음 중 C 프로그램에 대한 설명으로 올바르지 않은 것은? (2점) <2005 2학기>
① 모든 프로그램은 main()함수로부터 시작한다.
② 함수의 시작과 끝은 중괄호({})로 나타낸다.
③ 문장의 끝을 나타낼 때는 마침표(.)를 붙여야 한다. ☞ 세미콜론(;)을 붙여야 한다.
④ 설명문(comment)은 프로그램 어디에도 위치할 수 있다.