cs50 5

하버드 cs50 2장 6) 하드웨어의 한계

컴퓨터에는 RAM이라는 물리적 저장장치가 있다. 램에 작동한 프로그램들이 저장되어 작동하게 된다. 하지만 램은 4기가, 8기가, 16기가 등으로 저장용량이 유한하기 때문에 부정확한 결과를 내기도 한다. 아래 코드를 살펴보자 두개의 float 값을 받아 나눗셈을 연산한 후 소수점 50번째 자리까지 반올리하는 결과를 출력하는 코드이다. x에다가 1, y에다가 10을 넣으면 1/10이기 때문에 0.100000....을 출력할 것으로 예상된다. 하지만 실제 결과값은? 뒤에 뭔가 이상한 숫자들이 나온다. float 변수에 저장가능한 비트 수가 유한하기 때문에 발생하는 결과이다. 비슷한 오류로 "오버플로우"라는 것이 있다. 위의 코드는 1초 간격으로 2를 계속해서 곱한 수를 출력하는 프로그램이다. 1 2 4 8 1..

스터디/CS50 2023.02.11

하버드 CS50 2장 5) 사용자 정의 함수, 중첩 루프

사용자 정의 함수는 말 그대로 내 맘대로 함수를 정의해서 쓰겠다는 것이다. 예를 들어보자. 코드의 내용은 굉장히 쉽다. "cough"를 3번 하라는 것이다. 일단 얘를 좀 더 간지나게 쓸 수 있다. 저번에 배웠던 반복문이다. for 루프를 통해서 3번을 실행하게 만들면 된다. 여기까지는 복습 차원이다. 뭔가가 바뀌었다. printf하는 부분을 cough라는 함수로 선언하여 대체해주었다. for 루프를 돌면서 i cough 함수 내용 읽고 -> main 안에서 실행 이런 순서로 간다. 이 코드는 어떻게 되는 걸까. cough가 어떤 정수 변수 n을 받는다. 그리고 n 값에 따라 for 루프가 몇 번 돌지 결정된다. 좀 더 다이나믹하게 바뀌었다. 좀 더 복잡한 코드가 나왔다. 일단 함수명을 보니 어떤 양의 ..

스터디/CS50 2023.01.25

하버드 CS50 2장 4) 자료형, 형식 지정자, 연산자

이제부터 급격하게 배우는 양이 많아진다. 자료형은 타입이라고도 불리는 녀석이다. 숫자, 문자, 불리언 이런 애들을 의미하는 것이다. 자세한 종류는 다음과 같다. 조금 어색하게 느껴졌던 타입은 long이었다. 정수의 범위에 따라서 다른 타입이 존재하는 것이 조금 어색하게 다가왔다. (하지만 실제로 쓸 일이 많을까라는 생각이 들기도 한다.) 이전에 string을 받아서 %s에 넣어줬었는데 데이터 타입에 따라서 형식지정자를 다르게 넣어주어야 한다. 데이터 타입에 대해서만 익숙해진다면 그리 어렵지 않게 체득할 수 있을 것 같다. 이건 타입별로 입력값을 받아올 수 있는 prompt를 띄워 값을 가져오는 함수들인데 마찬가지로 타입에 대한 숙지가 있으면 그리 어렵지 않게 이해할 수 있다. 이렇게 다양한 타입과 그에 ..

스터디/CS50 2023.01.15

하버드 CS 50 2장 3) 조건문과 루프

이번에 등장할 문법은 조건문과 루프이다 먼저 그 전에 배웠던 내용을 살짝 복습해보자면 변수를 선언할 때는 타입을 항상 앞에 붙여서 선언해주었다. 이번에 counter는 정수이기에 int를 붙여주었다. 여기서 counter를 하나 늘리고 싶다면 어떻게 해야 할까? 일반적인 수학을 생각하면 무슨 소리인가 싶기도 하다. 하지만 위에서 변수 할당했던 과정을 생각해보자. = 등호는 오른쪽에 있는 값을 왼쪽에 있는 변수에 할당해주는 할당 연산자이다. 이 논리를 그대로 가지고 가면 1. counter에 1을 더해준다 2. 해당 결과값을 counter에 다시 할당한다. 그렇게 해서 변수 값이 바뀌게 된다. 이걸 하기 위해 더 간단한 방식들도 있다. 모두 다 counter에 1을 더해주는 코드이다. 이번에는 조건문이다...

스터디/CS50 2023.01.15

하버드 CS50 2장 1) C 기초

C는 컴퓨터를 모르는 사람이라도 한 번쯤은 들어본 적 있는 전통적인 언어이다. C는 영어로 코드를 작성하여 컴퓨터에게 프로그램을 명령할 수 있도록 한다. 기본적으로 시작은 이렇게 되어야 한다. 맨 앞에 stdio.h는 Standard Input/Output Library의 약어로 C 언어의 표준 라이브러리 함수의 매크로 정의, 상수, 여러가지 함수가 포함된 헤더 파일이다. main 이라는 함수를 부르고 중괄호 안에 있는 내용들의 코드를 컴퓨터를 실행할 예정이다. 이제 중괄호 안에 hello world를 출력하는 코드를 작성하였다. hello world 뒤에 있는 \n 은 줄바꿈을 해준다는 뜻이다. (키보드의 Enter키와 같은 기능) 참고로, printf라는 함수는 stdio.h에 내장되어있는 함수이다...

스터디/CS50 2023.01.14
728x90