▩ 자료형의 종류
 

- 하드웨어의 제한된 CPU Resource와 Memory 때문에 데이터 타입을 정확하게 지정을 해야 메모

  리와 프로세서의 낭비를 줄일 수 있습니다.


1. 자료형의 종류

   - 기본형-문자형     크기      기억되는 값의 범위
     . char                1 Byte    -128 ~ 127

     ※ 바이트 분리의 원리

        0000 0000 ---> 0
        0000 0001 ---> 1
        ~
        ~
        0111 1111 --->  127 

                               OS는 지정된 데이터크기의 첫비트가 0이면 양수, 1이면 음수로 처리합니다.
        1000 0000 ---> -128  첫비트가 1임으로 음수로 처리됩니다.
        1000 0001 ---> -127
        1000 0010 ---> -126
        1000 0011 ---> -125
        ~
        ~
        1111 1111 ---> -1
        0000 0000 ---> 0



     . unsigned char   1 Byte    0 ~ 255

   - 기본형-정수형     크기      기억되는 값의 범위
     . short           2 Byte    -32768 ~ 32767
     . unsigned short  2 Byte    0 ~ 65535
     . int             2,4 Byte  -32768 ~ +32767, -2147483648 ~ 2147483647
     . unsigned int    2,4 Byte  0 ~ 65535, 0 ~ 4294967295
     . long            4 Byte    -2147483648 ~ 2147483647
     . unsigned long   4 Byte    0 ~ 4294967295
 
   - 기본형-실수형     크기      기억되는 값의 범위
     . float           4 Byte    3.4e-38 ~ 3.4e38
     . double          8 Byte    1.7e-308 ~ 1.7e308
     . long double     10 Byte   3.4e-4932 ~ 3.4e4932
  
   - 기본형-나열형
     . enum            enum{sero, one, two, three, four} a, b

   - 기본형-무치형
     . void

   - 합성형-배열형
     . int a[5]

   - 포인터형 int *ptr
  
   - 구조체형   struct

   - 공용체형   union




2. 최대 최소값의 연산

   컴퓨터                    사람
============================
  01111111 11111111 =  32767
+                        1
-------------------
  10000000 00000000 = -32768


   컴퓨터                    사람
============================
  10000000 00000000 = -32768
-                        1
-------------------
  01111111 11111111 =  32767



>>>>> 관련 예제


#include <stdio.h>
#include <conio.h>

void main() {
    char k;  //-128 ~ +127

    k=127; printf("k=%d", k); //127
    printf("\n");

    //127+1: const int
    k=127+1; printf("k=%d", k); //-128
    printf("\n");

    //-128 + (255-128) = -1, 11111111
    k=255; printf("k=%d", k); //-1
    printf("\n");

    //11111111 + 1 = 00000000
    k=256; printf("k=%d", k); //0

}




>>>>> sizeof()함수의 사용


 #include <stdio.h>

 void main() {
   char c;
   int i;
   long l;
   unsigned int ui;
   unsigned long ul;
   float f;
   double d;

   printf("c형의 크기는 %d바이트입니다.\n", sizeof(c));
   printf("int형의 크기는 %d바이트입니다.\n", sizeof(i));
   printf("long형의 크기는 %d바이트입니다.\n", sizeof(l));
   printf("unsigned int형의 크기는 %d바이트입니다.\n", sizeof(ui));
   printf("unsigned long형의 크기는 %d바이트입니다.\n", sizeof(ul));
   printf("float형의 크기는 %d바이트입니다.\n", sizeof(f));
   printf("double형의 크기는 %d바이트입니다.\n", sizeof(d));
  
   printf("\n상수의 데이터사이즈\n");
  
   printf("a문자의 크기 %d입니다.\n", sizeof('a'));  //1
   printf("b문자의 크기 %d입니다.\n", sizeof('b'));  //1

   //'a', 'b', '\0'
   printf("ab문자의 크기 %d입니다.\n", sizeof("ab"));//3
   printf("abcd의 크기 %d입니다.\n", sizeof("abcd"));//5
   printf("10의 크기 %d입니다.\n", sizeof(10));      //4

   printf("10.5의 크기 %d입니다.\n", sizeof(10.5));  //8
   printf("10.5의 크기 %d입니다.\n", sizeof(10.5f)); //4
 }




