On a couch

3. 프로그래밍 기초 (C) 본문

프론트엔드 공부/CS50

3. 프로그래밍 기초 (C)

couch 2022. 4. 19. 11:48

01 문장 출력

#include <stdio.h>

int main(void) 
{
	printf("hello world\n");
}

첫 번째 C 프로그램

  • 1행에서, #include <stdio.h>는 이 프로그램이 stdio.h라는 파일 안에 들어 있는 미리 작성된 함수들에 접근할 수 있도록 합니다. 이로 인해 화면에 문자를 보여주는 역할을 하는 printf라는 함수를 가져다 사용할 수 있습니다.
  • 3행의 int main(void)는 프로그램의 시작점을 정의합니다. 중괄호 안의 내용이 어떠한 것이든 main 함수의 한 부분이 됩니다.
  • printf는 문자열을 화면에 출력하는 함수입니다. C에서 문자열은 항상 큰따옴표 안에 작성해야 합니다.
  • printf 괄호 안에는 화면에 보여주고자 하는 문자열을 입력값으로 넣어줄 수 있습니다. 이 경우 문자열은 “hello, world\n”입니다. \n 문자는 줄 바꿈 문자로 “hello, world!”를 출력하고 줄이 바뀌게 됩니다. printf문 마지막의 세미 콜론(;) 프로그램 명령의 마지막이 어디인지를 알려줍니다.

컴파일하여 프로그램 실행하기

  • C 프로그램을 작성한 후 .c로 끝나는 파일로 소스코드를 저정하고, 이를 컴파일(compile)을 해야 합니다. 컴파일이란, 소스 코드를 일련의 0 1들로 이루어진 오브젝트 코드(object code)로 전환해주는 것입니다. 소스 코드가 오브젝트로 코드로 변환되면, 컴퓨터가 이해하고 실행 가능한 0과 1의 형태로 만들어집니다.

 

02 변수와 메모리

변수

변수(Variable) 값을 담아둘 수 있는 저장 공간으로 프로그램 수행에 따라 값이 수정되거나 변경될 수 있습니다. 나중에 코드에서 사용할 수 있는 중요한 정보를 기억하기 위해 변수를 사용합니다.

 

변수를 선언하여 사용하기

  • 첫 번째 단계는 변수 선언(declaration) 입니다. C에서 변수 선언을 해주기 위해서는 변수의 자료형을 알려준 후 변수의 이름을 명시해줍니다.
  • 1행을 보면, 우리는 count라는 이름의 변수를 int 자료형으로 선언했습니다. int는 양수와 음수 그리고 0으로 이루어진 정수를 저장하기 위한 자료형입니다. 아직 count에 아무런 값도 할당하지 않았습니다. 우리는 그저 프로그램에 나중에 값이 저장될 공간만 만들어 달라고 요청했을 뿐입니다.
  • 한번 변수를 선언하면, 다양한 방법으로 다룰 수 있습니다. 2행을 보면 변수 count에 2라는 값을 할당했습니다. 이제 숫자 2가 변수 count 안에 저장된 것입니다. 변수를 선언하는 동시에 값을 지정하도록 int count =2;와 같이 작성할 수 있습니다.
  • 변수에 값을 넣어준 다음에도 값을 바꿀 수 있습니다. 3행은 count의 값을 8로 바꿔줍니다. 이제 count는 이전에 저장한 값이었던 2를 잊고 8을 기억하게 됩니다.
  • 변수에 들어있는 값은 이름만으로도 접근할 수 있습니다. 예를 들어, 4행은 x라는 이름의 새로운 변수를 사용했고 초기값으로 count의 값이 설정됐습니다. 이것은 여러분의 프로그램이 count 변수로 가서 그 안에 있는 값을 확인하고 그 값을 x의 값으로 설정해준다는 것을 의미합니다. 가장 최근의 count의 값이 8이었기 때문에, x의 값은 역시 8이 될 것입니다.

사용자 입력을 받는 변수

#include <stdio.h>

