728x90
반응형
C 기초
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
}
#include
: 작성하고 있는 코드에 오른쪽에 있는 코드를 포함시키겠다.
<stdio.h>
(standard input output) : h는 header를 의미 / 표준입출력에 관한 내용을 담고있다.
(파일입출력 / 콘솔화면 입출력 / 파일구조체 / 문자입출력 등등)
ìnt
: 함수의 반환값이 정수형
main
: C언어가 동작할 때 시작점이 되는 함수
(void)
: 인자로 아무것도 받지 않는 것을 의미
printf()
: 문자열을 화면에 출력하는 함수 / 문자열을 “”(큰따옴표) 안에 작성
💡 모든 명령어 끝에는 세미 콜론(;)
작성
컴파일러
우리가 작성한 코드 : 소스코드
컴퓨터가 이하하는 코드 : 머신코드(2진수)
- “clang” 이라는 컴파일러로 clang hello.c 라는 명령어를 입력(hello.c 코드를 컴파일해라)
(make hello 입력하여 쉽게 컴파일 가능 → hello 라는 파일 생성) - a.out 이라는 파일 생성
- out 파일을 실행하기 위해 ./a.out 입력
- 결과 출력
문자열
- 쌍따옴표(””) 안에 들어간 0개 이상의 문자 배열
- 새로운 줄로 줄바꿈하기 위해서 끝에 “\n” 입력
형식지정자
//get_string 함수는 cs50.h에 포함
string answer = get_string("What's your name?\n");
//데이터의 종류가 string이므로 %s 입력
printf("hello, %s\n", answer);
- C언어는 오래된 언어이기 때문에 데이터의 종류를 정확하게 명시해야함
- 출력할 데이터가 어떤 종류인지 알려주는 역할
조건문과 반복문
조건문
주어진 조건에 따라 프로그램의 흐름을 바꾸는 구문
if(조건1){
//조건 1가 True이면 실행
조건1 실행문;
} else if(조건2){
//조건 2가 True이면 실행
조건2 실행문
} else {
//조건 1,2 모두가 False이면 실행
거짓 실행문;
}
관계,논리, 할당연산자
- 관계연산자 : 변수끼리의 비교하는 명제에 쓰이는 것
a > b
: a가 b보다 크다a < b
: a가 b보다 작다a == b
: a와 b는 같다 a <= b
: a가 b보다 작거나 같다a >= b
: a가 b보다 크거나 같다a != b
: 다르다- 논리연산자 : 둘 이상의 명제를 묶어주는 것
||
: 둘 중 하나 이상이 참일 경우 참 (OR) !
: 참은 거짓, 거짓은 참으로 변경(NOT)&&
: 둘 다 참일 경우에만 참 (AND)- 할당연산자
=
: 오른쪽의 값을 왼쪽에 할당함
반복문
똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문
// 1. while문
//조건식이 True이면 무한루프에 빠짐
while (조건식)
{
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
// 2. do while문
//적어도 한 번을 실행 후 조건식을 검사함
do {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
} while (조건식);
// 3. for문
for (초기식; 조건식; 증감식)
{
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
자료형
데이터 타입
bool
: 불리언 표현 (예) True, False, 1, 0, yes, nochar
: 문자 하나 (예) 'a', 'Z', '?'string
: 문자열int
: 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0long
: 더 큰 크기의 정수float
: 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56double
: 부동소수점을 포함한 더 큰 실수
사용자 정의 함수 / 중첩 루프
사용자 정의 함수
C언어에서 미리 제공되는 것이 아니라 사용자가 직접 정의하여 사용하는 함수
(선언-호출-정의 과정을 거침)
// 함수 선언
// 반환_자료형 함수명(인수들);
int sum(int x, int y);
// 함수 호출
int main()
{
함수명(인수들); //함수 호출
}
// 함수 정의
//반환_자료형 함수명(인수들){명령문;}
int sum(int x, int y) //함수 정의
{
return x+y;
}
- 규칙
- 함수명은 변수명과 같이 알파벳(대소문자), 숫자, _(밑줄)을 이용하여 작성하고 함수명 맨 앞에 숫자는 올 수 없습니다. 함수명은 중복하여 작성할 수 없습니다.
- 함수의 return문은 함수를 종료하고 호출한 곳으로 돌아갑니다. return문이 없으면 함수의 모든 문장을 실행하고 호출한 곳으로 돌아갑니다.
- 함수의 return(반환)값이 없으면 void라 쓰고, 생략하면 int로 간주합니다.
- 함수의 return(반환)값은 하나만 올 수 있으며, 상수, 변수 또는 수식을 반환할 수 있습니다.
- 함수의 인수가 없으면 괄호 안에 void를 사용하며, 생략할 수도 있습니다.
중첩루프
반복문 안에 반복문이 들어가있는 형태
하드웨어의 한계
컴퓨터는 RAM(랜덤 엑세스 메모리)을 통해 우리가 작성한 프로그램을 저장함
RAM은 유한한 크기의 비트를 저장하기 때문에 부정확한 결과를 내는 경우가 있음
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// 사용자에게 x 값 받기
float x = get_float("x: ");
// 사용자에게 y 값 받기
float y = get_float("y: ");
// 나눗셈 후 출력
printf("x / y = %.50f\n", x / y);
}
//결과
//float에 저장 가능한 비트수가 유한하기 때문에 부정확한 경과가 나옴
x: 1
y: 10
x / y = 0.10000000149011611938476562500000000000000000000000
정수 오버플로우
정수형의 크기는 고정되어 있는데 저장할 수 있는 값의 크기보다 큰 값을 저장하려 할 때 문제가 발생
32비트(4 Bytes, int) : –2,147,483,648 ~ 2,147,483,647
728x90
반응형
'CS50 정리' 카테고리의 다른 글
CS50 6강[자료구조] (2) | 2024.02.25 |
---|---|
CS50 5강[메모리] (0) | 2024.02.21 |
CS50 4강[알고리즘] (0) | 2024.02.20 |
CS50 3강[배열] (0) | 2024.02.20 |
CS50 1강[컴퓨팅 사고] (2) | 2024.02.20 |