2010. 7. 8. 18:39
7장 비트 단위 연산과 상수, 기본자료형

개발도구 : Dec C++



& : 비트단위 연산 AND
          ex) a & b

 : 오른쪽 왼쪽 둘다 true 일때 1을 반환
   -> 1 & 1 일때만 1을 반환

ex) 0 & 1 ==> 0
     0 & 0 ==> 0
     1 & 1 ==> 1

EX) ========================================

#include <stdio.h>

int main()
{
    int a = 5;   // 0000 0101
    int b = 20;  // 0001 0100

    int c = a & b;

    printf("AND 연산결과 : %d \n", c); // 결과 4
    system("PAUSE");

    return 0;
}

| : 비트단위 연산 OR
   ex) a | b

 : 오른쪽 왼쪽 하나라도 true 일때 1을 반환
   -> 0 & 1 일때만 1을 반환

ex) 0 | 1 ==> 1
     0 | 0 ==> 0
     1 | 1 ==> 1

EX) ========================================

#include <stdio.h>

int main()
{
    int a = 5;   // 0000 0101
    int b = 20;  // 0001 0100

    int c = a | b;

    printf("OR 연산결과 : %d \n", c); // 결과 21
    system("PAUSE");

    return 0;
}


^ : 비트단위 연산 XOR
   ex) a ^ b

 : 두값이 서로 다를때 1을 반환
   -> 0 & 1 일때만 1을 반환

ex) 0 | 1 ==> 1
     0 | 0 ==> 0
     1 | 1 ==> 0

EX) ========================================

#include <stdio.h>

int main()
{
    int a = 5;   // 0000 0101
    int b = 20;  // 0001 0100

    int c = a ^ b ;

    printf("XOR 연산결과 : %d \n", c); // 결과 17
    system("PAUSE");

    return 0;
}

~ : 비트단위 연산 NOT
   ex) ~ a

 : 값을 반대로 나타낸다.
   -> 0은 1로, 1은 0으로 바뀐다.

ex) ~0  ==> 1
     ~1  ==> 0

EX) ========================================

#include <stdio.h>

int main()
{
    int a = 20;  // 0001 0100
   
    int c = ~a ; // 1110 1011

    printf("NOT 연산결과 : %d \n", c); // 결과 -21
    system("PAUSE");

    return 0;
}


<< : 비트단위 연산 왼쪽 쉬프트 연산

   ex)  a << b -> a의 비트들을 b칸씩 왼쪽으로 이동
         8 << 2 -> 8의 비트들을 왼쪽으로 2칸 이동

 : 8의 2인수 형태 : 0000 1000
   -> 1을 왼쪽으로 두칸 이동 : 0010 0000 ; 32

  ※ 부호비트 까지 밀려나기때문에 주의한다!

EX) ========================================


#include <stdio.h>

int main()
{
    int a = 8;


    int c = a << 2; // c = 32

    printf("%d의 << %d 만큼 비트연산한 결과 : %d \n", a, 2, c);
    system("PAUSE");

    return 0;
}

>> : 비트단위 연산 오른쪽 쉬프트 연산

   ex)  a >> b -> a의 비트들을 b칸씩 왼쪽으로 이동
         8 >> 2 -> 8의 비트들을 오른쪽으로 2칸 이동

#include <stdio.h>

int main()
{
    int a = -8;


    int c = a >> 2; // c = -2

    printf("%d의 >> %d 만큼 비트연산한 결과 : %d \n", a, 2, c);
    system("PAUSE");

    return 0;
}



자료형(data type) ; 자료를 나타내는 형(type)

 - 선언할 변수의 특징을 나타내는 문자(키워드)

 - 1. 정수냐? 실수냐?에 대해서 나타냄
   > 미리 선언을 하는것

 - 2. 메모리를 몇 byte 할당받아서 나타낼건지?
   > 저장할 데이타의 메모리공간 할당



기본자료형

 - 기본적으로 제공이 되는 자료형
    ex) int, float, double, long형



사용자 정의 자료형

 - 사용자가 정의하는 자료형

 - ex) 구조체, 공용체, 클래스(C++)



기본자료형의 종류

 char       1 byte   
 short      2 byte
 int        4 byte
 (64비트 운영체제 : 8byte)

 long       4 byte
 float
 double
 long doulbe



ANSI( 표준화된 문법제정) 99년도에 표준된 데이타표현

 - int가 4byte면 long은 4byte 이거나 그 이상이 되어야 함

 - 명확하지 않음 ;long(표준화되지 않았다고..)

 - long은 시스템에 따라 차이가 남(크기 : int <= long)
 
 - long double도 마찬가지로 인식을 한다.(long double >= double)



n비트로 표현할수 있는 데이타 수

 = 2(n승);
  ex) 1byte : 2(8승) = 256가지의 데이타 표현 -> char형



자료형이 다양한 이유? ;

 -=> 데이타 표현방식이 다르기때문
   - 정/실수형 데이타를 표현하는 방식

 -=> 메모리 공간을 적절히 사용하기 위해서



자료형 선택의 기준

 - 정수형 데이터를 처리하는 경우
  --> 컴은 int 형 연산을 가장 빠르게 한다.

