▩ 제어문 - 반복문 while 문


   - 반복 횟수가 지정되어 있지않은 경우
   - 조건식이 참이면 계속 실행한다.


   - 무한 루틴: 무한 루틴인 경우는 대부분 if문과 break문을 동반하는 경우가 많다.
     while(1){
         문장 실행;
     }



>>>>> 1부터 10까지 합을 구하는 while문


 #include <stdio.h>

 void main() {
   int i=1, sum=0;

   while(i<=10) {
     printf("현재 수는 %d입니다.\n", i);
     sum += i;
     i++;
   }
   printf("총합은 %d입니다.\n", sum);
 }




▩ 제어문 - 반복문 do~while 문


   - do-while 문 : 최소한 1회 이상 실행될 필요가 있는 경우



 >>>>> 1부터 10까지 합을 구하는 do~while문


  #include <stdio.h>

 void main() {
   int i=1, sum=0;

   do {
     printf("현재 수는 %d입니다.\n",  i);
     sum += i;
     i++;
   } while(i<=10);
   printf("총합은 %d입니다.\n", sum);
 }




▩ break문을 이용한 루프의 중단


   - 반드시 if문을 동반
   - 반복문 탈출
   - 특정 값에서 반복 처리를 멈추어야 할 경우



>>>>> break문의 이용


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

 void main() {
   int a, b;

   printf("=========\n");
   for(a=1; a<=5; a++) {
      for(b=1; b<=10; b++) {
      printf("A=%d, B=%d\n", a, b);
      if(a==b) break;
      }
      printf("=========\n");
   }
   getch();
 }




▩ continue문을 통한 반복문 흐름의 제어


   - 루프를 탈출하지 않으면서 특정 조건에만 반복루틴을 처리하지 않음
  


>>>>> continue 문의 이용


 #include <stdio.h>

 void main() {
   int a, b;

   printf("=========\n");
   for(a=1; a<=4; a++) {
      for(b=1; b<=4; b++) {
 if(a==b)
    continue;
 printf("A=%d, B=%d\n", a ,b);
      }
   printf("=========\n");
   }  
 }

Posted by 나비:D
:

▩ 제어문 - 반복문 for 문


   - 반복 횟수가 지정되어 있는 경우
   - for문은 내부에 초기화 코드를 가지고 있다.
   - 조건식이 참이면 계속 실행한다.

   for(초기화;  조건식;  재초기화){
     ⓐ -------> ⓑ <-------- ⓓ
                 │           ↗
                 │         /
                 │       /
                 │     /
              printf("★");
                 │ /
                 ↓/
                  ⓒ
             실행 문장;
   }


1. 최초 처리순서
   ⓐ --> ⓑ --> ⓒ --> ⓓ --> ⓔ --> ⓑ --> ⓒ


2. 반복 처리순서
   ⓑ --> ⓒ --> ⓓ --> ⓔ --> ⓑ --> ⓒ



>>>>> 1부터 10까지 출력하는 프로그램


 #include <stdio.h>

 void main() {
   int k;

   for(k=1 ; k<=10 ; k++)
      printf("%d을(를) 출력합니다.\n", k);
 }



>>>>> 100부터 1까지 짝수만 출력하는 프로그램


 #include <stdio.h>

 void main() {
   int i;

   for(i=100; i>0; i=i-2)
      printf("%d을(를) 출력합니다.\n", i);
 }



>>>>> 1부터 10까지의 합계를 구하는 프로그램


 #include <stdio.h>

 void main() {
   int i, sum=0;

   for(i=1; i<=10; i++) {
      printf("%d\n", i);
      sum += i;
   }
   printf("합계는 %d입니다.\n", sum);
 }



>>>>> 1부터 100까지 중에서 3의 배수의 개수와 합계를 구하는 프로그램
 

#include <stdio.h>

 void main() {
   int i, cnt=0;
   long sum=0;

   for(i=1; i<=100; i += 3) {
      printf("%d\n", i);
      sum += i;
      cnt++;
   }
   printf("합계는 %ld입니다.\n", sum);
   printf("개수는 %d개입니다.\n", cnt);
 }


▷ 위의 프로그램을 for문은 for(i=0; i<=100; i++)로 변경하고 if문을 사용하여 같은 결과가 나오도록 수정하세요.



>>>>>> 구구단을 출력하는 중첩된 for 문


 #include <stdio.h>

 void main() {
   int k, j, cnt=0;
   long sum=0;

   for(k=1 ; k<=9 ; k++) {
      for(j=1; j<=9; j++) {
 if(j!=9)
    printf("%d*%d=%2d, ", k, j, k*j);
        else
    printf("%d*%d=%2d", k, j, k*j);
      }
   printf("\n");
   }
 }


