프랙티스만이 살길. 프랙티스만이 살길.
2. C언어 본문
- C언어
- C언어는 오래되고 전통적인 순수 텍스트 기반의 언어이다.
#include <stdio.h>int main(void) { printf("hello, world\\n"); }
- int main(void)는 시작한다의 의미를 가지고있고, 뒤에 {}중괄호에 코드를 작성한다.
- stdio.h는 “stdio.h”라는 이름의 파일안에 printf라는 함수를 찾아서 접근 할 수 있도록 해준다.
- C언어로 작성한 코드를 “name.c”로 저장해야한다.
- 컴파일러
- 위 처럼 작성된 코드를 **“소스코드”**라고 부른다. 이를 2진수로 작성된 **“머신코드”**로 변환하면 컴퓨터가 이해할 수 있다. 이 작업을 컴파일러라는 프로그램이 수행해준다.
- clang은 코드를 컴파일하는 프로그램의 이름이다. 터미널에 clang name.c라는 명령어를 사용하여 컴파일할 수 있다.
- C언어에서 변수지정 형식 지정자.
- C는 아주 오래된 언어이기 때문에 입력하는 데이터의 종류를 아주 정확히 명시해주어야한다. 문자열 형식 지정자 string을 적고 뒤에 변수명을 적어준다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
string answer = get_string("What's your name?\\n.");
printf("Hello I'm %s\\n", answer);
}
- if문
if (x<y)
{
printf("x is less than y\\n");
}
else if (x>y)
{
printf("x is greater than y\\n");
}
else (x==y)
{
printf("x is equl than y\\n");
}
if, else, else if 뒤에는 세미콜론(;)이 붙지 않은 것을 볼 수 있는데, 보통 조건과 같은 것들의 끝에는 세미콜론을 붙이지 않는다.
- for문
for (int i = 0; i <50; i++)
{
printf("hello, world\\n");
}
for ( ) 안에 각각 (변수 초기화; 변수 조건; 변수 증가) 삽입
- 데이터 타입
- bool: 불리언 표현, (예) True, False, 1, 0, yes, no
- char: 문자 하나 (예) 'a', 'Z', '?'
- string: 문자열
- int: 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0
- long: 더 큰 크기의 정수
- float: 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56
- double: 부동소수점을 포함한 더 큰 실수
- 형식 지정자
- %c : char
- %f : float, double
- %i : int
- %li : long
- %s : string
- 기타 연산자 및 주석
- +: 더하기
- : 빼기
- : 곱하기
- /: 나누기
- %: 나머지
- &&: 그리고
- ||: 또는
- //: 주석
- 사용자정의함수
#include <stdio.h>
void cough(void)
{
printf("cough\\n")
}
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
cough함수를 정의 했지만, 이런식으로 함수가 많아진다면 중요한 main 함수가 밑으로 내려가게 된다. 그러나 main 함수를 cough 함수 위로 올리면 에러가 발생한다. main함수에 cough함수를 사용해버렸기 때문.
#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(void)
{
printf("cough\\n");
}
void cough(void)를 세미콜론과 함께 위로 올려 문제를 해결할 수 있다. 컴퓨터가 cough함수를 전부 본 적은 없어도 이름은 본적이 있으니 main 함수에 나올 때까지 코드를 계속 읽도록 하는 것이다.
#include <cs50.h>
#include <stdio.h>
int get_positive_int(void);
int main(void)
{
int i = get_positive_int();
printf("%i\\n", i);
}
int get_positive_int(void)
{
int n;
do
{
n = get_int("Positive Integer: ");
}
while (n < 1);
return n;
}
- int 함수(char)와 같은 함수에서 앞의 int는 출력되는 값의 타입이고, 괄호안의 char는 입력되는 값의 타입이다. 입력이나 출력이 필요없다면 void라고 적으면된다.
- 위 코드에서 int n; 은 컴퓨터에게 n이라는 변수를 달라는 요청이다. 어떤 값이 저장될지 아직 모르겠으니 일단 적어놓는 것.
- do-while은 기존의 while에서 수행문앞에 do가 붙어 while의 조건문 보다 위로 올라가있는 형태이다. do를 사용하므로써 조건문이 거짓이라도 한번은 수행하게 해준다.
- 컴퓨터는 RAM(랜덤 액세스 메모리)이라는 물리적 저장장치를 포함있다. 우리가 작성한 프로그램은 구동 중에 RAM에 저장되는데, RAM은 유한한 크기의 비트만 저장할 수 있기 때문에 때때로 부정확한 결과를 내기도 한다.