3. %d의 출력(#은 공백을 의미)
   - 123일경우
      %d: 123
     %7d: ####123
     %7d: ###1234
     %7d: ##12345



4. %f의 출력
   - %10.3f 처럼 사용
   - 소수 자릿수 지정시 자동 반올림
   - 전체 자리수가 많으면 왼쪽 부분이 공백으로 채워짐

   - 데이터가 123.456일경우의 출력결과
     %7.3f : 123.456
     %8.3f : #123.456
     %8.4f : 123.4560
     %8.2f : ##123.46 <-- 자리올림 발생
     %2.1f : 123.5    <-- 전체자리수 보다작은 자리수는 사용하지 말것
     %.1f  : 123.5    
     %8.0f :      123 <-- 정수만 나옴




>>>>> 실수형의 출력


 #include <stdio.h>

 void main() {
   float f=256.124;
   float g=256.0;
   float h=256;

   printf("%f\n", f);
   printf("%7.3f\n", f);
   printf("%f\n", g); //소수이하 무조건 6자리가 출력됨
   printf("%f\n", h);
 }




>>>>> 소수자리가 6자리가 넘는 경우의 출력


- float형의 경우 소수이하 5자리까지만 정확도가 유지됩니다.
 
#include <stdio.h>
#include <conio.h>

 void main() {
   float k=120.12345678;
   double dk=120.12345678;

   printf("값은: %12.6f\n", k); //120.123459
   printf("값은: %12.7f\n", k); //120.1234589
   printf("값은: %12.8f\n", k); //120.12345886
   printf("\n");
   printf("값은: %12.6f\n", dk);//120.123457
   printf("값은: %12.7f\n", dk);//120.1234568
   printf("값은: %12.8f\n", dk);//120.12345678

   getch();
 }




>>>>> 데이터의 역순으로 출력


- 숫자는 정렬이 오른쪽 기준입니다.
- 문자는 왼쪽 정렬입니다.

#include <stdio.h>
#include <conio.h>

void main() {
  float f=256.124;
  float g=256.0;
  float h=256;

  printf("%-f\n", f);
  printf("%-10.3f\n", f);
  printf("%-10.3f\n", g);
  printf("%10.3f\n", h);
  getch();
}




5. %e의 출력
   - 정수 한자리만 남기고 전부 소수화 시킨다.



>>>>> 지수 형태의 출력


 #include <stdio.h>

 void main() {
   float f=256.124;
   float g=256.0;
   float h=256;

   printf("%e\n", f);
   printf("%e\n", g);
   printf("%e\n", h);
 }




6. %c: 문자의 출력



>>>>> 아스키코드의 출력


 #include <stdio.h>

 void main() {
   char c;

   printf("임의의 문자를 입력하세요 : ");
   scanf("%c", &c);
   printf("입력한 문자 : %c\n", c);
   printf("아스키 코드 : %d\n", c);
 }




>>>>> 문자형식의 연산


 #include <stdio.h>

 void main() {
   char c='c';
  
   printf("원래 문자는 %c입니다.\n", c);
   printf("%c의 다음 문자는 %c입니다.\n", c, c+1);
   printf("%c의 이전 문자는 %c입니다.\n", c, c-1);
   printf("%c의 대문자는 %c입니다.\n", c, c-32);
 }




7. %s: 문자열의 입/출력



>>>>> 문자열의 입력


 #include <stdio.h>

 void main() {
   char name[30], depart[30];

   printf("이름을 입력하세요 : ");
   scanf("%s", name);
   printf("학과를 입력하세요 : ");
   scanf("%s", depart);
   printf("당신의 이름은 %s입니다.\n", name);
   printf("당신의 학과는 %s입니다.", depart);
 }




>>>>> 문자열 입출력


 #include <stdio.h>

 void main() {
   char frt[30];
   int dan, num;

   printf("품목을 입력하세요. ");
   scanf("%s", frt);
   printf("판매단가를 입력하세요. ");
   scanf("%d", &dan);
   printf("판매수량을 입력하세요. ");
   scanf("%d", &num);
   printf("\n");
   printf("   ** 품목별 판매 현황 **\n");
   printf("=============================\n");
   printf("품목\t단가\t수량\t금액\n");
   printf("-----------------------------\n");
   printf("%s\t%d\t%d\t%d\n", frt, dan, num, dan*num);
   printf("-----------------------------\n");
 }

Posted by 나비:D
:

▩ 자료의 입력
 
1. scanf()
   - scanf("제어문자", &변수);: 키보드에서 값을 입력받아 제어문자의 형식으로 변수에 저장한다.



>>>>> 두 수를 입력받아 합을 구하기


 #include <stdio.h>

 void main() {
   int a, b;

   printf("첫번째 숫자를 입력하세요 : ");
   scanf("%d", &a);
   printf("두번째 숫자를 입력하세요 : ");
   scanf("%d", &b);
   printf("%d와 %d의 합은 %d입니다.", a, b, a+b);
 }




>>>>> 10진수를 입력받아 16진수로 출력


 #include <stdio.h>

 void main() {
   int i;

   printf("10진수의 숫자를 입력하세요 : ");
   scanf("%d", &i);
   printf("%d의 16진수는 %X입니다.", i, i);
 
   printf("\n\n");

   printf("16진수의 숫자를 입력하세요 : ");
   scanf("%x", &i);
   printf("%x의 10진수는 %d입니다.", i, i);
 }




>>>>> scanf함수로 한문자 입력 받기


 #include <stdio.h>

 void main() {
   char c;

   printf("한 문자를 입력하세요. ");
   scanf("%c", &c);
   printf("입력된 문자는 %c입니다.");
   putchar(c);
 }



  
UP!!!▷ 국어, 영어 과목의 점수를 입력받아 총점과 평균을 구하는 프로그램을 작성하세요.
 #include <stdio.h>

 void main() {
   int kuk;
   int eng;
   int tot;
   int avg;

   printf("국어 점수를 입력하세요. ");
   scanf("%d", &kuk);

   printf("영어 점수를 입력하세요. ");
   scanf("%d", &eng);

   tot = kuk+eng;
   avg = tot / 2;

   printf("총점:%d 평균:%d\n", tot, avg);
 }




2. getchar()
   - 입력받은 문자를 화면에 출력하고 Enter를 눌러야 진행한다.
   - 키보드에서 입력된 문자를 버퍼에 저장한후 처리한다.
   - getchar() 함수는 항상 입력 버퍼를 검사하며 문자가 있으면 거기서 한 문자를 가져오고, 없으

      면 문자를 콘솔창에서 입력을 받습니다.
   - 'Enter'도 한문자로 처리합니다.
   - scanf() 함수도 같은 원리를 가지고 있습니다.

  


>>>>> 버퍼 사용을 확인하는 입력 예제 getchar()


#include <stdio.h>

void main(){
 char c;

 printf("한 문자를 입력하세요.");

 c=getchar();
 printf("1문자 %c입니다.\n", c);

 c=getchar();
 printf("2문자 %c입니다.\n", c);

 c=getchar();
 printf("3문자 %c입니다.\n", c);

}




>>>>> 버퍼 사용을 확인하는 입력 예제 scanf()


#include <stdio.h>

void main(){
 char c;

 printf("한 문자를 입력하세요.");

 scanf("%c", &c);

 printf("입력된 문자는 %c입니다.\n", c);

 printf("\n");

 scanf("%c", &c);

 printf("입력된 문자는 %c입니다.\n", c);
 putchar(c);
}




3. getch()
   - 프로그램의 진행중 잠시 메세지를 출력하거나 멈춤을 지정할 때 많이 사용한다.
   - 엔터키를 누르지 않아도 진행한다.



>>>>> getch()함수의 이용


 #include <stdio.h>

 void main() {
    char c;

    printf("한 문자를 입력하세요. ");
    c=getch();
    printf("\n입력된 문자는 %c입니다.", c);
   
    printf("한 문자를 입력하세요. ");
 c=getch();
    printf("\n입력된 문자는 %c입니다.", c);
 }




4. 함수 도움말 보기(MSDN 설치)
    - F1, Ctrl + F1




5. 한문자의 입출력 : getchar, putchar
   - getchar의 입력은 반드시 int형 변수를 사용한다.
   - 버퍼로 처리 된다.
   - getchar함수는 입력 종료를 검출하면 -1, EOF를 표시한다.




6. 한 행의 입출력 : gets, puts
   - 문자열은 char의 배열(문자의 배열)이다.
   - gets() 는 엔터를 누를 때까지 입력을 받는다.
   - puts() 는 출력을 하고 개행을 한다.
   - 입력 종료는 null을 검사한다.




7. 변환문자를 통한 입력 함수: scanf(입력 종료는 EOF를 검사한다.)
   - %o   : int            <-- 8진수로 입력
   - %d   : int            <-- 10진수로 입력
   - %ld  : long int, int  <-- 긴 정수형 10진수 입력
   - %x   : int            <-- 16진수 입력
   - %f   : float          <-- 실수 입력
   - %lf  : double         <-- double형 실수 입력
   - %c   : char, int      <-- 한 문자 입력
   - %s   : char *, 배열   <-- 문자열, 배열 입력

Posted by 나비:D
:

▩ C언어 프로그램의 구조


1. C언어 프로그램의 구조와 개행

#include <stdio.h>

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 <stdio.h>

 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");
 }




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 <stdio.h>

 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. 변환문자를 통한 출력 함수: 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 <stdio.h>

 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);
 }

 /*
 10 Base   2 Base   8 Base   16 Base
 -------------------------------------
 0            0        0         0
 1            1        1         1
 2           10        2         2
 3           11        3         3
 4          100        4         4
 5          101        5         5
 6          110        6         6
 7          111        7         7
 8         1000       10         8
 9         1001       11         9
 10        1010       12         A
 11        1011       13         B
 12        1100       14         C
 13        1101       15         D
 14        1110       16         E
 15        1111       17         F
 16       10000       20        10
 
*/