ex) 1000의 수를 char 형에 넣지 못한다
     => char 형은 최대 256까지 표현가능
     => int 형이 적절(2의32승)


sizeof 연산자
 - 피연산자 메모리 크기를 반환
 
#include <stdio.h>

int main()
{
    int number = 5;
    printf("int 자료형의 크기 : %d \n", sizeof(number));
    printf("sizeof(int) ; %d \n", sizeof(int));
   
    system("PAUSE");
    return 0;
}

// 자료형 이름 (int) 는 괄호를 꼭 해줘야 한다. sizeof( int )
// 자료형 변수이름은 '()'괄호 생략 가능
// 그냥 괄호사용하는게 헷갈리지 않고 좋다.



자료형 선택

 - 정수형 데이타를 처리하는 경우
 
 - int가 내부적으로 연산을 가장 빠르게 한다.(정수표현)

 - char형 : 문자를 표현하기위한 자료형

 - float 형 : 소수이하 6자리까지 오차없이 처리 가능

 - double 형 : 소수이하 15자리까지 오차없이 처리 가능
   -> 정밀도가 얼마나 유지되나?

 => double에 대한 정밀도를 추구함!!   float은 정밀도 낮음


#include <stdio.h>

int main()
{
    float byun;
    float area;

    printf("정삼각형의 변입력 : ");
    scanf("%f", &byun);

    area = (byun * byun)/2;
    printf("정삼각형 넓이 : %f \n", area);
   
    system("PAUSE");
    return 0;
}
 
★ 메모리나 속도도 중요하지만 코딩시,
   프로그램은 얼마나 읽기 쉽게 작성을 하느냐?
   얼마나 코드를 유연성있게 작성을 하는가?   ★

상수는 일반적으로 대문자로 나타내어준다(관례)
초기화는 선언과 동시에 무조건 해주어야한다.



unsinged 가 붙어서 달라지는 표현

 - 기본자료형앞에 unsinged 를 붙여주면  무조건 데이타가 양수가 된다.
   > 음수의 데이타표현 범위가 양수로 바뀌게 되
   > 양수의 데이타 표현을 기본자료형의 두배로 표현 가능

 - 하지만 데이타 크기 자체는 변함 잆다.
  ex) unsigned char;
      unsigned int ;

 - 단, 실수형 자료에는 적용 되지 않음.



ASCII 코드를 이용한 문자표현
 
 - 컴퓨터는 내부적인 시스템은 2진수만 인식

 - 컴퓨터 자체는 문자, 그림, 소리 자료를 숫자로 변환해서

 - 2진수로 변환시켜서 저장

ex) A : 65, B : 66 C : 67
  => 컴퓨터와 사람과의 약속(컴퓨터는 문자를 이해못함)
  => ASCII 코드(ANSI : 미국표준협회에 의해 정의)
  => 아스키코드표 참고하세요


ASCII코드 범위 : 0~127 이하
                    char 형 변수로 처리 가능!

문자의 표현 : (' ') 를 통해 표현
컴퓨터가 아스키코드값을 확인해서 문자를 숫자로 저장.

ex) char as = 'A';  // A 아스키 코드값 65
      char a = 'a'    // a 아스키 코드값 97 

#include <stdio.h>

int main()
{
    char A = 'A';
    char B = 'B';
    char C = 'C';
    char D = 68;

    printf("%d \n", A);
    printf("%d \n", B);
    printf("%d \n", C);
    printf("%d \n", D);
    printf("%c \n", D);
   
    system("PAUSE");
    return 0;
}             



리터럴(literal) 상수

 - 이름을 지니지 않는 상수
   ex) 일반숫자

int number = 1 + 2;

해석하자면...

 // 1과 2를 메모리상에 올리고
 // cpu가 메모리공간에 올라간, 1, 2를 불러들려 계산하고
 // 메모리공간에 등록한  number 에다가 연산결과를 저장한다.

char c = 'A'        // 문자상수
int  in = 10         // 정수상수
double  dou = 3.14; // 실수상수

float f = 3.14 // float f = 3.14f

3.14는 double 형(8byte)
float(4바이트) <= (8byte) // 메모리 손실 가능성

접미사를 이용한 상수의 표현
unsinged int
long
....



심볼릭(Symblic) 상수 ; 이름을 지니는 상수

const 를 이용한 상수화

ex) cosnt int MIN = 200; // const 키워드 사용
    MIN = 100; // 불가

    const in MAX;  // 변수자체가 쓰레기 값으로 초기화
    MAX = 100; // 불가


Posted by 토실토실천재
2010. 7. 8. 18:38
준비물 : 필기도구, 연습장
 
 
 scanf 함수의 이해 <----> printf함수

 - 데이타를 입력받을때...
 
 - 10진수 정수형태를 입력해서 2번째 인자에 저장한다.
 
 - 배열, 포인터를 알아야 정확히 알수 있음.
 
 - 사용자가 직접 키보드를 이용해서 입력한 값을 변수에 대입을 하는것
 
 - scanf 함수를 이용한 정수의 입력
 
 - 변수의 주소값을 %d로 넘겨라
   > ex) 주소가 10번지면 %d는 10번지의 주소값이 들어간다
 
 
