일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 2-layered architecture
- 가위바위보 풀이
- 프로그래머스
- 리트허브 사용법
- 프로그래머스 가위바위보 풀이
- 춥고더운우리집
- 배열의 유사도 파이썬
- 주니어개발자
- 춥고 더운 우리 집
- 파이썬 컬렉션
- 프로그래머스 배열의 유사도 파이썬
- leftJoin
- 리트허브 오류
- BigO notation
- 프로그래머스 특정 문자 제거하기
- 리트허브 커밋
- Programmers 배열의 유사도
- programmers 배열 회전
- 특정문자 제거하기
- 프로그래머스 배열 회전시키기
- 프레젠테이션 레이어
- 비지니스 레이어
- 프로그래머스 가위바위보
- 슈츠 자막
- 공선옥
- 개발자 취준
- 파이썬 특정 문자 제거하기
- collection python
- 스프링 시스템 구조
- Today
- Total
기억보다 기록을
[cs50] 문법, 변수 본문
C언어의 문법
C 언어는 프로그램을 작성하는 데 사용되는 프로그래밍 언어입니다. C와 같은 프로그래밍 언어는 굉장히 구체적인 문법(Syntax)을 사용하여 프로그램을 작성할 것을 요구합니다. 여기서 구체적인 문법이란 완벽한 프로그램으로 동작하는 문장들을 작성하기 위해 필요한 단어와 기호들(소괄호, 중괄호 등)을 어떻게 배열할 것인지에 대한 규칙입니다. C의 문법은 처음에는 복잡해 보일 수 있지만 연습을 하다 보면 익숙해질 것입니다.
첫 번째 C 프로그램
#include <stdio.h>
int main(void)
{
printf("hello world\n");
}
왼쪽에 있는 코드는 “hello, world”를 출력하는 간단한 C 프로그램 예시입니다. 줄 번호는 왼편에 표시되어 있지만, 실제 코드에 포함되는 것은 아닙니다.
1행에서, #include <stdio.h>는 이 프로그램이 stdio.h라는 파일 안에 들어 있는 미리 작성된 함수들에 접근할 수 있도록 합니다. 여기에서 함수는 특정 기능을 수행하기 위한 문장들을 모아놓은 것을 말합니다. stdio.h를 포함함으로써, 프로그램은 다른 사람들이 이전에 미리 작성해 둔 함수에 접근할 수 있습니다. 이로 인해 화면에 문자를 보여주는 역할을 하는 printf라는 함수를 가져다 사용할 수 있습니다.
3행의 int main(void)는 스크래치와 엔트리에서 “초록 깃발을 클릭했을 때” 혹은 “시작하기 버튼을 클릭했을 때"의 기능과 같은 기능으로, 프로그램의 시작점을 정의합니다. 4~6행의 중괄호는 main 함수의 코드를 묶어주는 역할을 합니다. 중괄호 안의 내용이 어떠한 것이든 main 함수의 한 부분이 됩니다.
이 프로그램에서, main 함수는 printf(“hello, world \n”)이라는 하나의 프로그래밍 문장만 포함하고 있습니다. printf는 문자열을 화면에 출력하는 함수입니다. C에서 문자열은 항상 큰따옴표 안에 작성해야 합니다.
printf를 위해 사용된 괄호 안에는 화면에 보여주고자 하는 문자열을 입력값으로 넣어줄 수 있습니다. 이 경우 문자열은 “hello, world\n”입니다. \n 문자는 줄 바꿈 문자로 “hello, world!”를 출력하고 줄이 바뀌게 됩니다. printf문 마지막의 세미 콜론(;)은 프로그램 명령의 마지막이 어디인지를 알려줍니다.