int main(void)
{
	int i;
	scanf("%d", &i);
	printf("i is %d", i);
}
  • 다양한 상황에서, 프로그램은 사용자로부터 입력값을 받아오고 변수에 저장하는 것이 필요합니다. 입력값을 받기 위해 일반적으로 사용하는 함수는 scanf입니다.
  • 5행에 정수형 변수 i가 선언되었고, 이 변수에 실제 정수 값을 저장하고자 합니다. 6행에서 scanf(“%d”, &i);를 통하여 사용자가 입력하는 정수를 i에 저장을 할 수 있습니다. %d는 정수 값을 담아두는 플레이스홀더이며, &i는 i라는 변수의 주소라는 뜻입니다.
  • 7행에서 변수의 값을 화면에 보여줍니다. printf 다음에 오는 괄호 안에 “i는 %d”라는 문자열과 %d를 대체할 정수 i를 입력해줍니다. 예를 들어 사용자가 6행의 입력값으로 28을 입력했다면, 7행은 %d를 i의 값으로 대체하므로 화면에서 “i는 28”로 보여집니다.

 

03 자료형

자료형

C는 변수를 선언할 때마다 변수의 자료형(Data Type)을 명시해줘야 하는 정적인 형식의 언어입니다. 비교적 최근에 개발된 언어는 프로그램이 실행 시에 변수의 자료형을 유추하는 동적인 형식의 언어입니다.

 

C의 기본 자료형

  • int형(정수형)은 정수를 나타내는 자료형인데 이 값은 양수가 될 수도, 음수가 될 수도, 또 0이 될 수도 있습니다그러나 2.8, 5.124, -8.6 등은 int형이 될 수 없습니다. int형이 선언되면 컴퓨터는 변수를 저장하기 위한 공간으로 4byte를 할당합니다. 4byte는 32bit이기 때문에 -2^31에서 2^3 까지 2^32(40억이 넘는 수)개의 사용할 수 있는 정수가 있다는 것을 의미합니다.
  • 만약 다른 범위의 정수를 저장하고 싶다면 어떻게 해야 할까요? C에는 자료형을 바꿔주기 위해 변수를 선언할 때 int 앞에 추가로 작성해주는 키워드인 한정자가 있습니다. 이것은 unsigned int형인데, 여전히 4bit 공간을 차지하면서도 음수를 범위에 포함하지 않습니다. 그러니 0부터 ^3 까지의 값을 사용할 수 있습니다.
  • 또 다른 한정자는 long이라는 것인데, 더 많은 바이트 공간을 차지합니다. long long integer형은 4byte 대신 8byte의 저장 공간을 사용하는 정수형입니다. 이는 -2^63 에서  까지의 수를 사용할 수 있습니다.
  • C에서 정수가 아닌 수를 저장하는 형식을 float라고 하는데, 이는 2.8이나 3.14같은 소수를 저장하기 위해 4byte 공간을 차지합니다. C는 double형이라는 기본 자료형도 있는데, 이것 역시 소수를 저장하지만 4바이트가 아닌 8byte의 공간을 차지합니다.
  • 수를 표현하는 자료형 이외의 기본 자료형으로는 char(문자형)이 있습니다. char형은 글자 하나를 표현하는데, a, b, c, …, Z 등의 알파벳 뿐만 아니라 !와 같은 특수문자, 그리고 ‘\n’과 같은 줄바꿈 기호도 나타낼 수 있습니다. char형은 항상 작은 따옴표를 이용하여(‘a’) 표현됩니다. char형은 1byte의 공간을 차지합니다.

04 연산자

산술 연산자

  • int형 변수와 나눗셈을 같이 수행해줄 때, 정수는 정수가 아닌 변수를 저장하지 못한다는 것을 알고 있는 것이 중요합니다. 예를 들어 5행에서 우리는 10 / 3의 값을 저장하려 합니다. 그러나 10/3의 값은 정수가 아니기 때문에, int형인 변수 c는 두 수의 나눗셈을 확인하고 그 결과값의 소수점 이하의 값을 잘라 정수로 만들어줍니다. 소수점 이하의 정확한 답을 원할 경우 형변환을 해주어야 합니다.
  • C에는 나머지 연산자(%)라는 또 다른 연산자도 있습니다. 나머지 연산자는 연산자 왼편의 수가 오른편의 수로 나눠질 때 발생하는 나머지를 구해주는 것입니다. 나머지 연산자는 정수형끼리만 사용할 수 있다는 것을 유의해야합니다.