>>>>> 단일문자의 출력


 #include <stdio.h>

 void main() {
   putchar('K');
   putchar('o');
   putchar('r');
   putchar('e');
   putchar('a');
   printf("\n");
   putchar('S');
   putchar('e');
   putchar('o');
   putchar('u');
   putchar('l');
   printf("\n");
 }

Posted by 나비:D
:

▩ C, C++언어의 이해


1. 교육 효과와 방향
   - 메모리에 대한 이해
   - 함수에 대한 이해
   - 포인터에 대한 이해
   - 제어문에 대한 이해




2. 프로그래밍 언어 별 특징
   - C
     . 함수 기반 언어, 배우기 쉽고 구현이 쉽습니다.
     . 프로그램이 커지면 설계가 어렵고 유지보수가 어려워 요즘은 C++ 로 전향되는 경우도 많이

       있습니다.

   - C++
     . C의 특징을 전부 가지고 있습니다. 객체지향의 기술을 구현 할 수 있습니다.
     . 모듈을 객체의 형태로 구현함으로 정확한 설계만 된다면 견고하고 유지보수가 좋은 프로그램

       개발할 수 있습니다.
     . 모든 개발자가 객체지향에 대한 개념이 있어야 개발이 가능합니다.

   - VC++
     . C, C++, Windows 개념

   - VB, Powerbuilder
     . DB 프로그램 제작