▷ 구구단의 반복 횟수 및 합을 출력하는 프로그램으로 수정하세요.


>>>>> 출력하려는 구구단을 입력받는 프로그램


 #include <stdio.h>

 void main() {
   int s, e, i, j;

   printf("구구단의 시작수를 입력하세요 : ");
   scanf("%d", &s);
   printf("구구단의 끝수를 입력하세요 : ");
   scanf("%d", &e);
   for(i=s; i<=e; i++) {
      for(j=1; j<=9; j++) {
       if(j!=9)
   printf("%d*%d=%2d, ", i, j, i*j);
       else
          printf("%d*%d=%2d", i, j, i*j);
      }
   printf("\n");
   }
 }

Posted by 나비:D
:

▩ 연산자


1. 정수 연산자 원리
   정수/정수 = 정수
   정수/실수 = 실수
   실수/정수 = 실수
   실수/실수 = 실수

   - 작은 데이터 타입과 큰 데이터 타입의 경우 항상 작은 데이터 타입은 큰 데이터 타입으로 흡수

      된다.



>>>>> 기본 연산자


 #include <stdio.h>

 void main() {
   int a=10, b=3;

   printf("%d + %d = %d\n", a, b, a+b);
   printf("%d - %d = %d\n", a, b, a-b);
   printf("%d * %d = %d\n", a, b, a*b);
   printf("%d / %d = %d\n", a, b, a/b);

   //특수문자의 출력은 2번 연속해서 입력합니다.
   printf("%d %% %d = %d\n", a, b, a%b); 
 }




2. 증가/감소 연산자
   - 일반 2항연산자보다 처리속도가 빠릅니다.

   - ++a, a++의 개념
     a = a + 1;


   - --a, a--의 개념
     a = a - 1;


   - a = ++b;
     b = b + 1;
     a = b;


   - a = b--;
     a = b;    
     b = b - 1;



>>>>> 증가 연산자


 #include <stdio.h>

 void main() {
   int a=30, b=30;

   printf("원래 a의 값 : %d\n", a);
   printf("원래 b의 값 : %d\n", b);
   printf("++a의 결과 : %d\n", ++a);
   printf("++연산 후의 값 : %d\n", a);
   printf("b++의 결과 : %d\n", b++);
   printf("++연산 후의 값 : %d\n", b);
 }




>>>>> 감소 연산자


 #include <stdio.h>

 void main() {
   int a=30, b=30;

   printf("원래 a의 값 : %d\n", a);
   printf("원래 b의 값 : %d\n", b);
   printf("--a의 결과 : %d\n", --a);
   printf("--연산 후의 값 : %d\n", a);
   printf("b--의 결과 : %d\n", b--);
   printf("--연산 후의 값 : %d\n", b);
 }




>>>>> 상수에 대한 연산은 에러를 발생시킨다.


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

 void main() {
   int a=10;

   printf("++(10)=%d\n", ++(10));
   getch();
 }




>>>>> 권장이 되지 않는 예제


//팀원간 소스분석에 지연 시간이 발생합니다.
//개발후 유지보수에 많은 시간이 소모됩니다.
//소스는 간결하고 분석이 용이해야 합니다.

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

 void main() {
   int a=10;
   int b=10;

   printf("(++a - ++a)+(++b)=%d\n", (++a - ++a)+(++b));
   getch();
 }




3. 할당 연산자
   - +=, -=, *=, /=
   - 연산 속도의 증가가 사용 목적
   - a += b;
     a = a + b;
 


>>>>> 할당 연산자


 #include <stdio.h>

 void main() {
   int a=10, b=3;

   printf("원래 a의 값 : %d\n", a);
   printf("%d + %d의 값 : %d\n", a, b, a+=b);
   printf("변경된 a 값 : %d\n",a);
   printf("%d - %d의 값 : %d\n", a, b, a-=b);
   printf("변경된 a 값 : %d\n",a);
   printf("%d * %d의 값 : %d\n", a, b, a*=b);
   printf("변경된 a 값 : %d\n", a);
   printf("%d / %d의 값 : %d\n", a, b, a/=b);
   printf("변경된 a 값 : %d\n", a);
 }




