모두를 위한 컴퓨터 과학 CS50 데이비드 J. 말란 (David J. Malan)

 

앞 파트인 1. 컴퓨팅 사고에서Scratch 스크래치라는 그래픽 프로그래밍 언어를 통해

간단한 알고리즘을 구현하고 원리를 깨우쳤다

텍스트 기반의 프로그래밍 언어를 이용하여 컴퓨터에게 일을 시켜보자

 

2. C언어

1) C기초

 

가장 널리 쓰이는 프로그래밍 언어 중 하나이다

 

#include <stdio.h>

int main(void) {
    printf("Hello World!\n");
}

 

 

{ 중괄호 사이에 앞으로 코드를 작성하여 실행; } 하면 된다

 

스크래치에서 say 함수로 쓰이던 부분은 printf 함수로 사용한다

\n 은 줄 바꿈이다

 

#include <stdio.h>는 stdio.h 라이브러리를 사용함을 뜻한다

stdio.h 는 C언어의 표준 라이브러리 (Standard Input/Output library)라고 한다

이 코드에서 printf 함수를 사용할 수 있게 해 준다

 

코드를 작성했으면 "파일명. c"이렇게 확장자명을 C로 저장한다

 

이렇게 작성한 코드는 "소스 코드 Source code"라 불린다

컴퓨터에게 코드를 실행시키려면 컴퓨터가 이해할 수 있는 언어로 변환시켜야 한다

2진수로 변환된 코드는 "머신 코드 Machine code"라 한다

 

변환은 누가?

컴파일러 Compiler라는 프로그램이 수행한다

 

컴파일은 어떻게?

 

clang 파일명.c

 

clang 컴파일러로 파일명. c라는 코드를 컴파일하는 명령어이다

 

2) 문자열

 

string answer = get_string("what's your favorite animals?");

프로그래밍 언어에서 = 은 오른쪽에서 왼쪽으로 가는 화살표와 같이

오른쪽에 있는 것을 왼쪽에 지정하는 할당 연산자라고 한다

 

answer는 변수명이며 C언어에서 중요한 점은 변수가 저장할 오른쪽 데이터 종류를 정확하게 명시해야 한다는 점이다

 

<cs50.h> 라이브러리에 있는 함수를 활용해 스크래치의 ask 함수와 같은 문자열을 받는 get_string을 사용했다

string 을 바로 형식지정자 라고 한다

 

 printf("hello, %s\n", answer);

 

printf 함수로 출력할 때 변수 answer에 저장된 데이터 값을 사용하고 싶다면

answer 앞에 변수임을 나타내기 위한 % 를 붙여줘야 하고,

마찬가지로 어떤 종류의 인자인지 알려주기 위해 sting의s를 % 뒤에 붙여준다

 

상위 예시의 get_string 함수는 cs50 라이브러리에서 사용할 수 있고,

cs50.h 파일이 포함되어야 컴파일이 가능하다

 

이 파일명이 string이라고 가정했을 때 컴파일 명령어는

 

clang -o string string.c -lcs50

 

-o는 string.c 를 string.out이라는 머신코드로 저장할 수 있게 하는 명령어이고,

-lcs50에서 l은 link의 의미를 가진 인자이다

이를 통해 컴파일 시 cs50 파일을 연결하여 진행이 가능하다

 

이러한 복잡한 명령어보다 간단한 명령어로는 make 가 있다

 

make string

 

3) 조건문과 루프

 

counter라는 변수에 숫자를 저장하고 싶을 때는?

 

int counter = 0;

 

int는 변수가 정수 integer 임을 알려주고,

counter라는 이름의 변수에 0 값을 저장(초기화)한다

 

변수의 값을 1씩 증가시키고 싶을 때는?

 

counter = counter + 1;

 

counter에 1을 더한 값을 다시 counter에 저장(할당)한다는 의미이다

 

좀 더 간결한 표현도 가능하다

 

counter += 1;
counter++;

 

조건문을 만들고 싶을 때는?

 

if (x < y)
{
	printf("x is less than y\n");
}

 

if (괄호 안에 검사하고자 하는 조건을 입력한다)

{

 안에 조건을 만족할 때 수행하고자 하는 작업을 입력한다

}

 

else를 이용해 위의 조건이 만족하지 않을 경우의 조건을 추가할 수 있다

 

if (x < y)
{
	printf("x is less than y\n");
}
else
{
	printf("x is not less than y\n");
}

 

조건을 더 추가하려면 else if를 통해 나타낼 수 있다

 

if (x < y)
{
	printf("x is less than y\n");
}
else if (x > y)
{
	printf("x is not less than y\n");
}
else if (x == y)
{
	printf("x is equal to y\n");
}

 

하단의 == 는 = 표시가 이미 할당연산자로 지정되어 있어,

같다는 것을 표현하기 위해 사용하는 일치 연산자이다

 

위의 예시에서는 사실 (x == y)라는 조건을 명시하지 않아도 되므로

 

if (x < y)
{
	printf("x is less than y\n");
}
else if (x > y)
{
	printf("x is not less than y\n");
}
else
{
	printf("x is equal to y\n");
}

 

이렇게 좀 더 간결한 코드로 만들 수 있다

 

반복문(루프)을(를) 만들고 싶을 때는?

 

while (true)
{
	printf("hello, world\n");
}

 

while (괄호 안에 조건을 입력한다)

{

 안에 수행할 작업을 입력한다

}

 

루프를 구현하고 싶다면 괄호 안의 조건이 네 yes, 참 true, 1 이 나오면 된다

 

예시처럼 true를 적게 되면 while 루프가 영원히 수행된다

 

특정 횟수만큼 작업을 수행하고 싶다면?

 

int i = 0;
while (i < 50)
{
	printf("hello, world\n");
	i = i +1;
}

 

정수 i를 선언하고 값을 0으로 할당했다

 

while 문이 돌면서

 

i는 0으로 설정 -> i는 50보다 작은가? -> 작다 -> hello world를 출력한다 -> i를 1 증가시킨다 -> i가 50보다 작은가?-> (반복) -> i가 50보다 작은가? -> 작지 않다 -> 종료

 

순으로 진행된다

 

for 문을 사용하면 위 예시처럼 따로 변수를 선언하지 않고

 

for (int i = 0; i < 50; i= i+1)
{
	printf("hello, world\n");
}

 

for (변수 초기화; 변수 조건; 변수 증가)

 

이렇게 while문에 비해 간단한 표현이 가능하다

+ Recent posts