int main()
{
 int num;
 scanf("%d", &num) ;
 .....
 system("PAUSE");
 return 0;
}

                      
scanf("%d", &val);  //10진수 정수형으로 입력 받아서  변수 val에 저장하라
 
 

예제. 1) ======================================================



 
 
예제. 2) ==================================================
#include <stdio.h>
int main(void)
{
 int result;
 int num1, num2;
 printf("숫자 두개를 입력하세요 : ");
 scanf("%d %d", &num1, &num2);
 result = num1+num2;
 printf("%d + %d = %d \n", num1, num2, result);
 return 0;
}
=========================================================
 
scanf("%d %d %d \n", a, b);// 실행은 되지만 에러발생
                                                 // 메모리 참조 오류
 
 

● C언어의 키워드들
 
auto    _Bool   break case
char    int     do double
else    enum    float
while   void    sizeof
return  static  long ...... 등등
 
※ 키워드는 변수이름으로 사용불가하다!(예약된 언어다)
 
 
 

●  데이타 표현 방식의 이해
 
 - 컴퓨타가 데이타를 어떻게 표현을 할까?
 
 - 깊이 공부하기 위한 조건

진법에 대한 이해

 - n진수 표현 방식 : n개의 문자를 이용해서 데이타를 표현
   ex) 2, 8, 10 16진수

 - 컴퓨터는 내부적인 데이타 처리를 2진수로 처리
 
ex) 자리수 증가를 기준
 2 진수 : 0, 1
 8 진수 : 0 ~ 7
 10진수 : 0 ~ 9
 16진수 : 0 ~ 9, A ~ F 이용(a:10, b:11, c:12, ....f:15)
 
 

데이터의 표현 단위
 

1)bit(비트) : 데이타 표현의 최소단위, 2진수 값 하나
                 (0 또는 1)을 저장
 
2)byte(바이트) : 8bit == 1byte
 
이진수 ex)
.....128  64  32  16  8   4   2   1   0
 .....■  ■  ■  ■  ■  ■  ■  ■  ■
 
 

문제 3) ==========================================
 
 
 0 0 0 0 (0)
 0 0 0 1 (1)
 0 0 1 0 (2)
 0 1 0 0 (4)
 1 0 0 0 (8)

 
10진수 9를 2진수로 표현한다면?
 
10진수 43를 2진수로 표현한다면?
 
이진수 00010001 를 10진수 표현하면 얼마인가?

이진수 10011111 를 10진수 표현하면 얼마인가?
 
 
=====================================================
 
프로그램상의 8진수, 16진수 표현
 
 - 8진수 : 0으로 시작

 - 16진수 : 0x로 시작
 
int a = 10; // 10

int b = 0xa; // 16

int c = 012; // 10
 
 
 
예제. 3) ==================================================
 

 
#include <stdio.h>
 
int main()
{
 int a = 0xa7;
 int b = 0x43;
 int c = 032;
 int d = 024;
 printf("16진수 0xa7 : %d \n", a); // 17
 printf("16진수 0x43 : %d \n", b); // 7
 printf("8진수 032 : %d \n", c);  //
 printf("8진수 024 : %d \n", d);
 printf("a-b = %d \n", a-b);
 printf("c+b = %d \n", c+d);
 printf("b*c = %d \n", b*c);
 
 system("PAUSE");
 return 0;
}
// 컴퓨터의 모든 연산은 내부적으로 2진수로 한다.
 
 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
정수와 실수의 표현 방식
 
  정수의 표현방식

 - MSB : 가장 왼쪽 비트, 부호를 표현

 - MSB를 제외한 나머지 비트 : 데이터의 크기 표현
 
1byte : 8bit
 

   <---데이타크기--->
■  ■  ■  ■  ■  ■  ■  ■

부호
비트
표현(+,-) (양수면 0음수면 1)
 
 
  00000001 (+1)
+ 10000001 (-1)
----------------
  10000010 (-2)     =>>> 이렇게 계산하면 오류이다
 
 
그럼 어떻게 할까?
 
※ 정확한 음의 정수 표현방식
 
1) 1의 보수를 취한다
  > 11111110
 
2) 1을 더한다
  > 11111111   ==>> -1의 2진형태
 
 
  00000001
+ 11111111
===========
 100000000  === 앞에 1은 무시되고 결국 '0'이된다.
 
☞ 2진수를 음수로 바꾸려면
   그 수의 1의 보수로 취해주고, 1을 더한다.
 
EX) 이진수 바꿈형태
    
    13 ÷ 2 ....1
     6  ÷ 2 ....0
     3  ÷ 2 ....1
              ....1
 
거꾸로 읽는다 : 1101 (13)
 
 
연습문제 : 10진수로 얼마 인가?
 
1) 0 1 0 0 1 1 1 1  [   ]
2) 0 1 1 0 0 1 1 1  [   ]
3) 1 1 0 1 0 1 1 0  [   ]
4) 1 1 1 1 0 0 0 0  [   ]
 
 
             
