티스토리 뷰

Computer Science/CS50

[CS50 3주차] 배열

JINSUKUKU 2021. 2. 12. 02:18

1. 컴파일링

컴파일링의 과정 : preprocessing → compiling → assembling → linking

✔  전처리(preprocessing) : 실질적인 컴파일 전에 헤더 파일 추가

✔  컴파일(compiling) : 전처리한 코드를 컴퓨터가 이해할 수 있는 어셈블리어라는 저수준 프로그래밍 언어로 컴파일

✔  어셈블링(assembling) :: 어셈플리코드를 중앙처리장치가 프로그래밍을 수행할 수 있도록, 연속된 0과 1로 변경

✔  링커(링크) : 여러개의 파일을 하나의 오브젝트 파일로 합쳐야 할 때 필요한 단계 (컴파일을 하나만 해야 하면 진행 X)

 

 

2. 디버깅

버그와 디버깅

✔  버그 : 코드에 들어있는 오류

✔  디버깅 : 모드에 있는 버그를 식별하고 고치는 과정

 

디버거

✔  프로그래머들이 사용하는 디버깅 프로그램

✔  프로그램을 한 번에 한 행씩 실행할 수 있게 도와줌

✔  프로그램을 특정 행(중지점)에서 멈추게 하는 프로그램으로 버그를 찾는데 도움을 준다

✔  디버거가 모든 오류를 잡아내는 것은 아니다

 

고무 오리 디버깅

✔  누군가에게(가상의 인물이나 고무 오리) 코드를 한 줄씩 설명하며 되짚어보는 디버깅 과정

 

 

3. 코드의 디자인

공백의 수나 줄 바꿈과 같은 것들은 코드의 실행에 직접적 영향을 주는 것은 아니나, 코드를 작성하는 사람들이 코드를 읽고 이해하는데 영향을 주기 때문에, 코드가 심미적으로 디자인되어야 한다.

 

 

4-5. 배열

배열

✔  같은 자료형의 데이터를 메모리 상에 연이어서 저장하고 이를 하나의 변수로 관리하기 위해 사용

#include <stdio.h>

int main(void){
	int arr[4] = {1,2,3,4};
    for(int i=0; i<4; i++){
    	printf("%d ",arr[i]);  //1 2 3 4
    }
	return 0;
}

 

형 변환

✔  정해진 자료형을 다른 자료형으로 바꾸는 과정

#include <stdio.h>

int main(void){
  int num = 2;
  printf("%f",(double)2); //2.0
  return 0;
}

 

전역 변수와 상수

✔  전역변수 : 코드 전반에 걸쳐 사용될 값은 전역 변수로 저장하여 어디에서든 사용할 수 있게 한다

✔  상수 : 코드 전반에 걸쳐 바뀌지 않는 값은 상수로 지정. 수정이 불가능하며, 상수명은 대문자만 사용한다

✔  위와 같은 이유로 전역 변수는 상수로 선언되는 경우가 많다

#include <stdio.h>
const int MONTH = 12;

int main(void){
  printf("%d",MONTH);  //12
  return 0;
}

 

 

6. 문자열과 배열

✔  모든 자료형은 크기가 정해져 있다

✔  문자열은 문장의 끝을 알 수 없어서 그 크기를 다른 자료형처럼 정해둘 수 없다

✔  그렇기 때문에 다른 자료형과 다르게, 문자(char) 형의 배열을 만들듯이 그 크기를 정한다

✔  그리고 문장이 끝났다는 의미로 마지막에 \0 (null = null종단 문자)를 저장한다

✔  그렇기 때문에 n개의 문자를 사용한 문자열을 저장할 공간을 만들기 위해서는 n+1개의 문자형(char) 배열이 필요하다

   

 

 

7. 문자열의 활용

문자열의 길이와 탐색

✔  문자열의 마지막에는 \0(null)이 저장되어 있으므로, for문을 사용해서 문자열을 출력할 수 있다

#include <stdio.h>

int main(void){
    char arr[10]="happy";
    for(int i=0; i<10; i++){
        if(arr[i]!=0){
            printf("%c",arr[i]);
        }else{
            break;
        }
    }
    return 0;
}

 

<string.h>

✔  strlen( ) : 문자열의 길이를 확인하는 메서드

✔  strcmp( str1, str2 ) : 두 가지 문자의 사전적 순서를 비교하는 메서드

✔  strcpy( str1, str2 ) : str2의 문자열을 복사해 str1에 저장하는 메서드 → 문자열을 저장할 때 주로 사용

✔  strcat( str1, str2 ) : 두 개의 문자열을 붙임

✔  strstr( str1, str2 ) : 두 개의 문자열을 인자로 받아 첫 번째 문자열 내부에 두 번째 문자열이 나오는지 탐색

 

<ctype.h>

✔  int isalnum (int c) : c가 숫자 문자나 영문 알파벳의 ASCII 코드 값인지 판별

✔  int isalpha (int c) : c가 영문 알파벳의 ASCII 코드 값인지 판별

✔  int tolower (int c) : c를 소문자로 변환

✔  int toupper (int c) : c를 대문자로 변환

 

 

8. 명령행 인자

int main ( int argc, string argv[ ] )

✔ argc : main 함수가 받게 될 입력의 개수

✔ argv[ ] : 입력이 포함되어 있는 배열

✔ argv[0] 은 일반적으로 프로그램의 이름으로 저장

✔ 하나의 입력만을 받는다면 argv[ ]의 크기는 2가 됨 ( 0:프로그램의 이름, 1:입력받은 값)

✔ 컴파일한 파일의 이름을 입력하여 실행할 때, 추가로 입력하면 argv[ ]에 저장되면서 사용됨

#include <stdio.h>

int main(int argc, string argv[]){
	if(argc == 2){
    	printf("hello, %s\n", argv[1]);
    }else{
    	printf("hello, world\n");
    }
	return 0;
}

 

 

 

 

[출처] 부스트코스 | 모두를 위한 컴퓨터 과학(CS50 2019)

'Computer Science > CS50' 카테고리의 다른 글

[CS50 5주차] 2. 포인터  (0) 2021.02.12
[CS50 5주차] 1. 메모리 주소  (0) 2021.02.12
[CS50 4주차] 알고리즘  (0) 2021.02.12
[CS50 2주차] C언어  (0) 2021.02.12
[CS50 1주차] 컴퓨팅 사고  (0) 2021.02.11
댓글
«   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