자료출처 : 박용운님의 C강의
서론
이제부터 여러분은 C 라는 프로그래밍 언어를 사용하기 위한 제 1 관문 앞에 도달하였다. 필자의 경험에 의하면 C라는 프로그래밍 언어는 가르치기가 가장 어려운 과목 중의 하나로 인식된다. 왜 어렵게 생각될 까 ? 이러한 문제에 대하여 필자는 여러 해에 걸친 수업과 심오한 관찰의 결과 나름대로의 몇 가지 원인을 발견할 수 있었다. 그 이유를 살펴보면 대충 이렇다. 첫째, 학습에 대한 동기 부여의 부족 때문이다. 즉, 많은 시간과 노력을 투자해야만 좋은 언어를 구사할 수 있다는 가장 일반적인 진리에도 불구하고 여러 가지 요인들이 학생들의 학습을 가로막는 상황에서 주어진 시간 안에 뚜렷한 동기 부여가 되지 않은 상태에서 미지의 언어를 배운다는 것은 정말로 힘든 일일 것이다. 예를 들어보자, 어떤 언어학자가 여러분에게 아프리카에 있는 우간다 말을 가르친다고 하자. 일단 말을 배우기 위해서는 그 말을 배워야하는 뚜렷한 목적 의식이 있으면 훨씬 쉬울 것이다. 물론 동기 부여가 되지 않은 상황에서도 훌륭하게 주어진 공부를 소화해 내는 학생들이 있긴 하지만 그 경우는 그렇게 일반적인 경우라고 보기는 힘들다. 왜 말을 배워야 하나하는 그 이유가 있으면 배워야하는 의욕이 많이 생기게 된다. 만약에 이렇게 가정해보자. 아프리카 우간다 말을 배우니깐 새로운 단어를 하나씩 익힐 때마다 하늘에서 만원 짜리 한 장씩 떨어지더라 하고 말이다. ...
아마도 난리가 날 것이다. 여기 저기서 우간다 말(쿵짜라짝짝 삐약삐약 어쩌구 저쩌구 ...)이 들리고 심지어는 자기가 모든 돈을 차지하기 위해서 남이 우간다 말을 배우는 것까지 방해하는 일부 몰지각한 사람까지 나올 것이다. 그렇다 ! 여기서 우리는 새로운 것을 배울 때에는 뭔가 동기가 필요하다는 것을 알 수 있다. 이런 점에서 보면 우리가 이 과목을 배우는데도 어느 정도 동기가 있다는 사실이 여간 다행한 일이 아닐 수 없다. 말해 보자 그 동기를 ...
안 하면 빵구난다
주) 여기서 빵구라 함은 영어 펑츄어(puncture: 펑크 나다, 구멍나다)의 일본식 영어 발음으로써 언어 변질의 추악함을 그대로 보여주는 한 예이다. 실제로 학점이 타이어 터지듯이 뻥하고 터지는 것이 아니라. 낙제를 의미한다. 따라서 극단적인 경우에는 정상적으로 졸업을 못하고 dog dung(개똥의 콩글리쉬 표현 : 필자가 이런 표현을 사용해서는 안 된다고 바로 위에서 주장함에도 불구하고 이렇게 사용하는 것은 여러분의 이해를 돕기 위한 고육지책임을 이해할 것) 같은 사태가 발생할 가능성도 있다.
학습을 가로막는 두 번째 이유로는 언어가 가지는 특수성 때문이다. 여러분이 말을 배울 때를 생각해보자. 전생의 여러분이 사망한 후로 중음의 세계(중음은 귀신을 좀더 전문적인 용어로 풀이한 말로써 한문으로는 中陰임)에서 여러분의 부모님을 육체적인 몸을 제공하는 매개체로 하여 이 세상에 나온 후로 저절로 말을 배운 사람은 아무도 없다. 그러나 여러분은 많은 세월 동안 시행착오를 겪으면서 수많은 말 같지도 않은 말을 계속 되뇌는 과정에 국어의 문법을 부지불식간에 익히게 된 것이다. 그렇다. 로마가 하루아침에 세워진 것이 아니듯이 언어의 획득도 6개월만에 절대로 이루어지지 않는다. 많은 시간과 노력이 필요한 것이다. 그러나 우리가 말 배운 것처럼 오랜 세월이 걸려서는 곤란하겠지. 여러분에게 C를 배우기 위해 주어지는 시간을 겨우 6개월에서 1년 남짓이다. 따라서 이러한 언어의 특성을 고려할 때 불가능한 것처럼 들릴지도 모르겠지만 다행이 그렇지도 않다. 왜냐하면 C의 경우 언어는 언어이되 컴퓨터를 상대로 한 언어이기 때문에 사용되는 어휘가 극히 제한적이다. 정해진 많이 사용되는 단어나 기본 문법 만 알면 된다. 컴퓨터는 아직 사람보다는 덜 영리하기 때문이다. 말로 따지면 텔레토비에 나오는 인형들의 수준 정도의 말 만 배우면 쉽게 프로그램을 짤 수 있다. 명심하자.
기본적인 시간은 투자하자
세 번째로는 우리가 지금껏 C언어를 배우면서 너무 문법에 치중하여서 배운 결과 실제 문법을 이해하면서도 말은 하지 못하는 즉, 남이 짜 놓은 것 보면 대충은 알지만 자기는 스스로 작성 못하는 그러한 황당한 일이 발생한다. 여러분 말 배울 때 생각해 보라 여러분이 발음을 제대로 못하거나 문장을 제대로 작성 못하면 여러분의 어머니가 어떻게 하셨는가 ?
“아가야 ! 금방 한 말은 주어와 목적어의 위치가 전도(바뀜)되어서 문장의 1형식에 맞지 않는다” . 또는 “그 단어는 연음이므로 글자대로 발음하지 않고 혀의 움직임에 순응하여 발음하여야 한다” 라고 하셨는가 아니면
“그기(그것이) 아이다(베르디의 오페라 아이다가 아니라 아니다의 경상도 식 발음) 얼굴이 컴컴하다가 아이고(통곡의 아이고가 아닌 아니다의 경상도 발음) 얼굴이 검다 라고 해야된데이” 또는 “국물이 아이고 궁물이다 이 자슥아” 라고 하셨는가 ?
그렇다 여러분은 지금 웬만한 일상적인 한국말은 다 알아듣는다. 따라서 여러분은 나는 한국말을 완벽하게 한다고 생각할지도 모른다. 과연 그럴까 ? 천만에 말씀이다. 저의 말이 의심스럽거든 당장에 물리학이나 화학책 한 권 꺼내서 읽어보라.
양자와 전자의 충돌로 ... 어쩌고저쩌고 .. 수소와 탄소가 망간을 매개체로 또 어쩌고저쩌고 ... 연쇄 반응을 일으켜(그만 하자 필자도 잘 모르는 내용을 계속 적다가는 들통나겠다)
어떤가 ? 과연 여러분이 국어를 완벽하게 이해한다고 할 수 있겠는가. 비록 읽을 수는 있을지 몰라도 이해는 못한다. 언어의 함정이 바로 여기에 있다. 그 누구도 한 언어의 문법을 완벽하게 이해하지는 못한다. 단, 많이 알고 적게 아는 차이이다. 그러나 우리가 이렇게 언어의 문법을 완벽하게 구사하지 못하고 있음에도 불구하고 국어를 할 수 있는 이유는 우리가 일상에서 사용하는 문법은 제한적이며 이미 그 정도의 문법은 반복 훈련으로 익히고 있고 또한 접촉하는 무리들이 제한적이기 때문에 (끼리끼리 놀기 때문에)기 때문에 통상은 어려움을 느끼지 못한다(생각해 보라 당구장에서 할 수 있는 말은 뻔하다. 뭐 당구장에서 역사에 대한 이야기가 그렇게 많이 나오겠는가 ?). 설령 어려운 단어가 나와서 모르더라도 이미 들어본 말의 경우 감각적으로 익숙해져 있기 때문에 부담을 가지지 않는다(예를 들면 획기적이라는 말의 뜻을 정확히 아는가 ? 그리고 모른다고 해서 그 말에 대하여 답답함을 느끼는 사람이 있나 ?) 그렇다 ! 여기에서 우리는 이 사실을 알 수 있다.
언어는 몸으로 때우면서 배워야 한다(많은 실제 훈련이 필요하다)
그렇다고 문법이 중요하지 않다는 것은 아니다. 다 같은 한국말을 하더라도 어떠함 사람은 문법을 많이 알고 풍부한 어휘를 가지고 있음으로 해서 보다 격조 있는 언어를 구사할 수 있다. 여러분이 말을 잘 하긴 하지만 다른 부류의 사람을 만나 보라. 말빨(언어의 표현의 수려함과 다양함을 나타내는 속어)이 딸려서 의기 소침할 경우가 있을 것이다. ....
하여간 언어는 이러한 특성을 가지므로 이러한 사실을 명심하여 배운다면 여러분이 C언어에 좀 더 쉽게 접근 할 수 있을 것으로 본다.
자 ! 수업에 들어가기 전에 다시 한번 복창하자
안 하면 빵구난다
기본적인 시간은 투자하자
언어는 몸으로 때우면서 배워야 한다
제 1장 C 프로그램의 구조
"Common sense is the collection of prejudices acquired by age 18."
("상식은 18세 때까지 후천적으로 얻은 편견의 집합이다.")
Albert Einstein(앨버트 아인슈타인)[미국 물리학자, 1879-1955]
자 지금부터 시작하도록 합시다. 별로 재미 없는 과목이긴 하지만 프로그래머가 되기위한 사람은 결코 C를 무시해서는 않되니 어쨌든 가도록 합시다.
1.1 이 장의 목적
제 1장의 목적은 C에 대하여 구체적인 내용을 이야기하기 전에 여러분들에게 C의 역사를 간단하게 이야기 한 다음 좀 이른 감이 있고 내용도 아직은 모르겠지만 C 프로그램의 소스 코드(source code: 여러분이 작성해야될 파일)의 일반적인 형태 및 C 프로그램의 주요 구성 요소 설명을 합니다. 그리고 프로그램 작성(코딩이라고 하기도 함)시의 표준 기술 및 C로 작성한 프로그램의 각 부분 설명을 간략하게 할겁니다. 경우에 따라서는 읽지 않아도 무방(하다고하 할까요? 하지만 제말에 책임을 지긴 싫습니다)하다고 생각되면 프로그램 작성에 지대한 영향을 미치는 부분은 아니니 그냥 넘어가도 될 수 있지 않을까 하고 본인은 생각도 해봅니다만 여러분이 어떠실는지 모르겠네(우리말의 애매모호함을 아주 절묘하게 이용한 표현입니다).
1.2 C의 역사
C 언어는 1972년에 벨 연구소에서 Dennis Ritchie에 의해 B언어가 발전되어 탄생한 언어로써 원래는 UNIX 머신인 DEC PDP-11에서 구현되었습니다(UNIX의 대부분이 C로 다시 쓰여짐). 이후 1983년에 미국 표준(ANSI - American National Standard Institute) 위원회가 설립되어 표준 C를 개발하여 1989년에 표준이 채택되어 오늘날 까지 발전하게 되었으며 많은 언어의 어머니(?)라고 부를 정도의 위치에 서게 되었으며 따라서 C를 모르면 다른 언어도 잘모르게될 가능성이 농후합니다(반드시 그런 것은 아닙니다만...).
1.3 C의 특징
여러 가지 특징이 있습니다만 ......
첫째, 구조화(structured), 모듈화(modulized) 프로그램이 가능한 것을 꼽을 수가 있겠죠. 구조화 모듈화는 설명하자면 길고 또한 컴퓨터 관련과의 초년생인 여러분에게는 오히려 저의 설명이 부담이 될 수도 있죠. 왜 그런것 있지 않습니까 ? 어디가서 생전 모르는 소리를 한 두어시간 듣고나면 오는 정신적인 스트레스와 그로 인한 의욕 상실 ... 그렇다고 무시하지 말고 이런 것이 있다고만 알아두세요. 이 다음에 여러분이 그 의미를 알게될 날이 올지 모릅니다.
둘째, 사용자 차원에서 하드웨어의 접근이 가능 즉, 하드웨어를 직접 조작할 수 있는 프로그램이 가능하다는 것이지요. 물론 이 책을 처음 읽는 분들에게는 사실 이 정도의 프로그램이 아직은 무릴겝니다.... 죄송합니다....
셋째, 이식성(portability)이 있습니다 즉, 프로그램을 옮겨 심을 수 있다는 것인데... 하마디로 A라는 기종에서 작성한 프로그램을 B라는 기종으로 별 다른 추가 작업없이 옮겨서 작동 할 수 있도록 한다는 것인데 ... 사실인 즉슨 완전하게 100% 그렇지는 않은 것 같습니다. 제 경험으로는요 ...
1.4 예제 프로그램을 통한 C 프로그램의 개요 설명
아래의 프로그램은 두 정수를 더해서 그 정수의 합을 출력하는 내용을 프로그램으로 작성한 것 입니다. 이 단계에서 프로그램의 구체적인 내용을 설명하는 것은 처녀보고 애 낳으라는 소리와 같기 때문 에 구체적인 설명은 생략하겠습니다. 물론!!! 처녀도 애 낳을 수 있습니다. 그러나 저의 말은 과정 상 지금 자세한 설명을 논할 단계는 아니라는 것이지요. 그러나 전체적인 흐름을 봐두기 바랍니다. 어디에 무엇이 들어가고 어떠한 순서로 놓여 있는지를 말입니다.
#include <stdio.h> // 1) 라이브러리 또는 헤더 파일
#include <stdlib.h>
/* 매크로 정의 부분 */
#define MAX_NUM (30) // 2) 매크로
#define MIN_NUM (10)
void main(void) // 함수의 시작을 알림
{
/* 정수형 변수 선언 부분 */ // ---------> 3) 주석문
int num1; // ---------> 4)변수 선언
int num2;
int total;
/* 정수형 변수에 값 지정하기 */
num1 = MAX_NUM; // ----------> 5) 변수에 값 할당
num2 = MIN_NUM;
/* 두 정수의 합을 다른 정수형 변수에 지정하기 */
total = num1 + num2; // ------------> 6)연산 및 할당
/* 두 수의 합을 화면에 출력하기 */
printf("두 수 %d 와 %d 의 합 : %d\n", num1, num2, total); // ----> 7) 출력문
exit(EXIT_SUCCESS); // 8) 종료 문
}
< 결과로 화면에 나타나는 내용 >
두 수 10과 30의 합은 : 40
*** 번호 순에 따른 위 프로그램 설명 ***
1) 라이브러리
C 프로그램은 많은 함수를 사용하며 이러한 함수를 사용하기 위해서는 그 함수가 속해있는 라이브러리(헤더 파일)를 프로그램의 처음에 표시하여야 합니다. 예를 들면 대표적인 출력문인 printf는 stdio.h 라는 라이브러리에 존재합니다.
2) 매크로
변수 값 대신 프로그램의 판독성과 수정을 쉽게 하기 위해서 사용합니다.
3) 주석문
/* 로 시작하여 */ 로 끝나며 그 사이에 존재하는 것들은 프로그램의 실행에는 아무런 영향을 주지 않으며 주로 프로그램의 판독성을 높이기 위하여 사용됩니다.
4) 변수 선언
변수 선언은 프로그램 내에서 사용될 변수를 나타내는 것으로 선언문은 반드시 실행문전에 선언되어야합니다.
5) 변수에 값 할당(10과 20이 각각 num1과 num2에 들어간다)
6) 변수에 대한 연산( 30이 total에 지정됨).
7) 변수 값을 모니터로 출력함. 값을 출력하기 위해서는 값에 대한 포맷(어떤 형의 변수라는 것을 지정) 과 변수 명을 기재하여야 합니다.
8) 프로그램 종료를 위해 exit(EXIT_SUCCESS)를 사용. exit은 프로그램을 종료하기 위한 표준 방법이며 종료 시에는 프로그램 수행 시에 열렸던 모든 파일을 닫습니다.
1.5 C 프로그램의 파일들
여기서는 프로그램을 작성하여 실행하기 까지 생성되는 여러 가지 파일에 대하여 설명하겠습니다. 물론 어떠한 C 프로그램을 사용하느냐에 따라 부가적인 여러 가지 다른 파일이 생성될 수도 있습니다. 그러나 선택한 C 컴파일러에 상관 없이 공히 생성되는 파일을 설명하겠습니다.
1) 소스 파일(source file)
- 여러분이 직접 작성해야 하는 파일로써 위의 예제가 그 소스 파일로써 확장자가 c(또는 cpp)입니다. 그러나 이 파일은 실행되는 파일이 아니고 일단 컴파일(compile)이라는 과정을 거쳐 번역이 되어야 합니다. 만약 번역이 제대로 되지 않으면 오류(error)가 발생하며 오류가 발견되지 않을 경우에만 목적 파일이 제대로 만들어집니다. 또한 경고(warning) 이 발생하기도 하는데 경고 메시지는 경우에 따라 오류가 될 수도 있고 아닐 수도 있기 때문에 상황에 따라 판단을 해야합니다(초보자 때에는 선생님에게 물으세요).
2) 목적 파일(object file)
- 컴파일러를 통하여 번역이 끝난 프로그램(실행 불가)으로 확장자가 o 또는 obj입니다. 그러나 아직 프로그램을 실행되지 않습니다. 링크(link : 컴퍼일어에 따라 make 또는 build 라고 불리기도 함)라는 과정을 거쳐 실행에 필요한 여러 가지 시스템 기능들과의 연계가 필요합니다. 번역의 경우와 마찬가지로 오류(error) 및 경고(warning)가 발생하며 실행 파일이 만들어지지 않습니다.
3) 실행 파일(executable file)
- 실행에 필요한 링크가 끝난 상태(실행 가능)로 확장자가 exe입니다. 따라서 여러분은 이 파일을 실행시키면 원래 소스 파일에서 기재한 내용이 실행되는 것을 볼 수 있습니다.
그리고 프로그램의 실행을 위해서는 다음과 같은 절차를 거쳐야 합니다.
1) 먼저 컴파일러를 부른 다음 에디터를 사용하여 소스 파일을 작성한다.
2) 컴파일을 통하여 문법적 오류를 체크한다.
3) 2)의 과정에서 오류(또는 경우에 따라서 경고도 해당)가 발생하면 다시 1)로 가서 파일을 수정한 다음 2)까지를 반복한다. 오류가 없을 경우에는 링크를 하여 실행 파일을 만든다.
4) 실행 파일을 실행(run)한다.
1.6 C 프로그램의 구성 요소
C로 짜여진 모든 프로그램은 최소한 하나 이상의 함수로 구성되며 각각의 함수는 1개 이상의 문장(statement)으로 구성되어 있습니다. 또한 각각의 문장은 ; (세미콜론: semi colon )으로 끝나며 세미콜론을 만나야 한 문장의 끝으로 간주합니다. 하나의 프로그램은 여러 개의 함수를 포함할 수 있지만 반드시 존재해야하는 함수가 하나 있으며 바로 main 함수이다. 다른 모든 함수들은 이 메인 함수를 통해서 접근이 가능하다. 위의 예제에서 프로그램의 내용은 메인 함수 하나만 존재하며 프로그램의 내용은 중괄호 ‘{’ 에서 시작하여 ‘}’ 로 끝나는 가운데 존재하는 실행 문들이 실행된다.
< 간단한 프로그램 작성하기 >
자 ! 그럼 프로그램을 작성하는 방법을 배워보도록 합시다. 앞에서 설명한 바와 같이 어떠한 프로그램을 작성하더라도 프로그램의 기본 골격은 다음과 같다는 사실을 명심하시고...
#include <stdio.h>
#include <stdlib.h>
int main()
{
return 0;
}
위의 프로그램을 에디터를 사용하여 에디팅을 끝낸 다음 실행을 시켜보자. 에디터를 통하여 위와 같이 에디팅한 다음 컴파일 및 링크를 시키고 실행하여 보면 위의 프로그램은 에러는 발생하지 않으나 아무런 변화가 화면에 나타나지 않는다는 것을 알게될 것이다. 그 이유는 위의 프로그램이 오류는 없기는 하나 실제 아무런 내용이 없기 때문에 화면에는 아무 것도 나타나지 않는 것이다.
그래서 이번에는 다음과 같이 위의 프로그램을 수정해보자. 만약에 여러분이 화면에 “안녕하세요” 라는 문장을 출력하고자 한다면 어떻게 해야 하겠는가? 문장을 화면에 출력하기 위해서는 문장을 화면에 출력하기 위한 C의 함수를 알아야 한다. 함수는 뒤에서 배우기 때문에 여기서는 자세한 설명은 생략하고 화면에 문장을 출력하기 위한 함수는 printf 라는 정도만 여기서 언급하자. printf는 다음과 같은 형태로 사용된다.
printf("출력하고자 하는 문장“);
만약에 "안녕하세요“ 라는 문장을 화면에 출력하기 위해서는 다음과 같이 printf문을 수정하여야 한다.
printf("안녕하세요");
이렇게 하면 “안녕하세요”라는 문장이 화면에 나타난다. 여기서 뒤에 붙어있는 ;를 유의 깊게 봐야한다. 여러분이 프로그램 작성 시 가장 흔히 하면서도 가장 발견하기 어려운 오류 중에 하나가 바로 문장의 마지막에 ;을 찍지 않는 것이다.
명심하라. C에서의 모든 문장은 ; 로 끝난다는 사실을(물론 예외도 있지만 그 예외는 아주 소수이므로 무시할 수 있다)....
자 ! 그러면 위의 문장이 어떻게 해야 실행될까 ? 그냥 위에서처럼 적기만 하면 실행될까 ? 결론부터 말하면 아니올시다 이다. 앞에서도 말했듯이 C의 프로그램은 일정한 모양새를 갖추어야 한다. 따라서 위에서 말한 기본 골격 속에 들어가야 한다. 자! 그러면 도대체 문장 printf("안녕하세요\n");를 ①,②,③ 중 어디에 집어넣어야 할 까 ?
#include <stdio.h>
#include <stdlib.h>
①
int main()
{ // 문장이 들어가야 하는 시작점
②
return 0;
③
} // 문장들의 종료를 표시
결론부터 말하면 ① 의 위치에 문장을 삽입하면 에러가 발생합니다. 그 이유는 C에서의 모든 문장은 { 과 } 사이에 존재해야 하기 때문이지요. 말하자면 { 과 } 은 문장들을 가두기 위한 울타리 역할을 합니다. ③ 에 넣으면 에러는 발생하지 않지만 문장이 실행되지 않는데 이유는 return 문장은 그 함수의 종료를 알리는 문장이기 때문입니다. 시쳇말로 버스 떠난 다음에 손들어 봐야 버스가 다시 돌아올 리 만무하지 않은가 ? 따라서 답은 ② 의 위치에다가 문장을 갖다 두어야만 문장이 실행될 수 있으며 다음과 같이 함수가 구성되어야 한다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("안녕하세요“);
return 0;
}
자! 이제 컴파일 및 링크를 한 다음 프로그램을 실행시켜 보면 화면에
안녕하세요
라는 문장이 나타날 것이다. 자 ! 그럼 배운 것을 토대로 하여 다시 한 문장을 추가해 보자. 이번에는
안녕하세요
컴퓨터 정보계열 새내기입니다
라는 두 개의 문장을 라인을 바꾸어 출력해보기로 합시다. 어떻게 하면 될까? 그냥 두 개의 문장을 붙여서 출력한다면 아무런 문제가 없다. 그러나 여기서는 두 개의 문장을 라인을 바꾸어 출력해야하므로 라인을 바꿀 수 있는 방법을 알아야 한다. 라인을 바꾸기 위해서는 \n라는 특수 문자를 사용하여야 한다. \n은 무엇일까 ? 이것 역시 뒤에서 언급하기 때문에 여기서는 자세한 사항은 설명하지 않는다. 단 \n 라인을 바꾸는 문자라는 정도만 기억하라. 따라서 다음과 같이 문장을 작성하여야 한다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("안녕하세요\n“); => 뒤에 n\가 있는 것에 유의 할 것
printf("컴퓨터 정보계열 새내기 입니다\n“)
return 0;
}
자 ! 여기서 1장을 끝냅시다. 쉬운가요 ? 아마 반반 일겁니다. 어렵다고 생각하는 사람은 다시 한번 생각해 보세요... 무엇이 어려운지 ... 그걸 생각해내서 선생님께 물어보는 지혜가 필요하겠지요. 그냥 넘어가지 말고.... 2장 부터는 조금씩 더 어려워지기 시작하니 쌍ㅋㅎ피 흘린다는 마음의 각오를 하시기바랍니다. 그전에 밑에 문제부터 한번 풀어보고 ...
< 1장을 공부한 내공을 겨루는 문제 >
다음과 같은 문장을 출력하는 프로그램을 p+반번호의 파일 이름으로 작성해보기 바랍니다.(예 : 1학년 1반 1번의 경우 소스 프로그램 이름이 p1101.c가 되어야 한다).
안녕하세요 저는 홍길동이고 반번호는 ???? 학번은 ?????????입니다.
이 프로그램은 저의 첫 번째 C 프로그램입니다.

Comments List
나머지 자료들 http://blog.naver.com/adk2000kr/20000976589
嫄몄