컴파일하여 프로그램 실행하기
C 프로그램을 작성한 후, .c로 끝나는 파일로 소스코드를 저장해야 합니다. 여기에서는 hello.c라는 이름의 파일로 저장합니다. 이것은 여러분이 만든 소스 코드 파일입니다. 하지만 컴퓨터는 C 코드를 바로 이해하지는 못합니다. 컴퓨터는 0과 1만 이해하기 때문에, 우리는 소스코드를 0과 1로 만드는 작업인 컴파일(compile)을 해야 합니다.
컴파일이란, 소스 코드를 일련의 0과 1들로 이루어진 오브젝트 코드(object code)로 전환해주는 것입니다. 소스 코드가 오브젝트로 코드로 변환되면, 컴퓨터가 이해하고 실행 가능한 0과 1의 형태로 만들어집니다.
그러나 문장 중 //이나 /* 와 */ 안에 작성되어있는 코드는 컴파일러에 의해 완전히 무시됩니다. 이것을 주석이라고 부릅니다. 이 주석은 프로그래머들이 코드에 대한 설명을 기록함으로써 나중에 보는 사람들이 쉽게 이해할 수 있도록 하는 데 자주 사용됩니다.
만약 clang 컴파일러를 사용한다면, make hello 명령어를 입력함으로써 프로그램을 컴파일 할 수 있습니다. 만약 에러 없이 성공적으로 컴파일 되면, 우리는 ./hello라고 명령어를 입력하여 프로그램을 실행할 수 있습니다. 만약 프로그램이 제대로 작동한다면 화면에 hello, world라고 출력될 것입니다.
변수
변수(Variable)는 값을 담아둘 수 있는 저장 공간으로 프로그램 수행에 따라 값이 수정되거나 변경될 수 있습니다. 여러분의 프로그램 내에서 변수의 값을 읽을 수 있고, 변경할 수도 있으며, 출력할 수도 있습니다. 컴퓨터 프로그램은 나중에 코드에서 사용할 수 있는 중요한 정보를 기억하기 위해 변수를 사용합니다.
변수를 선언하여 사용하기

C에서 변수를 사용하는 첫 번째 단계는 여러분이 변수 사용을 원한다는 것을 프로그램이 알 수 있도록 하는 것입니다. 이 단계를 변수 선언(declaration) 이라고 부릅니다. C에서, 변수 선언을 해주기 위해서는 변수의 자료형을 알려준 후 변수의 이름을 명시해줍니다.
예를 들어 <코드 1>에서 1행을 보면, 우리는 count라는 이름의 변수를 int 자료형으로 선언했습니다. int는 양수와 음수 그리고 0으로 이루어진 정수를 저장하기 위한 자료형입니다. 아직 count에 아무런 값도 할당하지 않았습니다. 우리는 그저 프로그램에 나중에 값이 저장될 공간만 만들어 달라고 요청했을 뿐입니다.
한번 변수를 선언하면, 다양한 방법으로 다룰 수 있습니다. 2행을 보면 변수 count에 2라는 값을 할당했습니다. 이제 숫자 2가 변수 count 안에 저장된 것입니다. 선택적으로 1행과 2행을 하나의 문장으로 합칠 수 있는데, 변수를 선언하는 동시에 값을 지정하도록 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입니다.
예를 들어 <코드 2>의 5행에 정수형 변수 i가 선언되었고, 이 변수에 실제 정수 값을 저장하고자 합니다. 이 역할을 6행에서 scanf(“%d”, &i);를 통하여 사용자가 입력하는 정수를 i가 저장된 주소에 저장을 할 수 있습니다. %d는 정수 값을 담아두는 플레이스홀더이며, &i는 i라는 변수의 주소라는 뜻입니다.
7행에서 변수의 값을 화면에 보여줍니다. printf 다음에 오는 괄호 안에 “i는 %d”라는 문자열과 %d를 대체할 정수 i를 입력해줍니다. 예를 들어 사용자가 6행의 입력값으로 28을 입력했다면, 7행은 %d를 i의 값으로 대체하므로 화면에서 “i는 28”로 보여집니다.

'CS > cs50' 카테고리의 다른 글
[cs50] http, 신뢰모델 (1) | 2022.05.21 |
---|---|
[cs50] 라우터, TCP/IP (0) | 2022.05.07 |
[cs50]네트워크_IP(IPv4, IPv6 ) , DNS, DHCP (0) | 2022.04.16 |
[cs50] 컴파일, 디버깅 (0) | 2022.04.09 |
[cs50]스크래치(Scratch)로 게임 만들기_공피하기 게임 (0) | 2022.04.02 |