[AI_CS] Array

JJangnaa·2023년 8월 11일
0

1. 컴파일링

  • 학습목표: 컴파일링의 네 단계를 설명할 수 있다,.
  • 핵심단어: 컴파일러, 어셈블링, 링킹

-- 4개의 단계가 존재: preprocessing, compiling, assembling, linking

1) preprocessing

-- clang 혹은 make 즉 명령어를 사용하여 프로그램을 실행하면 해당 파일의 실제 코드로 대체

-- ex) # include stdio.h => string get_string(string prompt);

2) compiling

  • 소스코드 → 머신코드

  • 전처리가 된 코드가 clang 과 같은 컴파일러에 의해 어셈블리 코드로 바뀐다.

3) assembling

-- 어셈블리 코드가 생기면 그걸 실제 0과 1로 이루어진 머신코드로 바꿔야 하는데, 이걸 clang 이 수행하는 어셈블링이라고 하는 것이다.

4) linking

-- 위 세단계를 거친 후 모든 0과 1들을 하나의 큰 파일로 합치는 것

-- 프로그램은 여러 다른 파일과 연관되어 있으므로 그 파일들을 clang 이 컴파일 해야 한다. 이를 위해 clang 을 여러번 실행해야 한다면 시간 소요가 늘어나겠지만 컴퓨터가 자동으로 해주므로 괜찮다.



2. 디버깅

  • 학습목표: 디버깅 하는 여러방법을 설명할 수 있다.
  • 핵심단어: 디버깅, help50, debug50

-- 문법 오류 및 논리 오류 : help, debugging



3. 코드의 디자인

  • 학습목표: 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있다.
  • 핵심단어: check50, style50, 고무오리

-- 가독성이 좋아야 하는 이유 : 유지보수 및 협업시 큰 도움이 됨



4. 배열 (1)

  • 학습목표: 배열을 정의하고 사용하는 방법을 설명할 수 있다.
  • 핵심단어: 배열

- 모두 같은 자료형의 값들로 구성되어 있으며 길이를 선언해줘야 함

- c에서는 char를 사용할 때 쌍따옴표가 아닌 따옴표 !

- 형변환 변수 앞에 괄호 사용 ex) (int) a

- 2진법 ASCII 등 컴퓨터에 저장될 때 어떤식으로 저장되는지 대응 관계를 항상 인지하기



5. 배열 (2)

  • 학습목표: 배열을 정의하고 사용하는 방법을 설명할 수 있다.
  • 핵심단어: 배열, 전역변수

- 전역변수는 대문자로, 선언할 때 const

- main 이 위에 있는 것이 좋음

- C 에서는 정수를 정수로 나누면 정수가 나옴

- 강력한 자료형으로 반환 ex) int/float => float



6. 문자열과 배열

  • 학습목표: 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다.
  • 핵심단어: 문자, 문자열

- string 은 정해진 크기를 가질 수 없음

- 문자열이 언제 끝나는지를 알려주는 정보가 필요

-- ↪ null 문자 (\0) : 8개의 bit 가 모두 0인 상태

- %s 에 변수명을 넣으면 printf가 일종의 루프를 만들어 첫번째 글자부터 반복해서 널문자 전까지 출력



7. 문자열의 활용

  • 학습목표: 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다.
  • 핵심단어: strlen, toupper

- # include <string.h> : 문자열과 관련된 다양한 함수들이 있는 라이브러리

- # include <ctype.h> : toupper 함수가 있는 라이브러리

⨁ 프로그래밍은 결국 추상화를 이용해서 복잡한 기계어를 간단하게 처리하는 것



8. 명령행 인자

  • 학습목표: 명령형 인자를 받는 프로그램을 C로 작성할 수 있다.
  • 핵심단어: 명령행 인자, argv, argc

- 실행하고자 하는 프로그램 뒤에 적는다. ex) $ clang -o hello hello.c

- 정보를 보호하기 위한 암호화

암호화 input output

⨁ 송신자와 수신자가 사전에 어떤 키를 사용해서 문자를 암호화 할지 정해야 한다.


ex)
예시 암호화 input output

위와 같은 구조에서 key = 1, plaintext = I LOVE YOU 라고 가정할 때, 컴파일 과정에서 plaintext 는 ASCII 코드를 사용하여 변환 후 각 수에 1을 더해주어 ciphertext 로 ouput 한다면 다른 사람들은 원래 값을 알 수 없다.

profile
귀여운게 좋아

0개의 댓글