정수와 실수의 표현 방식
 
 - 컴퓨터는 실수보다 정수를 빠르게 처리한다.
 
 - 소수점이하의 작은 수가 생기면 한계를 지님
 
  Ex) -5.4 ?
      -5 + (-0,4) = -5.04
 
      근데 0.0001은 어떻게 나타낼까?
  - 오차가 존재하는 단점을 지님
 
  - ±(1.m)x2(e-127승)  <--- 부도소수점 표현방식

  ■ ■ ■ ■ ■ ■ ■ ■      ■ ■ ■ ■ ■ ■ ■ ■
  ↕  <---- m ------>      <------ e ------->
 부호
 비트
 
 0.0은 어떻게 표현할까?
 ===> 절대로 정확한 0.0에 가까운 값은 나타내지 못한다.
        부동수소점 오차 >> 모든컴퓨터는 이런식으로 표현
     
ex) 예제
 
   오차가 발생했다 -> 이걸 염두를 꼭 하기
     모든 프로그램밍 언어는 오차를 둘수 밖에 없다
   = 컴퓨터가 바보이기때문에

Posted by 토실토실천재
2010. 7. 8. 18:37

제 5장 변수와 연산자 - 2


 참고 : 개발툴 ( Dev C++)


  상수란?: 변경이 불가능한 수 // 변수와는 구분됨
 ex) 1, 2, 3...등등
 

 산술연산자와 대입연산자

 -  산술 연산자의 종류 
     ex) +, -, *, / , % 등이 있다 (더하기, 빼기, 곱하기, 나누기, 나머지 구하기)

===========================================

#include <stdio.h>
int main()

{
  int num1 = 10;                                                // 변수 선언동시에 10으로 초기화
  int num2 = 3;                                                 // 변수 선언동시에 3으로 초기화

  printf("두수의 더하기 : %d \n", num1 + num2); 
  printf("두수의 빼  기 : %d \n", num1 - num2);
  printf("두수의 곱하기 : %d \n", num1 * num2);
  printf("두수의 나누기 : %d \n", num1 / num2);
  printf("두수의 나머지 : %d \n", num1 % num2);
  
  system("PAUSE"); 
  return 0;
}
 
 



===========================================
 
기타 대입연산자

  - 대입연산자와 산술연산자가 합해져서 다양한 형태의 대입연산자 정의
   ex) +=, -=, *=, /=, %=

  ex) a = a+a;  ==   a+=a;
       a = a-a;  ==   a-=a;
       a = a*b;  ==   a*=b;
       a = a/b;  ==   a/=b;

==========================================

#include <stdio.h>

int main()
{
 
 int val1 = 3;
 int val2 = 4;
 int val3 = 5;

 val1 += 3;   // val1 = val1 + 3;
 val2 -= 4;   // val2 = val2 + 4;
 val3 *= 5;   // vla3 = val3 + 5;

 printf("rusult : %d %d %d \n", val1, val2, val3);

 system("PAUSE"); 
 return 0;
}

===========================================
 
 

다양한 연산자(수학적 지식??산수적 지식이란 같음)
 
부호 연산으로서 +, - 연산자

ex) -(+20) = -20
     -(-20) = +20

===========================================
 
#include <stdio.h>

int main()
{
 
 int number = 8;
 int number2 = -10;
 
 number1 = -number1;
 printf("number1 =  -number1 연산후 : %d \n", number1);
 
 number2 = -number2;
 printf("number2 =  -number2 연산후 : %d \n", number2);
 
 system("PAUSE"); 
 return 0;
}
 
 
===========================================

 증감감소연산자 

1. ++ : 증가 연산자(+1 증가)
2. -- : 감소 연산자(-1 감소)

ex) ++a : 1 먼저 증가 시킨후, 연산을 실행
     a-- : 먼저 연산 후, 감소시킨다.

===========================================


#include <stdio.h>

int main()
{
 int val1 = 10;              
 int val2 = (val1--)+2;            // (10--)+2 ==>> val2 = 12
 printf("val1 : %d \n", val1);   // val1 == 9
 printf("val2 : %d \n", val2);   // val2 = 12
 return 0;

}
 
 


#include <stdio.h>
int main()
{
   int a = 20;
   int b = 10;
 
   printf("a = %d \n", a);        // a = 20
   printf("b = %d \n", b);        // b = 10
 
   printf("a++ = %d \n", a++);  // a를 먼저 %d로(%d = 20) 그리고 난후 1 증가
   printf("++a = %d \n", ++a);  // a를 1증가 (a = 22) 그리고 난후 대입 

   printf("b-- = %d \n", b--); 
   printf("++b = %d \n", ++b);
 
  system("PAUSE");
  return 0;
}


 
 관계연산자(비교 연산자)

 - 논리적 참일때 : true(1);

 - 논리적 거짓일때 : false(0);

 - 사실은 컴퓨터는 0이 아닌값은 모두 true 라고 본다.
  ex) -1, -34, 45, 643 모두 true 다.


  

● 논리 연산자

 - and, or, not을 표현하는 연산자

 - true(1), false(0) 반환