4. 관계 연산자(비교 연산자)
   <, <=, >, >=, ==, !=
   - 관계 연산자는 참인 경우는 0 이외의 값, 기본 값은 1, 거짓인 경우는 0의 값이 리턴된다.
   - bool 타입이 없습니다.
     . 참: 0 이외의 모든 값은 참입니다. 따라서 -100도 참 입니다.
     . 거짓: 0만 거짓입니다.

 #include <stdio.h>

 void main() {
   int a=10, b=15;

   printf("%d > %d : %d\n", a, b, a>b);
   printf("%d >= %d : %d\n", a, b, a>=b);
   printf("%d < %d : %d\n", a, b, a<b);
   printf("%d <= %d : %d\n", a, b, a<=b);
   printf("%d == %d : %d\n", a, b, a==b);
   printf("%d != %d : %d\n", a, b, a!=b);
}




>>>>> 두개의 수를 입력받아 앞의 수가 크면 1, 그렇지 않으면 0을 출력하는 프로그램


 #include <stdio.h>

 void main() {
   int a, b;

   printf("첫번째 수를 입력하세요. : ");
   scanf("%d", &a);
   printf("두번째 수를 입력하세요. : ");
   scanf("%d", &b);
   printf("%d > %d의 결과는 %d입니다.\n", a, b, a>b);
 }




5. 논리 연산자
   !, &&, ||, &, |

>>>>>>>>>> 비트 and, or 연산자
#include <stdio.h>

main(){
 printf("10 | 3=%d\n", (10 | 3));
 printf("10 & 3=%d\n", (10 & 3));
}

/*
   0000 1010
  +0000 0011
  ----------
   0000 1011 --> 11


   0000 1010
  &0000 0011
  ----------
   0000 0010 --> 2
*/



>>>>>논리 연산자


 #include <stdio.h>

 void main() {
   int a=10, b=15, c=5, d=20;

   printf("%d>%d             => %d\n", a, b, a>b);
   printf("%d<%d             => %d\n", a, b, a<b);
   printf("%d<%d             => %d\n", c, d, c<d);
   printf("!(%d<%d)           => %d\n", c, d, !(c<d));
   printf("(%d>%d) && (%d<%d) => %d\n", a, b, c, d, (a>b)&&(c<d));
   printf("(%d>%d) || (%d<%d) => %d\n", a, b, c, d, (a>b)||(c<d));
   printf("(%d<%d) && (%d<%d) => %d\n", a, b, c, d, (a<b)&&(c<d));
   printf("(%d<%d) || (%d<%d) => %d\n", a, b, c, d, (a<b)||(c<d));
   printf("!(0)=> %d\n", !(0));
   printf("!(1)=> %d\n", !(1));
   printf("!(-100)=> %d\n", !(-100));
 }




 >>>>> 비트 연산자


#include <stdio.h>

 void main() {
   int a=0XD1, b=0XC4;

   printf("%X        => %d\n", a, a);
   printf("~%X       => %X\n", a, ~a);
   printf("%X        => %d\n", b, b);
   printf("~%X       => %X\n", b, ~b);
   printf("%X & %X => %X\n", a, b, a&b);
   printf("%X | %X => %X\n", a, b, a|b);
   printf("%X ^ %X => %X\n", a, b, a^b);
 }
 /*
  11010001
& 11000100
----------
  00010101 ==> 21 ==> 15
               10진수 16진수
 */




 >>>>> 이동연산자


