데이터 구조 와 알고리즘 0 부터 시리즈: C 언어 기초

데이터 구조 와 알고리즘 0 부터 시리즈: C 언어 기초
머리말
곧 대학 4 학년 이 되 는 저 는 학교 에서 모집 하 는 저 에 게 스트레스 를 받 았 습 니 다. 그리고 올 해 는 안 드 로 이 드 의 병목 기 라 서 밖 에 능력 에 대한 요구 가 매우 높 습 니 다. 그러나 저 는 많은 면 경 을 본 후에 많은 대기업 들 이 데이터 구조 와 알고리즘 을 중시 하 는 것 을 발 견 했 습 니 다. 그래서 우 리 는 두 가지 준 비 를 하고 데이터 구조 와 알고리즘 을 복습 하기 시 작 했 습 니 다.
물론 알고리즘 과 데이터 구 조 를 배 워 야 한다 면 C 언어 는 반드시 먼저 배 워 야 한다. 대부분의 알고리즘 과 데이터 구 조 는 C 언어 를 사용 하 는 언어 이기 때문에 이 글 은 안 드 로 이 드 프로그래머 를 대상 으로 하 는 것 이다. 자바 의 기초 가 있 기 때문에 일부 문법 은 전면적으로 소개 되 지 않 았 다.
상수 와 변수
① 상수: C 언어 상수 의 성명 은 두 가지 방식 이 있다.
  • define 키워드 사용
  • const 키워드 사용
  • 그것들의 차 이 는:
  • define 은 컴 파일 할 때 자동 으로 성명 의 변 수 를 프로그램 으로 대체 합 니 다
  • const 는 실행 중 입 니 다. 성명 의 변 수 를 프로그램 으로 자동 으로 교체 하 는 동시에 const 는 상수 의 유형
  • 을 쉽게 알 수 있 습 니 다.
    #include<stdio.h>
    
    #define YOU_AGE 23 
    const int HIS_AGE = 25;
    
    int main(){
    
        return 0;
    }

    ② 변수
    C 언어의 기본 데이터 유형 은 short, int, long, char, float, double 이다.
    int a = 10;
    char b = 'A';
    float c = 25.5;
    double d = 25.5;

    이것 은 문자 포인터 입 니 다. 자바 의 String 형식 으로 사용 할 수 있 습 니 다.
    ③ 사용자 정의 변수 형식 이름
    type: def 키 워드 를 사용 하면 데이터 형식의 이름 을 정의 할 수 있 습 니 다.
    typedef int my_int;
    
    int main(){
        //   int b = 10
        my_int b = 10;
        return 0;
    }

    2. 절차 제어 와 순환
    ① if, if - else 문
    int a = 10;
    int b = 5;
    if(a>b){
    
    }else{
    
    }

    ② 스위치 문
    switch(   ){ 
        case      1:    1;
        case      2:    2;
        … 
        case      n:    n;
        default:    n+1;
    }

    ③ goto 문장
    goto 문 구 는 점프 문 으로 실행 순 서 를 지정 한 탭 으로 옮 길 수 있 습 니 다.
    //  1+2+3...+100  
    int i = 1;
    loop: if(i<=100){
        sum=sum+i;
        i++;
        goto loop;
    }

    ④ for 문장
    int i,sum;
    for( i=1; i<=100; i++ ){  
        sum=sum+i;
    }

    ⑤ while, do - while 문
  • while 문 구 는 순환 조건 을 먼저 판단 한 다음 에 순환 체 를 집행 하지 않 기로 결정 한다
  • .
  • do - while 문 구 는 순환 체 를 먼저 집행 한 다음 에 순환 조건 을 판단 하여 순환 체 를 집행 하지 않 기로 결정 한다
  • .
    int i=1,sum;
    while(i<=100){
        sum=sum+i;
        i++;
    }
    
    do{
        sum=sum+i;
        i++;
    }while(i<100);

    연산 자
    ① 산술 연산 자
    <、<=、>、>=、==、!=、할당 연산 자 (=)
    ② 논리 연산 자
    & & (와), | | (또는),!(아니)
    ③ 비트 연산 자
    & (비트 와), | (비트 또는), ~ (비트 반대), ^ (이상 또는), > (오른쪽 이동), < (왼쪽 이동)
    ④ 세 가지 연산 자
    조건 부 표현 식?결과 1: 결과 2
    ⑤ 연산 자의 크기
    변수, 상수, 데이터 형식 이 저장 공간 을 차지 하 는 바이트 수 를 계산 합 니 다.
    ⑥ 자동 감소 연산 자
    ++a,a++,–a,a–
    4. 출력 과 입력
    ① 출력
    //    
    char ch = 'a';
    putchar(ch);
    //     
    puts("hello word");
    printf("hello c");

    ② 포맷 출력
    % + 데이터 형식 을 통 해 포맷 출력, 일반적인 출력 형식
    //    
    printf("number is %d",23);
    //      
    printf("%X",0xFF00FF);
    //     
    printf("%o",8);
    //     
    printf("%f",3.14);
    //    
    printf("%c",'A');
    //     
    printf("%s","Hello C");

    ③ 입력
    //    
    char answer = getchar();
    printf("%c",answer);

    ④ 포맷 입력
    //    
    int a;
    scanf("%d",&a);
    //    
    char c;
    scanf("%c",&c);
    //     
    char buf[100];
    scanf("%s",buf);

    여기 서 주의해 야 할 것 은 scanf () 함수 의 두 번 째 매개 변 수 는 데이터 의 메모리 주 소 를 필요 로 합 니 다. & 기호 로 메모리 주 소 를 가리 킬 수 있 습 니 다. char [] 형식 은 그 자체 가 주소 이기 때문에 & 기 호 를 추가 하지 않 아 도 됩 니 다.
    다섯, 수조
    ① 1 차원 배열
    //          
    int arr[10];
    //            
    int arr[] = {5,6,8,9};

    ② 2 차원 배열
    int arr[3][4] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };

    ③ 문자 배열
    char str[10] = {'H','e','l','l','o','/0'};

    문자 배열 이 '/ 0' 이 나타 나 면 이 문자 배열 이 끝 났 음 을 판단 하고 기본 끝 은 자동 으로 채 워 집 니 다.
    함수
    ① 반환 값 없 는 함수
    void printfStr(){
        printf("Hello World");
    }

    ② 반환 값 이 있 는 함수
    int add(int a,int b){
        return a+b;
    }

    ③ 가 변 매개 변수 함수
    int sum(int n,...){
        int i;
        int all = 0;
        va_list args;
        va_start(args,n);
        for(i=0;i<n;i++){
            all+=va_arg(args,int);
        }
        va_end(args);
        return all;
    }

    전체 코드 는 다음 과 같다.
    #include<stdio.h>
    #include<stdlib.h>
    #include<stdarg.h>
    //          
    int add(int a,int b);
    void printfStr();
    int sum(int n,...);
    
    int main(){
        int c = add(2,3);
        int d = sum(1,2,3);
        printfStr();
        return 0;
    }
    //       
    int add(int a,int b){
        return a+b;
    }
    //       
    void printfStr(){
        printf("Hello World");
    }
    //      
    int sum(int n,...){
        int i;
        int all = 0;
        va_list args;
        va_start(args,n);
        for(i=0;i<n;i++){
            all+=va_arg(args,int);
        }
        va_end(args);
        return all;
    }
    

    지침
    ① 변수 포인터
    포인터 는 자바 의 배열 로 이해 할 수 있 습 니 다. 데이터 에 저 장 된 메모리 주 소 를 가리 키 며 기본 지침 은 배열 의 첫 번 째 데 이 터 를 가리 키 는 것 입 니 다.
    int a = 10;
    //    ,  a     
    int *pa = &a;
    //         ,    10
    printf("%d",*pa);
    printf("%d",pa[0]);

    ② 유형 포인터 변수 없 음
    형식 포인터 없 이 모든 종류의 변 수 를 가리 킬 수 있 습 니 다.
    void *str = "hello world";
    void *a = 5;
    
    printf("%s",str);
    printf("%d",a);

    ③ 함수 포인터
    포인터 가 가리 키 는 것 은 메모리 주소 입 니 다. 변수 메모리 주소 뿐만 아니 라 함수 메모리 주소 도 가능 합 니 다.
    #include<stdio.h>
    #include<stdlib.h>
    void say(int a,int b){
        printf("Hello");
    }
    int main(){
        void(*method)(int,int) = &say;
        method(0,0);
    }

    ④ 사용자 정의 함수 명
    type: def 키워드 사용자 정의 함수 이름 사용 하기
    #include<stdio.h>
    #include<stdlib.h>
    void say(int a,int b){
        printf("Hello");
    }
    typedef void(*Func)(int ,int);
    int main(){
        Func method = &say;
        method(0,0);
    }

    8. 구조 체 와 공동체
    ① 구조 체
    구조 체 는 자바 의 Bean 대상 에 해당 하 며, (struct + 구조 체 명) 을 실체 대상 으로 하여 대상 의 성명 을 진행 할 수 있다.
    struct File{
        char *name;
        int size;
    };
    
    int main(){
        //       
        struct File file;
        file.name = "abc.txt";
        file.size = 10;
        //       
        struct File file = {"abc.txt",10};
    }

    물론 type: def 키 워드 를 사용 하여 구조 체 를 별명 으로 만들어 자바 의 실체 대상 처럼 만 들 수도 있 습 니 다.
    struct _File{
        char *name;
        int size;
    };
    
    typedef struct _File File;
    
    int main(){
        File file;
        file.name = "abc.txt";
        file.size = 10;
    }

    또 다른 간단 한 쓰기 도 있 는데, 효 과 는 같 아서 코드 를 더욱 예 쁘 게 하기 위해 서 이다.
    typedef struct _File{
        char *name;
        int size;
    }File;
    
    int main(){
        File file;
        file.name = "abc.txt";
        file.size = 10;
    }

    ② 포인터 구조 체
    #include<stdio.h>
    #include<stdlib.h>
    //    
    typedef struct{
        char *name;
        int size;
    }File;
    //    
    File * createFile(char *name,int size){
        File *f = malloc(sizeof(File));
        f->name = name;
        f->size = size;
        return f;
    }
    //    
    void deleteFile(File *file){
        free(file);
    }
    
    int main(){
        File *f = createFile("abc.txt",10);
        printf("%s,%d",f->name,f->size);
        deleteFile(f);
    }

    ③ 공동체
    공동 체 는 말 그대로 공동 메모리 주 소 를 사용 하 는 구 조 를 이해 할 수 있다. 즉, 공동체 안의 속성 이 저장 하 는 값 은 모두 같다. 왜냐하면 그들의 메모리 주 소 는 한 곳 을 가리 키 기 때문이다. (공동체 메모리 주소 의 최대 길이 = 모든 속성 중에서 메모리 주소 의 길이 가 가장 큰 속성)
    typedef union _Fmaily{
        char a;
        int b;
    }Fmaily;
    
    int main(){
        Fmaily f;
        f.b = 97;
        //  97 ASCLL , a
        printf("%c",f.a);
        //  97
        printf("%d",f.b);
        return 0;
    }

    9. 파일 작업
    ① 파일 쓰기
    //      ,   :   ,   :    (w   ,r   )
    FILE * f = fopen("abc.txt","w");
    if(f != NULL){
        //    
        fputc('A',f);
        //     
        fputs("Hello",f);
        //     
        fclose(f);
    }

    ② 파일 읽 기
    int i;
    //   
    FILE * f = fopen("abc.txt","r");
    if(f != NULL){
        char buf[100];
        //  buf     
        memset(buf,0,100);
        for(i=0;i<100;i++){
            //    
            char ch = fgetc(f);
            //  ch  End of FIle
            if(ch!=EOF){
                buf[i]=ch;
            }else{
                break;
            }
        }
        printf("%s",buf);
        fclose(f);
    }
    return 0;

    물론 다른 상용 파일 API 도 있 습 니 다.
  • fgets (): 문자열 읽 기
  • fprintf (): 파일 에 포맷 된 문장
  • fscanf (): 포맷 된 읽 기 파일 의 한 마디
  • 기본 적 인 C 언어 기 초 는 이미 복습 을 마 쳤 습 니 다. 이런 기초 지식 은 우리 가 데이터 구조 와 알고리즘 을 배 울 수 있 고 API 를 조회 하여 학습 할 수 있 습 니 다. 여기 서 C 언어 함수 속사 문 서 를 다운로드 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기