1. && (and연산): 두 관계가 둘다 참일때 true 리턴 
2. || (or연산) : 두 관계중 하나라도 참일때 true 리턴
3. !(not 연산) : 이 연산의 참이면 false 리턴, 거짓이면 true 리턴


@ 연산자 우선순위로 실행되지만

- 우선은 우리가 알고 있는 수학적 연산순위와 크게 다를건 없다.



● 콤마 연산자

 - 둘이상의 변수 동시 선언

 - 둘 이상의 문장을 한줄에 선언 시

 - 함수의 매개변수 전달 시

 -연산자의 결합성
   ex) 1+4*3/2-6
       => +, - 보다는 *, / 연산이 먼저 실행이 된다.
       => 1+(4*3)(/2)-6; 
  


● 대입연산자 

int a, b, c;

a = b = c = 10;

printf("%d %d %d \n", a, b, c);



Posted by 토실토실천재
2010. 7. 8. 18:36
제 4장 변수와 연산자


 - 변수란 무엇인가?

 - 연산자란 무엇인가?
  > C언어에서의 다양한 연산자 존재
 
  ※  필수 - printf함수를 익숙하게 사용할줄 알아야합니다.
 

연산자란 무엇인가?

 - 연산을 요구할 때 사용되는 기호
   > ex : +, -, *, /

=========================================
#include <stdio.h>
int main()
{
   3+4;
   return 0;
}

=========================================
 
 ==> C컴파일러가 '+'를 실행했다
 
메모리 - cpu 내부존재 메모리( 캐쉬메모리 등 )
           - memory(Ram - Random Acess Memory)
 
 - 연산은 cpu에서 실행

┌ 위코드를 자세히 설명 ┐
 
=> 1. 연산하고자 데이타는 3, 4라는 정수다.

=> 2. 덧셈을 먼저 하는게 아니고

=> 3. 3, 4라는 값을 메모리공간에 들여놓고
    ex) printf함수의 경우도 " " 문자열을 메모리 공간안에 올라간다.

=> 4. cpu가 메모리 값을 가지고 가서 덧셈연산을 실행
 
=> 5. 우리가 보고싶은건 덧셈에 대한 결과를 보는것!
 
 
 
 즉, 연산한 결과를 만들어주는것

 ☞ 메모리공간에 이름을 붙여주면 얼마든지 쓸수있다
 
 ☞ 3+4값을 보기위해서 메모리공간에 이름을 지어준다 

 ☞ 저장할곳의 이름을 지어준다.
      > ex) 반 아이들 이름을 제각각 지어준다.
              이름이 없는 아이는 담에 이름을 몰라서 부를수가 없다

 ☞ 메모리는 이름이 없으면 다시 와서 불러오지 못한다.
 
==============<<수정해볼까요?>>===========================

#include <stdio.h>
 
int main()
{
   int a;            // 'a' 라는 이름을 등록(선언)한다.
   a = 3+4;         // 'a' 에 3+4의 결과 값은 7이 저장된다.
 
   printf("%d \n", a);  // a를 출력 즉, 7이 출력된다.
 
   system("PAUSE");
   return 0;
}
 
=========================================
 
 
 
변수란 무엇인가? : 변경이 가능한 수

 - 데이타를 저장할수 있는 메모리 공간에 붙여진 이름

 - 메모리 공간을 가르켜 변수라고 한다.
 
   ex3) int a 이런씩으로 지정을 않하면 메모리 공간이 없으니,
          다시 불러올수도 없다.
          이름을 지정하면 얼마든지 사용할수 있다
 
 
 
다양한 형태(자료형)의 변수 - 메모리 공간

 - 정수형 : char, int, long

 - 실수형 : float, double
 
ex) 정수형 데이타를 쓰고 싶다? 
     당분간 우리는 int형 변수를 사용하고 싶다
     (    자~~일단 뒤로 넘길까요?)
 
========================================= 실습
#include <stdio.h>
int main()
{
 int num1 = 100;
 int num2 = 180;
 int month = 12;
 int day = 25;
 
 printf("num : %d \n", num1 );
 printf("val2 : %d \n", num2);
 
 printf("제 나이는 %d 살 이고 키는 %d cm 여요^^ \n", num1, num2);
 printf("크리스마스는 %d월 %d일 입니다 \n", month, day);
 
 system("PAUSE");
 return 0;
}
=========================================
 
 
변수의 선언 및 대입
 
 - 대입 연산자(=) : 값을 대입하기 위한 용도의 연산자

 = '같다'라는 의미가 아님, "대입하겠다"라는 의미임
 
 
=========================================
 
int main()
{
int val;              // 변수
val = 20;             // 20이라는 수를 val에 대입하라
.........
 
=========================================
 
컴마 연산자(,)

ex) 이 3가지는 같은 의미다
 
1.   int a, b;     // (,)컴마를 사용
 
 
2.   int a; int b; // (;) 세미콜론(마침표)를 사용
 
 
3.
  int a;        // 제 각각 정의
  int b;        // 제 각각 정의
 
=========================================
 
#include <stdio.h>
int main()
{
  int a, b; // 변수선언 -> 쓰래기값이 포함
  int c = 30, d = 40; // 변수를 선언하자마자 초기화시키면 좋음
  a = 10;
  a = 20;
 
  printf("%d %d \n", a, b);
  printf("%d %d \n", c, d);
  return 0;
}