- 왼쪽으로의 이동은 무조건 2배합니다.
- 오른쪽으로의 이동은 무조건 나누기2합니다.
- 2진수는 자리이동에따라 2배가 되던지, 그렇지 않으면 나누기 2배가 됩니다.

  0000 1000 ---> 8
  0001 0000 ---> 16
  0010 0000 ---> 32
 


  #include <stdio.h>

 void main() {
   int a=0XD1, b=0XC4;

   printf("원래의 값 : 10진수(%d), 16진수(%X)\n", a, a);
   printf("1번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 1, a << 1);
   printf("2번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 2, a << 2);
   printf("3번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 3, a << 3);
   printf("4번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 4, a << 4);
   printf("\n");
   printf("원래의 값 : 10진수(%d), 16진수(%X)\n", b, b);
   printf("1번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 1, b >> 1);
   printf("2번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 2, b >> 2);
   printf("3번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 3, b >> 3);
   printf("4번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 4, b >> 4);
 }

 /*
 0  0  0  0  0  0  0  0
 ----------------------
 12864 32 16 8  4  2  1
 */

Posted by 나비:D
:

▩ 변수의 이해 및 작성 규칙


1. 변수의 특징
   - 변수명은 영문자, 숫자, 밑줄(_) 문자만을 사용한다.
   - 변수명의 첫 문자는 반드시 영문자나 밑줄 문자이어야 한다.

      숫자는 변수명의 첫자로 올 수 없다.
   - 첫 문자를 숫자로 시작하면 상수로 인식한다.
   - 용도가 지정되어 있는 예약어는 변수명으로 사용할 수 없다.
   - 변수명은 가급적 의미 있는 이름을 사용한다.
   - C언어는 대소문자를 구별함으로 변수명에 대소문자를 주의한다.
   - 변수나 메소드의 첫자는 소문자, 클래스는 대문자를 주로 사용한다.
   - 변수의 마디는 대문자를 사용하는 경우가 많다.



2. 변수의 작성 규칙
   - 헝가리언 표기법
     . 회사이름: cn, comName, _com_name

   - 스칼라 표기법
     . 첫자를 무조건 대문자로하는 의미있는 변수명을 줍니다.
     . 회사이름: CompanyName, CompanyArea




>>>>> 상수를 이용하여 합, 차, 곱을 계산한 경우


 #include <stdio.h>

 void main() {
   printf("%d와 %d의 합은 %d입니다.\n", 30, 15, 30+15);
   printf("%d와 %d의 차는 %d입니다.\n", 30, 15, 30-15);
   printf("%d와 %d의 곱은 %d입니다.\n", 30, 15, 30*15);
 }




▩ 상수(리터럴)


   - 변수의 값 자체를 말합니다.
   - 숫자 상수: 10
   - 문자 상수: 'a'
   - 문자열 상수: "ABCDE"





>>>>> 간단한 성적처리 프로그램(정확한 소수 출력하도록 수정할 것)


- 변수를 사용하지 않으면 입력을 받을 수 없습니다.
- 정수/정수 = 정수가 됨으로 (float)정수/정수으로 변경하여 처리합니다.
  
 #include <stdio.h>

 void main() {
   char name[30];
   int hak;
   int kor;
   int eng;
   int mat;
   int tot;
   float ave;

   printf("정보를 입력하세요.\n\n");
   printf("이름을 입력하세요 : ");
   scanf("%s", name);
   printf("학번을 입력하세요 : ");
   scanf("%d", &hak);
   printf("국어점수를 입력하세요 : ");
   scanf("%d", &kor);
   printf("영어점수를 입력하세요 : ");
   scanf("%d", &eng);
   printf("수학점수를 입력하세요 : ");
   scanf("%d", &mat);
   tot=kor+eng+mat;
   ave=tot/3;
   printf("이름 : %s\n", name);
   printf("학번 : %d\n", hak);
   printf("국어 : %d\n", kor);
   printf("영어 : %d\n", eng);
   printf("수학 : %d\n", mat);
   printf("합계 : %d\n", tot);
   printf("평균 : %f", ave);
 }




>>>>> 변수의 초기화


- 변수에 미리 값을 할당하는 것을 초기화라고합니다.

 #include <stdio.h>

 void main() {
   char name[30]="Hong";
   int hak=3214;
   int kor=78;
   int eng=96;
   int mat=54;
   int tot=kor+eng+mat;
   float ave=tot/3;

   printf("이름 : %s\n", name);
   printf("학번 : %d\n", hak);
   printf("국어 : %d\n", kor);
   printf("영어 : %d\n", eng);
   printf("수학 : %d\n", mat);
   printf("합계 : %d\n", tot);
   printf("평균 : %f", ave);
 }




>>>>> 서로다른 형의 계산


- 작은 타입은 큰 변수 타입으로 흡수됩니다.
 
 #include <stdio.h>

 void main() {
   char c = 'T';
   int i = 10;
   float f = 20.1;

   printf("%c+%d = %d\n", c, i, c+i);
   printf("%d+%f = %f", i, f, f+i);
 }




>>>>> cast연산의 사용 1


 #include <stdio.h>

 void main() {
   int i = 10, j = 20;
   float f = 30.1;

   printf("%d+%f = %f\n", i, f, f+i);
   printf("%d+%f = %d\n", i, f, (int)f+i);
   printf("%d+%d = %f\n", i, j, (float)i+j);
 }




>>>>> cast 연산의 사용 2


 #include <stdio.h>

 void main() {
   char c = 'A';
   int i = 10;
   float f = 3.2;

   printf("(int)(c+i+f)의 결과 : %d\n", (int)(c+i+f));
   printf("(c+i+f)의 결과 : %f\n", c+i+f);
   printf("(int)f*i-2의 결과 : %d\n", (int)f*i-2);
   printf("f*i-2의 결과 : %f\n", f*i-2);
 }

Posted by 나비:D
:

▩ 자료형의 종류
 

- 하드웨어의 제한된 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
:

Export와 Import는 가장 유용하게 그리고 자주 사용되는 백업관련 DBA ToolKit 입니다.


SQL*Loader는 외부 데이터를 오라클 서버로 업로드 하는 역할을 수행 하지만 Export/Import는 오라클 서버의 데이터를 다른 오라클 서버(이때 플랫폼과는 무관하다. 예를 들어 윈도우용 오라클에서 Export 받은 파일을 Unix/Linux 서버 기반의 오라클로 Import 하는것이 가능하다) 또는 같은 서버의 다른 사용자로 Import 하는 것이 가능 하다.
먼저 Export부터 그 사용법에 대해 알아 보기로 하자.

1. Export
- EXport는 데이터베이스의 논리적인 백업을 제공 한다. 즉 테이블, 데이블스페이스, 데이터를 포함한 사용자, 그리고 사용자가 만든 스키마 오브젝트(Index, View, Synonym, Trigger, DataBase Link, sequence, stored code 등등)등을 백업 받을 수 있는 것이다.

- Export 유틸리티의 Output은 export dump 파일 이다. 이 파일은 import Utility를 통해 읽혀져 다른 데이터베이스등으로 복구 되는 것이다.

- Export 파라미터
  많은 파라미터중 UserID라는 파라미터는 꼭 가져야 한다는 것을 기억 하자. Exp 명령 입력하고  아무 파라미터도 주지 않는 경우 기본(Default) 값을 제공하면서 입력을 위한 프롬프트를 보여준다.(이때 사용자 ID와 ORD)는 반드시 입력해야 한다.

  USERID : username/password를 값으로 입력 한다. 반드시 입력해야 한다. 만약 전체 데이터베이스를 백업 받기 위해 서는 기술된 User는 명시적으로 exportfull database 롤(Role)을 부여 받아야 한다.

 

  FILE :  출력 파일의 이름(Export후 생기는 dump 파일 이름)

 

  ROWS : Export Dump 파일에 테이블 행(데이터) 포함 여부 표시: (Y)es/(N)o 만약 여러분이 테이블 구조만 export하고 실제 row data는 백업을 원하지 않는 경우에는 rows=n 이라고 명시 해야 한다.(default값은 y)

 

  Query : 테이블의 특정 부분만을 Export 하기 위해서 사용 한다.
       (exp userid=scott/tiger tables=emp query=\"where sal \> 2000 \
  -----------------------------------------  
  Export Mode와 관련된 파라미터

  FULL : DataBase 레벨의 Export를 수행할지 여부를 표시, 전체 데이터베이스 익스포트 여부를 표시: (Y)es/(N)o
            (exp userid=system/manager full=y)

 

  OWNER : Schema Level의 EXport를 수행 할지의 여부를 표시 Export를 원하는 사용자이름을 기술 한다.
               (exp userid=system/manager owner=(scott)
  TABLES : export할 테이블 테이블 리스트 또는 (Y)es/(N)o
                 (exp userid=system/manager tables=(emp, dept, salgrade)
                 (exp userid=system/manager tables=(scott.emp%)
  TABLESPACE : export를 원하는 테이블스페이스(TableSpace)를 기술
               (exp yserid=system/manager tablespaces = (users) )
  -----------------------------------------------------------------------------                
  INDEXES, CONSTRAINTS, GRANTS, TRIGGERS : Index, Constraints, grant,  
                 triggers등을 export할지의 여부를 지정 (Y)es/(N)o, 기본적으로 앞 4개의 스
                 키마 오브젝트는 Export 됨
                 (exp userid=scott/tiger indexes=n constraints=n grants=n triggers=n)
 
  DIRECT : Direct 모드 익스포트 유무 (Y)es/(N)o  
  INCTYPE :  익스포트 레벨 유형
  PARFILE :  파라미터가 명시된 파일의 이름, Export인자들이 많을 경우 별도의 파일로
                  서 관리 가능
  HELP :  대화식 모드에서 익스포트 파라미터 디스플레이 (Y)
  LOG : 로깅 메시지를 위한 파일이름을 기술 한다.
  CONSISTENT : 익스포트 동안 데이터 갱신시 데이터베이스의 읽기 일관성 뷰 제공  
                        유무: (Y)es/(N)o
  BUFFER : 바이트로된 데이터 버퍼 크기: (정수)
  COMPRESS : 하나의 익스텐트(Extent)에 모든 데이터를 포함시킬지 명시, (Y)es/(N)o

  * Direct Path 익스포트 개념
     Direct Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 export할 수 있다.  

   * Direct-Path 익스포트의 구조  
    export시 direct 모드의 사용은 파라미터 DIRECT=Y라고 기술함으로써 설정될 수 있다  
    Direct Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않으며 세션에 의해 사용
    되는 private area로 데이터베이스 블록을 읽어 들인다.
    행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동되며 이 TTC 버퍼  
    내의 데 이터는 Export의 형식으로 되어 있다.  

    ---------------------------------------------------------------
    Export의 예 1 : exp 라는 명령만 입력 함으로서 대화식으로 export 처리
    ---------------------------------------------------------------
   D:\backup>exp

   Export: Release 9.2.0.1.0 - Production on 일 Jan 11 22:51:41 2004

   Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


   사용자명: scott
   암    호:

   다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
   With the Partitioning, OLAP and Oracle Data Mining options
   JServer Release 9.2.0.1.0 - Production
   배열 인출 버퍼 크기 입력: 4096 >

   엑스포트 파일: EXPDAT.DMP >

   (2)U(사용자), 또는 (3)T(테이블): (2)U >

   권한부여 엑스포트 (yes/no): yes >

   테이블 데이터 엑스포트 (yes/no): yes >

   확장 영역 압축 (yes/no): yes >

   KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되
   었습니다

. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블   ADDRBOOK(를)을 엑스포트 중          3 행이 엑스포트됨
. . 테이블   EMP(를)을 엑스포트 중         15 행이 엑스포트됨
......
. 동의어 엑스포트 중
. 뷰 엑스포트 중
. 저장 프로시저 엑스포트 중
. 작업을 엑스포트합니다
. 참조 무결성 제약조건 엑스포트 중
. 트리거 엑스포트 중
. 인덱스유형을 엑스포팅합니다
. 비트맵, 함수, 기능과 확장 가능한 인덱스들을 엑스포트합니다
. 이후 테이블 처리를 엑스포트 중
. 구체화된 뷰 엑스포트 중
. 스냅샷 로그 엑스포트 중
. 작업 대기열을 엑스포트 중
. 리프레쉬 그룹과 자식 엑스포트 중
. 차원을 엑스포트합니다\
. 스키마 이후 단계의 객체와 작업을 엑스포트합니다\r

. 통계를 엑스포트합니다
엑스포트가 경고 없이 정상적으로 종료되었습니다.

   D:\backup>dir
    D 드라이브의 볼륨: data1
    볼륨 일련 번호: 2434-2E50

    D:\backup 디렉터리

   2004-01-11  11:07p    <DIR>          .
   2004-01-11  11:07p    <DIR>          ..
   2004-01-11  11:08p           51,200 EXPDAT.DMP <-- 이름을 안주면 이 이름으로 생성
               1개 파일          51,200 바이트
               2 디렉터리   2,185,789,440 바이트 남음




    ---------------------------------------------------------------
    Export의 예 2 : SCOTT 계정의 모든 오브젝트를 Export
    ---------------------------------------------------------------
   D:\backup>exp userid=scott/tiger file=scott.dmp  
   또는    D:\backup>exp userid=system/manager owner=scott file=scott.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:24:38 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
\
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블          ADDRBOOK(를)을 엑스포트 중          3 행이 엑스포트됨
. . 테이블          EMP(를)을 엑스포트 중         15 행이 엑스포트됨
    .......................

    엑스포트가 경고 없이 정상적으로 종료되었습니다.

   D:\backup>dir
    D 드라이브의 볼륨: data1
    볼륨 일련 번호: 2434-2E50

    D:\backup 디렉터리

   2004-01-11  11:24p      <DIR>          .
   2004-01-11  11:24p      <DIR>          ..
   2004-01-11  11:08p              51,200 EXPDAT.DMP
   2004-01-11  11:24p              51,200 scott.dmp
                  2개 파일         102,400 바이트
                  2 디렉터리   2,185,736,192 바이트 남음


    

    ---------------------------------------------------------------
    Export의 예 3 : scott 계정의 emp, dept 테이블의 구조만 Export
    ---------------------------------------------------------------
   D:\backup>exp userid=scott/tiger tables=(emp, dept) rows=n file=structure.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:29:15 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다

경고: 테이블 데이터(행)가 엑스포트 되지 않습니다

지정된 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블                            EMP(를)을 엑스포트 중
. . 테이블                           DEPT(를)을 엑스포트 중
엑스포트가 경고 없이 정상적으로 종료되었습니다.

D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11  11:29p      <DIR>          .
2004-01-11  11:29p      <DIR>          ..
2004-01-11  11:24p              51,200 scott.dmp
2004-01-11  11:29p               4,096 structure.dmp  <--------
               3개 파일          59,392 바이트
               2 디렉터리   2,185,781,248 바이트 남음

    ---------------------------------------------------------------
    Export의 예 4 : 전체 데이터베이스 백업
    ---------------------------------------------------------------
    D:\backup>exp userid=system/manager full=y file=full.dmp

    


2. Import
   Import Utility는 Export를 통해 생성된 덤프파일을 읽어 데이터베이스 복구를 진행  
   한다.  

   파라미터

   USERID : Import를 수행 할  객체의 사용자이름/패스워드  
   FILE : 입력 파일 이름. Export를 통해 생성된 파일  
   IGNORE : Import시 테이블이나 인덱스와 같은 스키마 오브젝트는 기본적으로 만들려
                 고 시도한다. 이때 비록 비어있지만 객체가 이미 존재 한다면 존재함으로 인
                 한 생성 에러가 나타나는데 이를 무시한다는 의미 이다.(default n)
   ROWS : Import시 테이블의 Row를 임포트 할것인지의 여부를 지정
               (default y)
   TABLES : 임포트시킬 테이블(default y)
   INDEXES : 임포트시킬 인덱스(default y)
   CONSTRAINTS : Constraint들을 import할 전지의 여부를 표시(default y)
   GRANTS : GRANT들을 임포트 할건지의 여부(default y)  
   INCTYPE : 증분적 임포트 유형 명시. SYSTEM 및 RESTORE 옵션이 있음.
   PARFILE : 파라미터 명시 파일, 파라미터등이 많아 복잡한 경우에 사용  
   HELP :  대화식 모드로 익스포트 파라미터 디스플레이.
   LOG : 로그 파일명  
   INDEXFILE : Index-creation 명령을 수용할 파일 명시.
   ---------------------------------- Import Mode와 관련된 파라미터
   FULL :  전체 데이터베이스를  임포트함.  
   Schema Level에서는 fromuser, touser를 사용한다.    
       DBA이거나 import full database role을 부여 받지 않았다면 import를 수행하는 사용
       자의 스키마에서만 import를 할 수 있다. 이를 해결하기 위해 fromuser, touser를 사
       용 한다.
      - FROMUSER :  임포트시킬 객체를 포함하는 스키마 리스트.
      - TOUSERS : 사용자의 스키마가 임포트될 사용자 리스트 명시.  
   Table level에서는 tables 파라미터를 사용한다.
      - Tables : 기술된 테이블들이 임포트 된다.
    
   예) $imp userid=system/manager full=y
        $imp userid=system/manager fromuser=scott touser=test
        $imp userid=system/manager tables=(scott.emp, scott.dept)
   -----------------------------------------------------------------

   DESTROY : Import 시  Import Utility는 필요하다면 어떠한 테이블 스페이스에 대해 만
                    들 수도 있다. 만약 destroy=y이면 export dump 파일안에 같은 이름을 가
                    진 data file명이 있다면 import되는 오라클 서버에 대해서 그 파일을  
                    overwrite 한다는 것이다. (default는 n이다.)
                    ($imp userid=scott/tiger destroy=y)



   =========================================================================
   import 예제 1 : scott 계정을 삭제 후 export 받은 백업본을 이용해 복구하기
   =========================================================================

   ---> 아래는 SQL*Plus에서...  
   SQL> connect / as sysdba
      연결되었습니다.
   SQL> drop user scott cascade;
      사용자가 삭제되었습니다.


   ---> 아래는 명령프롬프트에서...
   D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11  11:33p      <DIR>          .
2004-01-11  11:33p      <DIR>          ..
2004-01-11  11:28p               4,096 EXPDAT.DMP
2004-01-11  11:36p             548,864 full.dmp
2004-01-11  11:24p              51,200 scott.dmp
2004-01-11  11:29p               4,096 structure.dmp
               4개 파일         608,256 바이트
               2 디렉터리   2,185,232,384 바이트 남음

D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:20:59 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
IMP-00003: ORACLE 오류 1435 가 발생했습니다
ORA-01435: 사용자가 존재하지 않습니다
경고와 함께 임포트가 정상 종료되었습니다.


---> 다음은 SQL*Plus에서...
SQL> create user scott identified by tiger
  2  default tablespace users
  3  temporary tablespace temp
  4  quota 100m on users;

사용자가 생성되었습니다.

SQL> grant connect, resource to scott;
권한이 부여되었습니다.

SQL> connect scott./tiger;
연결되었습니다.

SQL> select * from tab;
선택된 레코드가 없습니다.


---> 다음은 명령 프롬프트에서...
 
D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:33:32 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블     "ADDRBOOK"(를)을 임포트 중          3 행이 임포트되었습니다.
  . 테이블     "EMP"(를)을 임포트 중                   15행이 임포트되었습니다.
  ............
  ............
  임포트가 경고 없이 정상적으로 종료되었습니다.


  SQL>  select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ADDRBOOK                       TABLE
BONUS                             TABLE
CUSTOMER                      TABLE
CUSTOMER1                     TABLE
CUSTOMER2                     TABLE
DEPT                                TABLE
EMP                                 TABLE
EMPLOYEE                       TABLE
EMP_HISTORY                  TABLE
KOR                                 TABLE
LONGTEST                       TABLE

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
MYDEPT                        TABLE
MYEMP                         TABLE
MYTABLE                      TABLE
SALES                           TABLE
SALGRADE                     TABLE
SAWON                          TABLE
S_CUSTOMER                 TABLE
S_DEPT                          TABLE
S_EMP                           TABLE
S_IMAGE                        TABLE
S_INVENTORY                 TABLE

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
S_ITEM                         TABLE
S_LONGTEXT                 TABLE
S_ORD                          TABLE
S_PRODUCT                  TABLE
S_REGION                      TABLE
S_TITLE                         TABLE
S_WAREHOUSE              TABLE
TEST                             TABLE
TIME_TAB                      TABLE

31 개의 행이 선택되었습니다.
  

  =========================================================================
   import 예제 2 : emp Table을 삭제 후 백업본을 이용해 복구하기        
  =========================================================================
  
  --> SQL*Plus에서 ...
  SQL> connect scott/tiger
연결되었습니다.
SQL> drop table emp;
drop table emp
           *
1행에 오류:
ORA-02449: 외래 키에 의해서 참조된 테이블에 유일/기본 키입니다

SQL> drop table emp cascade constraint;
테이블이 삭제되었습니다.

SQL> select count(*) from emp;
select count(*) from emp
                     *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다



  --> 명령프롬프트에서 실행

  D:\backup>imp scott/tiger tables=(emp) file=scott.dmp <-- scott으로 export 받은 경우에...
D:\backup>imp userid=system/manager tables=(emp) file=scott.dmp fromuser=system
touser=scott  <-- system으로 export 받은 경우에...

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:43:45 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블                          "EMP"(를)을 임포트 중         15 행이 임포트
되었습니다
사용 가능한 제약 조건에 관해서...
임포트가 경고 없이 정상적으로 종료되었습니다.

--> SQL*Plus에서 실행
  

SQL> select count(*) from emp;

  COUNT(*)
----------
        15

 

 

Posted by 나비:D
:

1. 콘솔에서 emca 실행

2. 새로운 management server 구성

 
 
 
3. 구성작업을 완성한 후에 콘솔에서 관리 서버의 상태를 확인한다
 
C:\Documents and Settings\Administrator>oemctl ping oms
Windows NT에 대한 OEMCTL: 버전 9.2.0.1.0 Production
Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved.
Management Server가 실행 중입니다.
 
 
C:\Documents and Settings\Administrator>oemctl status oms
    ** 참고 oemctl status oms 명령을 실행하면 팝업이 떠서 super administrator 계정과
        비밀번호를 묻는다. 관리서버가 설치되면 기본적으로 sysman/oem_temp, reports_user/?
        사용자가 존재한다.
Windows NT에 대한 OEMCTL: 버전 9.2.0.1.0 Production
Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved.
호스트 [222.239.137.191]의 Oracle Management Server가 제대로 작동합니다.
  서버가 0 00:34:59.578용으로 실행 중입니다.
  대상 데이터베이스 세션 수: 0 (세션 공유 해제)
  처리 대기 중인 작업: 1
  도메인에 있는 OMS 시스템 수: 1 (222.239.137.191)
  로그인한 관리자 수: 0
  저장소 세션 풀 깊이: 15
  저장소 세션 수: 7 사용 중, 1 사용 가능, 풀 효율성: 83%
 
4. 콘솔에서 oemapp console을 실행한 후 management server 에 접속한다.
   sysman/oem_temp 사용자로 접속한 후 바로 비밀번호를 변경하라는 메세지가 뜬다.
   적절하게 수정하면 em 화면이 뜨는데, 다시 또 노드 검색 마법사가 실행된다.
   로컬 db를 노드로 등록해야 하므로 윈도의 서비스 창에서 agent 서비스를 실행 시킨다.
 
 
 
5. agent 가 정상적으로 작동되면 다음처럼 로컬 db가 노드로 검색된다.

 
 
6.
 
 
 
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/12   »
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 31
Total :
Today : Yesterday :