할당 연산자

  • C는 변수의 값을 갱신할 수 있는 할당 연산자도 사용할 수 있습니다. 할당 받는 변수는 등호의 왼쪽에 위치합니다. 이미 있는 값에 대하여 새로운 값을 갱신해주는 것은 매우 흔하게 사용됩니다.
  • 또한 C에는 변수명 뒤에 ++나 –-를 붙여서 변수의 값을 1만큼 증가시켜 주거나 감소시켜 주는 특별한 문법이 있습니다. 5행의 e++ 같은 문장은 e 값을 1만큼 증가시켜 줍니다. 이와 같은 연산자는 증감 연산자라고 부릅니다.

 

05 논리표현과 조건문

부울 연산식과 조건문

프로그래머들이 프로그램에서 특정 코드가 특정 상황에서만 실행되도록 의사 결정하는 코드를 만들 때 조건문(Condition)을 씁니다. 조건은 대게 어떠한 값이 참인지 거짓인지를 나타내는 부울 연산식을 통해 동작합니다.

 

  • 부울 연산자는 참(true)과 거짓(false)을 판단하는 부울 연산식을 만드는 데 사용됩니다. 많이 쓰이는 부울 연산자로는 < (더 작다), > (더 크다), == (같다), <= (작거나 같다), >= (크거나 같다), != (같지 않다)가 있습니다.
  • &&연산자는 ‘그리고’라는 의미로 둘다 참일 때만 참의 값을 가질 수 있습니다. 반대로 ||연산자는 ‘또는’의 의미로 둘 중 하나만 참이어도 참의 값을 갖습니다.
  • 수학에서 같다는 연산자는 =이지만, 대부분의 프로그래밍 언어에서 같다는 의미를 갖는 부울 연산자는 ==입니다. =기호가 하나만 쓰이는 것은 할당 연산자입니다.

조건문

조건 분기 다른 상황에 따라 다른 코드가 실행되어야 한다는 개념을 말합니다. 가장 흔히 쓰이는 조건은 if 인데 중괄호로 감싸진 한 코드 블록은 오직 소괄호에 쓰여진 조건이 참일 때만 실행됩니다.

선택적으로 if문 뒤에 else 블록을 쓸 수 있는데, if 조건이  거짓일 때 코드가 실행됩니다. C에서는 한 개 이상의 else if을 쓸 수 있는데, 조건을 더 추가하여 다른 코드 블록을 실행시킬 수 있습니다.

switch (x)
{
	case 1:
		printf("A\n");
			break;
	case 2:
		printf("B\n");
		break;
	default:
		printf("C\n");	
}

switch 조건식의 결과값에 따라 매칭되는 case의 코드를 실행시킵니다.<코드 3>에서 만약 (3행)x가 1이면 “A\n”가 출력한 후 break에 의해 switch문을 빠져 나오고, (6행)x가 2이면 “B\n”가 출력한 후 빠져 나오며, (9행)그 외의 경우(default의 경우)에는 “C\n”가 출력된 후 switch문을 빠져 나오게 됩니다.

int y = (x > 3) ? 2 : 1;

조건문의 세 번째 유형으로 3항 연산자가 있습니다. 3항 연산자는 식 하나를 받아서, 식이 참이면 : 기호 왼편의 값으로 계산되고, 거짓이면 오른편의 값으로 계산됩니다. <코드 4> 을 보면, 만약 x > 3가 참이면 y는 2가 되고, 그렇지 않으면 1이 됩니다.

 

06 반복문

 

 

 

'프론트엔드 공부 > CS50' 카테고리의 다른 글

6. 인터넷과 네트워크  (0) 2022.04.21
5. 프로그래밍 응용 (2)  (0) 2022.04.20
4. 프로그래밍 응용 (1)  (0) 2022.04.19
2. 알고리즘  (0) 2022.04.18
1. 컴퓨터와 컴퓨팅  (0) 2022.04.16