IT 정보/자바/JSP/EJB

[C/C++] C프로그래밍

김윤석 2007. 7. 26. 14:15
======================================================================================= C C++ 소개 ======================================================================================= 프로그래밍 언어의 시대적 구분 1세대 -> 2세대 -> 3세대 -> 4세대 -> 5세대 기계어 어셈블리 FORTRAN COBOL Pascal Basic C VB Delphi PB C++ Java C++ ---------------------------------------------------------------------------------------- C 언어의 특징 - C언어는 중급 기능의 언어이다. Assembler -- C -- Visual Basic - C언어는 구조화된 언어이다. 함수의 이용 - C언어는 Assembly언어에 비하여 문법이 유연하고, 다른 운영체제에 이식하기 쉬우며, 개발 속 훨씬 빠르다. - C언어는 절차 지향언어이다. 따라서 실행 순서가 매우 중요하다. - 대소문자를 구별한다. - 코드양을 줄이기 위한 다양한 방법이 있다. - 증가, 대입, 조건, 비트, 감소, 컴마, 포인터등 연산자가 풍부하다. - 포인터의 이용으로 메모리를 세밀하게 프로그래밍 할 수 있다. - char, int, float, double, signed, unsigned, long, short, 구조체, 공용체, const, register, 형등 데이터형 다양 - 최소한 1개 이상의 함수로 구성된다. (main()) - if, for, while, do, switch, break, continue등 구조화 제어문이 갖추어져있다. - 컴파일에 앞서 텍스트레벨의 프리프로세서를 지원한다. - C자체 입출력 기능은 없음으로 외부함수로 지원한다. - TAB과 같은 확장 문자열의 표현이 가능하다. - 함수의 프로토타입을 선언하여 프로그램 작성을 효율적으로 하게 해준다. ---------------------------------------------------------------------------------------- C++ 언어의 특징 - C언어의 특징에 OOP(객체지향)개념을 도입한 언어 - 클래스란 개념이 도입되었으며 C언어의 구조체의 발전형이다. 구조체처럼 데이터만 가지고 있 것이 아니라 메소드도 포함하고 있는 단 C++의 변종 구조체는 메소드도 포함한다. - 객체라는 개념이 추가되었으며 클래스의 복제판으로 메모리에 저장된다. - 연산자 중복기능, 함수 중복 기능, 상속 기능을 가지고 있다. ---------------------------------------------------------------------------------------- C언어 프로그램의 구조와 개행 #include void main(){ printf("abc"); printf("def\n"); printf("123\n456\n789\n"); } 출력 결과 abcdef 123 456 789 ---------------------------------------------------------------------------------------- 자료 출력하기 1. 확장 문자의 이해 - '\a': 경보음 07 - '\n': 개행 0A - '\t': 탭 코드 09 - '\000': 8진수 - '\xhh': 16진수 - '\0' : 문자 코드 0, null 문자 확장(제어)문자의 사용 #include void main() { printf("\t** 월별 판매 결과 **\n"); printf("====================================\n"); printf("품목\t서울\t부산\t광주\t인천\n"); printf("------------------------------------\n"); printf("사과\t50\t40\t35\t60\n"); printf("귤\t60\t80\t75\t35\n"); printf("배\t55\t44\t33\t77\n"); printf("------------------------------------\n"); } 출력 결과 ** 월별 판매 결과 ** ====================================== 품목 서울 부산 광주 인천 -------------------------------------- 사과 5 9 1235 1 귤 40 549 5 1160 배 155 1249 3 10 -------------------------------------- 금액 12.2 45.3 814.3 369.3 -------------------------------------- 2. 아스키 코드표의 이해 - 7비트 코드 - 키보드의 자판은 아스키코드로 대응됨 - 8번째 비트가 1인경우 한글을 처리하는 로직을 구성 할 수 있음 3. TAB 키의 작동의 이해 - 탭은 절대 좌표를 사용하며 탭사이즈의 배수 + 1의 위치로 이동함 - 일반적으로 사이즈는 4를 이용합니다. 123456789012345678901234567890 100 1000 10 100 1 1 1,000 5,000 3,500 3,000 4. 문자열 출력 및 제어 문자 출력하기 - printf() . %d : 10진 정수 출력 . %4d : 출력시 자리수를 지정함 숫자의 크기와 관련 없이 무조건 4자리의 공간을 확보함 자리수가 부족해도 정수 부분은 그대로 출력된다. 숫자는 오른쪽 정렬됩니다. . %4f : 실수 출력, 정수 부분이 출력되고 소수는 무조건 6자까지 출력됨 . %4.0f: 소수점은 출력되지 않음 . %4.1f: 소수 자릿수 부족시 반올림 실행, 소수점도 자리수에 해당, 정수는 자리수에 관련 없이 무조건 출력됨, 정수2자리, 실수1자리 . %o : 8진수 출력, 영문 소문자 'o'만 가능 . %x : 16진수 출력, %X는 16진수가 대문자로 출력됨 - putchar() 함수의 사용 . 한문자를 출력합니다. . '': 한문자를 의미 . "": 문자열을 의미, 실제 보이는 문자보다 null문자가 한자 더 있음('\0') >>>>> 제어 문자를 통한 출력 #include void main() { int a=5, b=9, c=1235, d=1; int e=40, f=549, g=5, h=1160; int i=155, j=1249, k=3, m=10; float q=12.24f, w=45.265f, r=814.32f, t=369.254f; printf("\t** 월별 판매 결과 **\n"); printf("======================================\n"); printf("품목\t서울\t부산\t광주\t인천\n"); printf("--------------------------------------\n"); printf("사과\t%4d\t%4d\t%4d\t%4d\n", a, b, c, d); printf("귤\t%4d\t%4d\t%4d\t%4d\n", e, f,g, h); printf("배\t%4d\t%4d\t%4d\t%4d\n", i, j, k, m); printf("--------------------------------------\n"); printf("금액\t%4.1f\t%4.1f\t%4.1f\t%4.1f\n", q, w, r, t); printf("--------------------------------------\n"); } 출력 결과 ** 월별 판매 결과 ** ====================================== 품목 서울 부산 광주 인천 -------------------------------------- 사과 5 9 1235 1 귤 40 549 5 1160 배 155 1249 3 10 -------------------------------------- 금액 12.2 45.3 814.3 369.3 -------------------------------------- 5. 변환문자를 통한 출력 함수: printf(변환 문자열 목록) - %o : int <-- 8진수로 출력 - %d : int <-- 10진수로 출력 - %ld : long int, int <-- 긴 정수형 10진수 출력 - %x, %X : int <-- 16진수 출력, 대소문자 구분 출력 - %f : float, double <-- 실수 출력, 9.f는 반올림이 되어 출력이 됨 소수점은 자리수로 포함이 됨 - %e, %E : float, double <-- 실수를 지수 형식으로 출력, 1.234560e+03, 1.234560e-03 - %c : char, int <-- 한 문자 출력 - %s : char *, 배열 <-- 문자열, 배열 출력 >>>>> 진수 변환하여 출력하기 #include void main() { int a=511; printf("원래의 값은 %d입니다.\n", a); printf("8진수의 값은 %o입니다.\n", a); printf("16진수의 값은 %X입니다.\n", a); printf("1을 더한 값은 %d입니다.\n", a+1); printf("8진수의 값은 %o입니다.\n", a+1); printf("16진수의 값은 %X입니다.\n", a+1); printf("2를 더한 값은 %d입니다.\n", a+2); printf("8진수의 값은 %o입니다.\n", a+2); printf("16진수의 값은 %X입니다.\n", a+2); } 출력 결과 원래의 값은 511입니다. 8진수의 값은 777입니다. 16진수의 값은 1FF입니다. 1을 더한 값은 512입니다. 8진수의 값은 1000입니다. 16진수의 값은 200입니다. 2를 더한 값은 513입니다. 8진수의 값은 1001입니다. 16진수의 값은 201입니다. 진수 표현 10진수 2진수 8진수 16진수 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 C 의 확장 문자 확장 문자 ASCII코드 기능 \0 0x00 null \a 0x07 소리를 낸다 \b 0x08 back space \f 0x0c form feed \n 0x0a new line \r 0x0d carriage return \t 0x09 tab \v 0x0b 수직 tab \\ 0x5c \ 기호 \' 0x2c ' 기호 \" 0x22 " 기호 \? 0x3F ? 기호 C가 전세계적으로 가장 많은 사랑을 받고 가장 널리 사용되는 프로그램 전문 언어 중의 하나이기는 하지만 이 언어 역시 한계에 부딪히게 되었습니다. 이에 따라 고도로 복잡한 프로그램을 관리하기 위하여 C++가 탄생하게 된것이죠. 1980년 잔 트루스트럽(Bjarne Stroustrup)이란 사람이 뉴저지주의 머리 힐에 있 는 벨 연구소에서 근무할 당시 상업용 소프트웨어 개발을 위한 가장 일반적인 언 어였던 C를 확장해서 개체 지향 프로그래밍을 구현하는 데 필요한 기능은 제공하였습니다. 그는 C++를 만들었고, 10년이 채 지나지 않아 소수의 AT&T 개발 자가 사용하는 것에서 시작하여 세계적으로 대략 백만 이상의 개발자들이 선택하 는 프로그래밍 언어가 되었습니다. 처음 이 언어의 이름을 "C with Classes"로 지었는데, 1983년에 C++로 그 이름을 바뀌었습니다. C++는 C 언어의 모든 것을 담고 있기 때문에 C와 호환이 됩니다. 즉 C++는 새로운 프로그래밍 언어가 아니며 이미 널리 사용되고 있는 언어를 향상 시킨 것입니다. C++는 처음 소개된 이후로 1985년과 1989년, 그리고 C++에 ANSI표준을 적용하기 시작한 시기 등 3번에 걸처 개정되었습니다. 1994년에 최초로 표준안이 발표되었으며 ANSI의 C++위원회는 사실상 스트루스트럽 이 설정한 모든 사양을 그대로 수용하고 그 외의 약간의 사양을 덧붙였을 뿐입니다. 그렇기 때문에 C++는 C프로그래머가 쉽게 C++를 사용할 수 있다는 관련성에서 큰 장점이 있습니다. C++은 흔히 객체지향적 언어라고 합니다. 이렇듯 객체 지향 프로그래밍을 지원하도록 고안되었습니다. 객체 지향 프로그래밍은 새로운 방식의 프로그래밍 접근 방법입니다. 프로그래밍이 탄생한 이후로 그 방식은 많은 변화를 겪었는데. 프로그래밍이 현격하게 다른 변혁을 겪을 때마다 새로운 접근 방식이 나타나 프로그래머가 그 전 단계보다 훨씬 더 복잡해진 프로그램을 처리할 수 있도록 도왔습니다. 예전의 구조적인 프로그래밍은 복잡한 프로그램 작성시 프로그램의 규모가 일정 한계를 넘으면 가끔씩 실패하는 경우를 제외하고 상당히 우수한 기능을 해왔지만 그 보다 좀더 복잡한 프로그램을 쓸 수 있는 새로운 프로그래밍 방식이 필요했는데, 그래서 탄생한 것이 객체 지향 프로그래밍(Object Oriented Programming)입니다. OOP는 구조적인 프로그래밍에서 사용되는 개념들을 최대한 활용하여 종전과는 다른 방식으로 이러한 개념을 엮어내는 역할을 합니다. 객체 지향 프로그래밍을 사용하면 한 문제를 관련 하위 그룹으로 나눌 수 있습니다. 각 하위 그룹은 객체와 연결을 시켜주는 고유의 코드와 데이터를 가지고 있는 독립적인 객체가 됩니다. 이렇게 함으로써 문제가 훨씬 더 단순해지고 프로그래머들의 규모가 큰 문제들을 관리할 수 있게 되는 것입니다. C++는 개체 지향 프로그래밍을 완전하게 지원하며 개체 지향 개발의 네 가지 중심인 캡슐화(encapsulation), 데이터 숨김(data hiding), 상속(inheritance), 그리고 다형성(polymorphism)을 모두 포함하고 있습니다. C와C++의 차이점이라면 C 에서는 프로그램을 작성할때 거의 대부분 stdio.h 를 포 함시켰었으나 C++ 에서는 iostream.h 을 사용합니다. C에서 입출력 함수로 애용되던 printf(), scanf()대신 cout, cin등의 객체를 주로 사용합니다. 함수의 선언시에 프로토타입까지 반드시 선언해주어야 하고 매개변수(가인수)의 생략이 불가능합니다. C 의 확장자는 ".C" 인 것에 비해서 C++ 의 확장자는 ".CPP"를 사용합니다. C++에서 향상된점이라면 변수 선언이 함수의 머릿부가 아닌 중간에서도 선언이 가능하다는 것입니다. 그러나 재정의는 불가능합니다. 자동변수는 블럭을 벗어나면 소멸되어 버리지요. C++의 특징은 C의 대부분의 특징을 포함하고 있으므로 시스템 프로그램에 적당할 뿐만 아니라 클래스, 연산자 중복, 가상 함수 등과 같은 특징을 갖추고 있어 객체 지향 프로그래밍에 적합합니다. 또한 C와 일치하는 부분이 C++를 널리 대중적인 언어가 되는데 도움을 주었습니다. --------------------------------------------------------------------------------------