// 메모리 값에다가 변수 4개를 사용하게끔, 선언을 한형태
// 이것을 printf함수로 불러와서 출력시킨다.
 
 
변수선언시 주의사항 - 1
 
#include<stdio.h>
 
int main()
{
 
int a;              // 변수선언부분
a = 10;             // 변수대입부분
 
int b;              // 변수선언부분
b = 20;             // 변수대입부분
 
printf("%d %d\n", a, b);
system("PAUSE");
return 0;
}
                         ===================> 실행시 에러발생
 
 
// 변수를 함수내에 선언시, 가장 앞부분에 선언한다.
 
int a;  // 변수초기화
int b;  // 변수초기화
 
a = 10;
b = 20;   // ============> 이런형태로
 
===========================================
 
 
 
 
변수선언시 주의사항 - 2(이름을 지을때 안되는경우)

  1 - : 변수는 알파벳, 숫자 언더바(_)로 구성

 2 - : 대 소문자 구분
 
 3 - : 변수의 이름은 숫자로 시작 불가, 키워드 사용불가

 4 - : 공백이 포함될수 없음
 
 ex) int 7th_val ;
     int live_#id;
     int  kor yar;
 
     // 변수자체가 어떤 용도를 쓸건지 의미를 부여해서 선언하라!
 
===========================================
#include <stdio.h>
int main()
{
  int result ;           // 변수선언(의미부여)
  result = 3+4;         // 덧셈 결과값을 저장(대입)
 
  printf("덧셈결과 : %d \n", result);
  printf("%d 더하기  %d는 %d 입니다 \n", 3, 4, result);
  printf("변수 result에 저장된값 : %d \n", result); 
  
  system("PAUSE"); 
  return 0;
}
===========================================
 

 
상수란?: 변경이 불가능한 수
 ex) 1, 2, 3...등등
 
===========================================
 
대입연산자와 산술연산자

#include <stdio.h>
int main()
{
  int num1 = 6;
  int num2 = 4;
  printf("두수의 더하기 : %d \n", num1 + num2);
  printf("두수의 빼  기 : %d \n", num1 - num2);
  printf("두수의 곱하기 : %d \n", num1 * num2);
  printf("두수의 나누기 : %d \n", num1 / num2);
  printf("두수의 나머지 : %d \n", num1 % num2);
 
  system("PAUSE"); 
  return 0;
}
 
 
 
===========================================
 
기타 대입연산자
  - 대입연산자와 산술연산자가 합해져서 다양한 형태의 대입연산자 정의
  ex) a = a+a;    a+=a;
===========================================
 
 
// EX) 실습
#include<stdio.h>
int main()
{
 
 int val1 = 3;
 int val2 = 4;
 int val3 = 5;
 val1 += 3;   // val1 = val1 + 3;
 val2 -= 4;   // val2 = val2 + 4;
 val3 *= 5;   // vla3 = val3 + 5;
 printf("rusult : %d %d %d \n", val1, val2, val3);
 system("PAUSE"); 
 return 0;
}

===========================================
 
 

다양한 연산자(수학적 지식??산수적 지식이란 같음)
 
부호 연산으로서 +, - 연산자
증감감소연산자
ex) -(+20) = -20
     -(-20) = +20
 
===========================================
 
#include<stdio.h>
int main()
{
 
 int number = 8;
 int number2 = -10;
 
 number1 = -number1;
 printf("number1 =  -number1 연산후 : %d \n", number1);
 
 number2 = -number2;
 printf("number2 =  -number2 연산후 : %d \n", number2);
 
 system("PAUSE"); 
 return 0;
}
 
 
===========================================
#include<stdio.h>
int main()
{
 int val1 = 10;             
 int val2 = (val1--)+2; // (10--)+2 ==>> val2 = 12
 printf("val1 : %d \n", val1); // val1 == 9
 printf("val2 : %d \n", val2); // val2 = 12
 return 0;

}
 
 
// 연습
#include
int main()
{
   int a = 20;
   int b = 10;
 
   printf("a = %d \n", a);
   printf("b = %d \n", b);
 
   printf("a++ = %d \n", a++);
   printf("++a = %d \n", ++a);
 
   printf("b-- = %d \n", b--);
   printf("++b = %d \n", ++b);
 
  system("PAUSE");
  return 0;
}
 


Posted by 토실토실천재
2010. 7. 8. 18:35



 주석이란 ??

 - 프로그래머에게 메모(memo)의 기능을 부여

 - 컴파일러가 인식하지 않음

 - 주석을 삽입함으로 인해 프로그램의 가독성을 증가

 - 우리가 메모를 하기 위한 용도

 - 선택이 아닌 필수

 - 너무 난잡하고, 간결해도 안되지만...기준은 없다.
 

 
  주석의 두가지 형태

 - 여저 줄에 걸친 주석처리

/* 한줄 짜리 주석 */
 
/*
여러줄에
걸치 주석
*/
 
//단일행 주석
// 주석 하나
// 주석 둘
// 주석 셋
 
