애증의 C언어
#include <stdio.h> // “stdio.h”라는 이름의 파일을 찾아
//“printf” 함수에 접근할 수 있도록 해줌
int main(void) //시작한다는 의미
{
printf("hello, world\n"); //hello world를 출력,\n은 줄바꿈
}

소스코드: 위와 같이 사용자가 작성한 코드. 머신코드로 변환해야 컴퓨터가 이해할 수 있다.
컴파일러: 머신코드로 변환해주는 프로그램


replit으로 하다가 cs50.h가 안 불러와져서 결국 샌박으로 감
//실습2
#include <stdio.h>
#include <cs50.h>
int main (void){
int x=1;//x라는 정수형의 변수는 0의 값을 가짐
int y=2;
// 조건문
if (x>y){
printf("x>y\n");
}
else if (x<y){
printf("x<y\n");}
else{
printf("x==y\n");
}
// 반복문
int counter=0;
while(counter<3){
printf("hello world\n");
counter++;
}
for (int c=0; c<10;c++){
printf("개발공부는 재미있다!\n");
}
}
생각해보기까지 한번에 끝!
데이터 타입
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: 부동소수점을 포함한 더 큰 실수
CS50내 라이브러리의 함수는 생략!
형식 지정자
%c : char
%f : float, double
%i : int
%li : long
%s : string
기타 연산자 및 주석
+: 더하기
-: 빼기
*: 곱하기
/: 나누기
%: 나머지
&&: 그리고
||: 또는
//: 주석



5. 사용자 정의 함수, 중첩 루프
#include <stdio.h>
#include <cs50.h>
void cough(void);//prototype
int main (void)
{
cough();
}
void cough(void){
for (int i=0; i<3;i++){
printf("cough\n");
}
}
위 코드에서 void cough(void)는 int main 아래에 있는 cough 함수를 C가 읽지 못해 이름만 있는 cough라는 함수를 먼저 보여줌
void
#include <stdio.h>
void cough(int n);
int main(void)
{
cough(3);
}
void cough(int n) //parameterized function cough
{
for (int i = 0; i < n; i++)
{
printf("cough\n");
}
}
void는 get_int,get_string처럼 값을 반환하지 않음 (input()으로 이해하면 되려나?)
int get_positive_int(void) 에서 int는 출력값의 종류(get_positive_int)를 의미하고,괄호 안의 단어(void)는 입력의 종류를 뜻함 입출력이 없다면 void를 적어주면 된다.

생각해보기) 사용자 정의 함수를 사용하면 가독성이 높아지고 코드가 더 간결해진다.
6. 하드웨어의 한계
RAM(Random Access Memory)이라는 물리적 저장장치에는 우리가 작성한 프로그램이 저장되는데, 유한한 크기의 비트만 저장할 수 있기에 때때로 부정확한 결과를 내기도 한다.
1/10을 소수점 50번째 자리까지 출력하게 하면 0.10000000149011611938476562500000000000000000000000 라는 숫자가 나온다.
정확한 결과는 0.1이지만, float에 저장 가능한 비트 수가 유한하기 때문에 다소 부정확한 결과를 내게 되는 것이다.
생각해보기)오버플로우 전에 보잉787처럼 재부팅/초기화 하거나 자동으로 변수를 초기화하는 알고리즘을 만든다.