[cs50] 3강 Array

Joy·2020년 7월 9일
0

CS50

목록 보기
3/7

1) 컴파일링

make나 clang을 사용해서 프로그램을 실행할 때 거치는 단계

  • 전처리
  • 컴파일링
  • 어셈블링
  • 링킹

전처리(Precompile)

전처리기에 의해 수행
#로 시작하는 소스코드 -> 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려줌

컴파일링

C 코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일

어셈블링

어셈블리 코드를 오브젝트 코드로 변환(머신코드_연속된 0과 1들로 )

링킹

여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합쳐주기.
프로그램이 라이브러리 처럼 여러 파일로 이루어져있으면 이 작업 필요


2) 디버깅

버그 : 코드의 오류

디버깅(debugging) : 버그 식별하고 고치는 과정


3) 코드의 디자인

여러 사람들이 코드를 작성하기 때문에 서로 불필요한 오해를 없애고, 코드를 이해하는 데 드는 비용을 최소화하기 위해 특정 스타일 가이드 따라야 함

4) 배열(1)

메모리

자료형 별로 서로 다른 크기 메모리 차지

bool: 불리언, 1바이트
char: 문자, 1바이트
int: 정수, 4바이트
float: 실수, 4바이트
long: (더 큰) 정수, 8바이트
double: (더 큰) 실수, 8바이트
string: 문자열, ?바이트

  • Ram 칩이 메모리 저장 공간

배열 만들기

int main(void)
{
    // Scores
    int scores[3];
    scores[0] = 72;
    scores[1] = 73;
    scores[2] = 33;
}

5) 배열(2)

전역변수

  • const를 앞에 붙여서 전역 변수, 즉 코드 전반에 거쳐 바뀌지 않는 값임을 지정

배열의 동적 선언 및 저장

#include <cs50.h>
#include <stdio.h>

float average(int length, int array[]);

int main(void)
{
    // 사용자로부터 점수의 갯수 입력
    int n = get_int("Scores:  ");

    // 점수 배열 선언 및 사용자로부터 값 입력
    int scores[n];
    for (int i = 0; i < n; i++)
    {
        scores[i] = get_int("Score %i: ", i + 1);
    }

    // 평균 출력
    printf("Average: %.1f\n", average(n, scores));
}

//평균을 계산하는 함수
float average(int length, int array[])
{
    int sum = 0;
    for (int i = 0; i < length; i++)
    {
        sum += array[i];
    }
    return (float) sum / (float) length;
}

6) 문자열과 배열

  • string은 char 데이터들의 배열.
  • string 끝엔 ‘\0’ : 문자열의 끝을 나타내는 널 종단 문자 -> 반복문 사용시 제어값 표현, 컴퓨터가 문자열 끝 알수있게
  • string 배열은 2차원 배열 활용 -> string 과 char 로 접근 가능

7) 문자열의 활용

string.h와 ctype.h의 라이브러리의 함수 확인 및 활용

  • strlen 문자열의 길이를 알려주는 함수
  • ctype 라이브러리에 toupper() 이라는 함수 : 대문자ㅗㄹ

8) 명령행 인자

  • 명령행 인자 : commend line argument. 프로그램 뒤에 단어를 적으면 그 단어 바로 사용하게.

  • 명령행 인자를 사용하면 고정된 출력 값이 아니라 동적인 출력값을 표현 할 수 있습니다

  • main 함수는 return 값을 정해주지 않으면 0을 리턴.(문제가 없다는 뜻.)

#include <cs50.h>
#include <stdio.h>

int main(int argc, string argv[])
{
    if (argc == 2)
    {
        printf("hello, %s\n", argv[1]);
    }
    else
    {
        printf("hello, world\n");
    }
}
  • 첫번째 변수 argc는 main 함수가 받게 될 입력의 개수
  • argv[]는 그 입력이 포함되어 있는 배열(string 배열)

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

review:

C언어 함수, 배열, 명령어 인자 이해

profile
roundy

0개의 댓글