3. C 언어의 역사
   - ALG --> CPL --> BCPL --> B --> C --> C++ --> Visual C++ --> C#, Visual C++.net
   - C언어는 1972년 미국의 AT&T Bell 연구소에 근무하는 Dennis Ritchie와 Ken Thompson이 마

     로 컴퓨터 수준의 새로운
     운영체제인 Unix를 개발하던 과정에서 프로그래밍 개발을 위한 도구의 필요성을 느껴 처음 만

     졌다.




4. 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과 같은 확장 문자열의 표현이 가능하다.
   - 함수의 프로토타입을 선언하여 프로그램 작성을 효율적으로 하게 해준다.




5. C++언어의 특징
   - C언어의 특징에 OOP(객체지향)개념을 도입한 언어
   - 클래스란 개념이 도입되었으며 C언어의 구조체의 발전형이다. 구조체처럼 데이터만 가지고 있

      것이 아니라 메소드도 포함하고 있는 단 C++의 변종 구조체는 메소드도 포함한다.
   - 객체라는 개념이 추가되었으며 클래스의 복제판으로 메모리에 저장된다.
   - 연산자 중복기능, 함수 중복 기능, 상속 기능을 가지고 있다.
  


6. 컴파일 과정

      Compiler                Linker -- Library
               ↓                       ↓
   cpp ------------> obj ------------> EXE
   소스파일               기계어 파일          실행파일

Posted by 나비:D
:

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total :
Today : Yesterday :