주석처리에 있어서의 주의점

 - 주석의 나타내느 기호는 중복될수 없다
    // 단일행 주소를 쓰는게 훨씬더 좋다

int main(void)    // 함수의 선언(이름)
                       // 함수의 시작
 3+4;                   // 함수의 몸체
 return 0;
                       // 함수의 종료
 
 
 
printf함수에 대해서

 - 가벼운 마음으로 오늘 파이팅을!
 
 - 출력하고픈 문자열(문장)을 출력 하는 함수

 - 표준적으로 많이 쓰이는  함수

 - 정확히 이해하지 못하고 사용하지만 잘못된건 아니다.

 - printf의 완벽한 이해는 뒷부분에서 다룹니다.

 - 이해보다는 익숙해집시다.
 
 
 
 
/* Hello.c */

#include
 
int main(void)
{
 printf("Hello, World! \n");
 return 0;
}

 
 
/* printf */

#include <stdio.h>
 
int main()
{
 printf("안녕하세요 모두들 \n");
 printf("%d \n", 1234);
 printf("%d %d \n", 10, 20);
 return 0;
}

 
 "\n"(특수문자) : 화면에서 enter(즉, 현재 커서를 한칸 내린다)
 
 %d는 무엇인가?(서식문자)
  > 서식문자란 : 출력대상의 출력형태를 지정하기 위한 문자
  > 내가 데이타를 출력하기 원한는데 출력을 하기 위한 형태를 지정
  > 출력대상이 있어야 한다. 두번째 전달인자 대상이된다.
  > printf함수는 무조건 첫번째에 문자열이 와야한다.
 

#include <stdio.h>
int main(void)
{
    printf("내 나이 : %d \n", 20);
    printf("%d 는 나의 점수 \n", 100);
    printf("즐거운 저녁 \n입니다 \n여러분 \n");
    
    system("PAUSE");
    return 0;
}


Posted by 토실토실천재
2010. 7. 8. 18:33
 
< 제 2장 C언어의 기초 >
 
 
처음은 Compile 하는게 더 어렵고, 답답할지도..

 
프로그램의 완성과정
 
 1 프로젝트 생성을 위한 화면
 
- 프로젝트란? : 로그램 실행을 위해서 코드를 작성하는데 그것을 담는 상자라고 이해한다.
 
- 우선은 익숙해지자.
 
- 프로그램을 넣을상자의 체계 
 
===> 워크스페이스 > 프로젝트상자 > 프로그램 코드를 작성할 파일
 
 
하나의 워크스페이스는 둘이상의 프로젝트를 가질수 있다.
 
- win32 consol Application 선택 -> location 지정 ->
   프로젝트 네임을 적는다(새로운 워크스페이스지정)
 
- 오케 버튼 클릭 -> 기본적인 틀을 만들어준다
 
- 이제 파일을 만들기 위해서 다시 Menu 에서 New를 선택한다.
 
- C++소스 파일을 선택한다. 파일네임은 xx.c라고 확장자를 붙인다.
 
- 자 소스를 다 친후 컴파일이란 과정을 거쳐야 한다.
 
- 컴파일(compile)후 -> 어떤일이 벌어지는가?
> 직접 디렉토리에 가서 debug 폴더에 가서 한번 파일이 생성됐는지 보자
> 디버깅파일에 프로젝트 파일 4개정도가 생성된것을 확인
==> 컴파일을 하면서 -> 생산성이 높아졌다...(파일이 생성되었다)
 
- 다음은 링크(link)
> build hello.exe 를 실행한다.링크+컴파일 그냥 통합해서 설명 > 빌드하면 즉 링크시키면 자동으로 컴파일도 된다. > 그럼 다시 debug 파일에 확인하면 실행파일이 생성되어있다.
 
dos command 로 들어가서 직접 찾아도 된다(실행 -> cmd)  
 
 
 
프로그램공부는?
 
- 프로그램 공부 : 이해를 하는것(30%) + 익숙함(70%)
 > 익숙해지면서 이해하게 될수 있도록 해보자(가능하다)
 > 남자아이가 장난감(레고블록)을 가지고 노는것처럼
 > 여자아이가 인형을 가지고 노는것처럼 > 익숙해지시길

함수에 대한 이해
 
- 적절한 입력과 그에 따른 출력이 존재하는 것을 가리킴
 
- C언어의 기본단위는 함수다.
 
- C언어로 프로그램을 만드는것자체는 함수를 만든다고 보면 된다.
 
- 함수를 만든것이 중요하다
 
- C프로그램은 함수로 시작해서 함수로 끝난다.
@ Ex) 3x + 3 = y
 => x값에 따라서 y값이 바뀐다!!
 ==> 즉 하나의 행위이다. 인자전달과 함수전달은 동시에 이루어진다
  

C언어의 함수 특성
 
 - 입력과 출력 존재

 - 순차적으로 실행

 - 함수의 기능을 정의하는 몸체 부분 존재
 - 기능은 중괄호 안에 정의한다.

 - 기능이 실행되면 출력을 한다.
 
 

