c언어 문법 정리

    C언어 문법 총 정리

    식별자 : 변수명, 함수명, 상수명등...
    ① 영문자,숫자, 밑줄문자(_)의 조합
    ② 첫글자는 반드시 밑줄문자 또는 영문자로 시작
    ③ 공백문자, 예약어는 사용할수 없다
        ex) int printf = 10  (X)
            int h k d = 20   (X)
            int 123a = 10;   (X)
            int a123 = 20;   (O) 
            int _k = 100;    (O) 
    ④ 대.소구별
        ex) int A=10;
            int a=20;



    자료형
    ①정수형- short int   (2byte) -32768 ~ +32767            %d
              int         (4byte) -2147483648 ~ +2147483647  %d
              unsigned int(4byte)                            %u  ==> 음수가없다
              long        (4byte)                            %ld

    ②실수형- float       (4byte)                            %f
              double      (8byte)                            %lf

    ③문자형- char        (1byte)         %c('문자'),%s("문자열")
    ④주소형변수(*) - 4byte

    int a=10;
    long b=20L;

    float a=10.5F;
    double b=20.3;

    %-10.2f    ==>전체자릿수.소수이하

     

     


    ※변수(Constant)와 상수(Variable)
    (1)변수 : 자료를 기억시킬 기억장소
    정수,실수,문자,문자열,나열형,
            레퍼런스(reference) - 별명
            컨스트(const) - 값변경X

    (2)상수 : 변수에 기억시킬자료

     


    ※형변환(우선순위) : 문자 < 정수 < 실수
    char < short < unsigned int < int 
    작->큰 (값의 보강 가능)
    큰->작 (값의 보장안됨)

    ex)double k=56.38;
       int s=(int)k;       <--- 56

    강제(명시적)형변환 :  float avg = (float)tot/3;
    자동(묵시적)형변환 :  float avg = tot/3.0;

     

     


    ※ 제어문자 
    \n - 줄바꾸기
    \t - 8칸(tab)띄우기
    \a - 경고음("삑")
    \r - New Line(줄 맨앞으로)
    \0 - NULL(아무것도 없다)
    \b - 한칸 왼쪽으로 이동
    --------------------------------------------------------------


    (1) 문자
    <형식>  변수 = getchar();
            putchar(변수 or '문자');

    getch() : 입력과 동시에 읽어들임(화면표시 X)
    getche(): 입력과 동시에 읽어들임(화면표시 O)
            getchar():Enter입력후 데이터를 읽어들임

    fflush(stdin) : 키보드 버퍼를 clear
    scanf("%*c%c",변수): 1칸 건너띄기

    (2) 문자열
    <형식>  gets(변수);   <--- space도 문자로 인식
            puts(변수 or "문자열");

    (3) 모든데이타(문자,숫자,문자열....)
    <형식> scanf("변환기호",&변수, &변수....);
           printf("변환기호 or 메세지",변수, 변수,...);

           %s로 입력받는경우 : space인정 안함

    --------------------------------------------------------
    ※typedef(Type Definition):자료형 재정의
    <형식> typedef 자료형 별명(바꿀이름)
    --------------------------------------------------------
    5. 연산자
    (1)산술연산자 :  +, -, *, /, %(나머지-int형만)
                    ex) 5/3 ==> 1,  5%3 ==> 2

    (2)관계연산자 : >, <, >=, <=, ==(같다), !=(같지않다)
    true(1, 0이아닌수), false(0) 

    (3)논리연산자 : &&(논리곱)    - 둘다 만족해야 참(and)
                        ||(논리합)       - 둘중 하나만 만족해도 참(or)
                        ! (논리부정)    - ~반대  

             ex)  A    B    A and B     A or B    !A
                 --------------------------------------
                  T    T       T          T        F
                  T    F       F          T        F
                  F    T       F          T        T
                  F    F       F          F        T

            ex) 주소가 서울이거나 부산인사람 찾기(or조건  ||)
                서울      1               0        ==>  O
                부산      0               1        ==>  O   
                광주      0               0        ==>  X 

                 addr == "서울" ||  addr == "부산"
            ------------------------------------------------------- 
            ex) 점수가  80이상이면서 90미만인사람찾기(and조건 &&)
                30        0               1      ==>  X
                100      1               0      ==>  X
                85       1                1      ==>  O  

                score >= 80  &&  score < 90 
     
                80 <=  score < 90           ====> 오류!!!


    (4)증가/감소연산자
       ++변수  : 1증가후 값사용(전치)
       --변수  : 1감소후 값사용
       변수++  : 값사용후 1증가(후치)
       변수--  : 값사용후 1감소     
    (5)할당(대입)연산자
       +=  : a=a+b     a+=b
       -=  : a=a-b     a-=b
       *=  : a=a*b     a*=b
       /=  : a=a/b     a/=b
       %=  : a=a%b     a%=b


    (7)삼항(조건)연산자  ==>간단한 if
    <형식> 조건식? true일때 : false일때;
     
       ex)  int a=10;
             (a>0)? puts("plus") : puts("minus");
          
    (8)sizeof연산자 : 자료형의 길이(byte)구함

     

     


    ※진법변환
    2진수 :0,1
    8진수 :0,1,2,3,4,5,6,7
    16진수:0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)

    8진수표현(Octal): int a=04;       %o 
    16진수표현(Hexa): int b=0x45a     %x 
    ------------------------------------------------------------
       int  a,b,c,d,e,f;
       a=0x42af;
       b=0xaf03;
       c=a&b;
       d=a|b;
       e=a^b;
       f=~a;
       printf("%x  %x  %x  %x", c,d,e,f);


       printf("%d\n", 8<<2);
       printf("%d", 18>>3);    
    -------------------------------------------------------------
    6. 제어문(if문)
    ①   if(조건식)
    {
        참일때;
    }

    ②   if~else문
    if(조건식)
    {
       참일때;
    }
    else
    {
       거짓일때;
    }

    ③   if~else if문 
    if(조건식)
    {
       참일때;
    }
    else if(조건식)
    {
       참일때;
    }
     .
     .
    else
    {
       거짓일때;
    }
    -----------------------------------------------
    ※무조건 분기문

    분기명:
    goto 분기명;
    -----------------------------------------------
                                      
    -----------------------------------------------------------
    7. 제어문(switch문)
    형식>   switch(값)  //값--> int, char형만 가능
               {
                       case 값1 : 실행문; break;
                       case 값2 : 실행문; break;
                       case 값3 : 실행문; break;
                           .
                           .
                       [default:] 실행문;
              }
    8. 제어문(조건반복문)
    (1)while : 조건이 참이면 실행(조건에 따라서 한번도 실행안할수도 있다)
       while(조건식)
       {
          참일때;
       }

    (2)do~while : 실행후 조건비교(적어도 1번은 실행을 한후 조건비교)
       do
       {
          실행문;
       }while(조건식);

     


    9. for문(무조건반복문)
    (1)단일for문
       for(초기값;조건식;증감식)
       {
       }

    ※break : 블럭탈출
      continue : Loop문에서 밑에문장을 수행하지 않고 다음Loop진행

    (2)다중for문
       for(초기값;조건식;증감식)
       {
           for(초기값;조건식;증감식)
           {
           }
       }

    10.문자열함수 (#include )
    ①strcpy(s1,s2):s1에 s2를 복사           //중요!!!
    ②strcmp(s1,s2):s1과 s2를 비교            (s1> s2:1/ s1<s2:-1/ s1==s2:0) //중요!!!
    ③strlen(s):s문자열의 길이                 //중요!!  
    ④strrev(s):s문자열을 꺼꾸로출력
    ⑤strcat(s1,s2):문자열 s2를 s1에 연결
    ⑥strupr(s):소문자를 대문자로(문자열)
    ⑦strlwr(s):대문자를 소문자로
    ⑧tolower(c):대문자를 소문자로(문자)
    ⑨toupper(c):소문자를 대문자로
    ⑪strchr(s,c):s에서 최초의 c이후 문자를 구함
    ⑫strset(s,c):s를 c로 지정한 문자로 바꾼다

    11. 배열(Array)
    :같은형의 자료형으로 구성된 데이타들의 모임

    1)1차배열
      자료형 배열명[첨자]={숫자1, 숫자2,....};
      자료형 배열명[첨자]={'문자1','문자2'...};
      자료형 배열명[첨자]="문자열";
           첨자:생략가능    int a[]={10,20,30};
                                  int a[5];
                                  int a[];       <--- X

    참고)메모리동적할당(Heap메모리)
    #include 
    ① 메모리할당 : 변수 = (자료형 *)malloc(byte수); 
                    변수 = new 자료형[byte수];
    ② 메모리반환 : free(변수);
                    delete []변수명;


    --------------------------------------------------------------

    -------------------------------------------------------------

    --------------------------------------------------------------

    --------------------------------------------------------------
    2)2차배열
    자료형 배열명[첨자][첨자]={{....},{....}...};
                         행    열
     
    ex)  int num[3][4]={{10,40,70,100},{20,50,80,110},{30,60,90,120}};
          int num[3][4]={10,40,70,100,20,50,80,110,30,60,90,120};

      
    12. 포인터(pointer)
    :메모리상 임의의 위치값
     포인터변수란 임의의 위치값(address)을 기억시킬 변수(4byte)

    형식> 자료형 *포인터변수명;   <--단일pointer
             자료형 **포인터변수명;  <--이중pointer
                        (포인터변수의 주소값기억)
                        (& : 시작주소값)

    ※배열과 포인터

    값    |  배  열  |   a[0]    a[1]     a[2]
           |----------------------------------------
           |  포인터 |   *a     *(a+1)   *(a+2)
           |            | *&a[0]  *&a[1]    *&a[2]
    ----------------------------------------------
    주소 |  배  열  |  &a[0]    &a[1]    &a[2]
           |----------------------------------------
           |  포인터 |   a        a+1      a+2

    ex)         
    a[5]  ==> a[0]      a[1]      a[2]      a[3]       a[4]
              ------------------------------------------------
                   k          o         r          e            a
              ------------------------------------------------
              100번지   101번지   102번지   103번지   104번지
               
              배열             포인터         의미
              -------------------------------------
              &a[2]            a+2          102번지
              a[3]             *(a+3)          e
              a[2][3]         *(*(a+2)+3)
              &a[2][3]       *(a+2)+3
              
    13. 함수(Function)
     :  program을 단일화 시킬목적으로 사용
     ① 동일한 작업을 반복수행
     ② 변경, 삭제가 쉽다
     ③ 알아보기 쉽고, 코딩이 쉽다

     ※종류
     1. 내장함수 : 이미 내장된 함수 - #include를 시킴
                            ex) printf() - #include 
                                 getch() - #include 

     2. 사용자정의함수 : user가 만든함수 - 선언해야함


     ※호출방식
     1. Call by name  : 인자값없고 이름만
     2. Call by value : 값전달
     3. Call by pointer(address) : 주소전달 
     4. Call by reference : 별명(Alias) ===> C++에 확장된 개념

    <형식> 결과형  함수명(인자,인자....);
                ------
               void, int,float,char,char*....
     
           함수명();
           함수명(인자,인자...);
           변수 = 함수명();
           변수 = 함수명(인자,인자...);  

           return;        //제어값만 돌려줌(생략가능)
           return 변수;
           return 수식;    
           (주의!) return값은 오로지 1개
              ex) return 10;       -- O
                   return 10,20;   ---X
             
    -------------------------------------------------------------

      ----------------------------------------------------------------

    <>
     ------------
      O.S영역(시스템영역)
     ------------
      응용P/G영역(코드영역)
     ------------
      초기화데이터  <---- extern, static (전역변수)
      영역(static)
     ------------
      근거리힙       
      (Near Heap)         
     ------------
      스택          <---- auto
      (stack)             (가장 안정적) (지역변수,매개변수/블럭종료시메모리반환)
     ------------
      원거리힙      <---- new/delete
      (Far Heap)          malloc()/free() 
                          프로그래머에의해 메모리회수











    '코딩 > C' 카테고리의 다른 글

    c언어 도서관리 프로그램  (0) 2019.11.14
    c언어 연결리스트  (0) 2019.11.13
    비쥬얼 스튜디오 2019 설치 visual studio  (0) 2019.10.04
    c구조체와 연결리스트 등등  (0) 2019.07.15
    c++ 은행 관리 프로그램  (0) 2019.06.18

    댓글

    Designed by JB FACTORY