세미콜론(;)이 필요한 문장

 - 컴퓨터에 명령을 내리는 문장

 - 시간의 흐름에 따라 명령을 수행하라는 의미

 - 세미콜론은 문장이(명령) 끝나면 붙이면 된다.
  
 
 
표준라이브러리에 대한 이해

ex) 슈퍼마켓에 필요한 것들 모아놓은것과 같음.
      > 필요할때마다 가서 사기만 하면 끝!~ㅋ

     
 - 이미 표준화해서 만들어 놓은 함수들의 집합

 - 기본적으로 제공해주는 함수모임

 - 헤더파일을 포함해야 함수가 사용가능하다
 
 
 
헤더파일에 이해 - #include <stdio.h>

 헤더파일  : stdio.h 파일을 include (포함시키겠다)
                    ex) printf함수는 stdio.h에 있는 표준함수이다.

 - stdio.h.라는 이름의 헤더파일

 - 헤더파일의 포함을 알리는 선언은 제일 먼저 등장해야한다.
   > 순서가 절대 바뀌면 안된다. 무조건 먼저선언해놓는다.
 

 
 
return 의 의미
 
 - 함수를 종료(빠져나온다)
 
 - 함수를 호출한 영역으로 값을 반환

 - 함수내에 존재 하지 않을수도 있다.

 - 둘 이상의 return 문이 존재하는 것도 가능.
 
 - return은 컴퓨터에게 반환한다는 뜻

 - return 이 없을수도 있다.

모든 프로그램은 main()함수가 있어야 한다!!!
  > main()함수가 끝나면 모두가 끝난다.

Posted by 토실토실천재
2010. 7. 8. 18:32
< 제 1장 C언어의 개론적인 이야기 >
 
 
 
프로그래밍 언어란 ? - 사람컴파일러(컴퓨터)가 이해할 수 있는 약속된형태의 언어
 
 
 
컴파일러란 ?
 
  - 프로그램을 컴퓨터가 이해하도록 번역해주는 역할(번역기)
 
  - cpu에 일을 시킬수 있는 명령체계가 회사마다 다 다르다.
  => 이것을 우리는 명령어체계;Instruction code(Set)이라고 함
 
 - cpu가 다르면 명령체계가 다르다.
 
 
 
명령어체계 : 인스트럭션 셋(Instruction Set)
 
 - CPU가 달라지면 다르다.(cpu에 명령을 내리는 것)
 
 - 과거의 프로그래머는 IS로 프로그래밍을 했음.
 
 - low - level 프로그래밍(人 : 프로그래머)
 
  => 문제점
   - 1. 프로그래머 교육시간이 길다. : 컴퓨터 시스템 전반적으로 이해를 해야한다.
 
   - 2 : 하드웨어언어이기때문에 H/W적인 코드이므로 코드가 상당히 길어진다,
          프로그래밍의 난해성. => : 하드웨어적으로 작성을 하기때문
 
 ex) C는 10줄이면 하드웨어언어는 30줄정도 - 어셈블러, 기계어
 
 ※ 이를 보완한것이 Program Language(p/l) 이다. 즉, C언어
 
  - 사람이 이해할수 있게 구현, 단 컴퓨터는 이해할수없다. 컴파일러
   => Instruction Set로 바꿔준다.(컴파일) C언어(c, c++, java, c#)
 
 
 
  프로그래밍 언어는( C ) - 사람이 이해할수 있는 언어구조이다
  ex) 이건 이렇고 저건 저렇게 하고 할수있게 해석가능하다.
        하지만 cpu는 이해하지 못한다.(그래서 컴파일이 필요함)
           = >>> 이런 작업을 컴파일 한다 라고 한다.
 
 
 
C언어의 장점
 
  - 익숙해지는데 오랜 시간이 걸리지 않는다.
   > 사람이 이해할수 있기때문
 
 - 이식성이 좋다.
  > cpu가 다르면 Instruction code(명령체게) 가 다르다.
  > A라는 cpu에서 작성한 프로그램을 B라는 cpu에서 이식이 된다.
  > 그래서 예전에는 일일이 작업을 했다.
  > 하지만 C언어는 이럴필요가 없다.
 
 - 효율성이 높다.
 > High Level Language - 사람이 이해하기 가깝다.
 ex) Visual Basic, power-build 등등.
  > Low Level Language - 기계어에 가깝다.
 ex) 기계어, 어셈블러
 > C언어 - 중간정도 특징이다.
(그래도 고급언어축에 속함; 암튼 무지 좋은 언어다)
 
 
 
C언어의 단점
 
 - 프로그래밍하는데 많은 주의를 요한다.
  > 포인터, 메모리, 배열 등 부분의 이해가 필요
  > 꼼꼼한 코드작성 - 완전한 고급언어에 비해 상대적으로 어렵다.
  > ex) visual Basic
 
 
  프로그램 작성 및 실행순서
 
1. 프로그래 작성
 
2. 컴파일(하면서 에러발생을 하면, 다시 수정; 정상적이면 링크로 넘어간다)
 
3. 링크(하면서 에러 발생시, 다시 수정; 정상적이면 실행파일생성)
 
4. 실행파일 생성(.exe파일 생성)

Posted by 토실토실천재