CS50 2주차 C언어강좌 링크
이번 강좌는 C언어의 코드 위주로 진행되어 게시물도 코드 위주로 작성하였다. 오랜만에 C언어로 코딩을 했더니 뭔가 어색한듯....;;
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
}
이전 강의에서 스크래치프로그램을 통해 구현했던것처럼 C언어를 통해 "hello world"를 출력.
C에서는 컴퓨터에게 해당 함수가 어디에 구현되어 있는지, 혹은 어디에 저장되어있는지 알려줘야한다.(#include <stdio.h>)
해당 코드를 실행하기 위해서는 코드를 컴퓨터가 이해하도록 2진법(0과1)로 바꿔주는 작업이 필요한데 이러한 알고리즘/소프트웨어를 "컴파일러"라고 한다. 컴파일러는 소스코드를 머신코드로 바꿔주는 기능을 하게된다.
#include <stdio.h>
#include <cs50.h>
int main(void)
{
string answer =get_string("What's your name?\n");
printf("hello, %s\n",answer);
}
위의 코드를 통해 answer이라는 형식지정자를 컴퓨터에게 할당해준다.
문자열 형식지정자를 받기위해 %s를 사용하여 해당부분에 형식지정자가 들어갈것임을 알려준다.
get_string은 해당 강의의 cs50.h에서 가져온 사용자정의 함수이다.
#include <stdio.h>
int main(void)
{
if(x<y){
printf(“x is less than y \n”);
}else if(x>y){
printf(“x is not less than y \n”);
}else{
printf(“x is equal to y \n”);
}
}
#include <stdio.h>
int main(void)
{
int i=-0;
while(i<5){
printf(“hello, world \n”);
i ++;
}
}
#include <cs50.h>
#include <stdio.h>
// java 처음 배울때 실습했던 문제인데 새삼스럽네...
int main(void)
{
int n = get_int("n: ");
if (n % 2 == 0)
{
printf("even\n");
}
else
{
printf("odd\n")
}
}
#include <stdio.h>
void cough(void){
printf(“cough\n”);
}
int main(void){
for(int i=0; i<3;i++){
cough();
}
}
사용자 정의함수를 정의함으로써 프로그래밍 시간을 단축,가독성을 향상 시킬수 있다.
(C에서는 코드를 위에서부터 순서대로 읽어들여서 cough함수가 main보다 아래 있을경우에는 오류가 발생;;; 옛날 언어라 그런가...당황스럽네)
컴퓨터는 RAM(랜덤 엑세스 메모리)라는 물리적 저장장치를 통해 모든 프로그램이 저장된다. RAM은 유한한 크기의 비트만 저장이 가능하기 때문에 가끔 부정확한 결과를 내기도 한다.
#include <stdio.h>
int main(void)
{
float x = 1;
float y = 10;
// 나눗셈 후 출력
printf("x / y = %.50f\n", x / y);
}
출력결과
위와 같이 1을 10으로 나눈값을 소수점 50자리까지 출력했을때 부정확한 값이 출력된다.
왜냐하면 컴퓨터의 메모리는 저장한계가 있기때문에 특정지점에서 한계에 도달하게된다. 즉, 컴퓨터는 저장할수 있는 값들중 0.1에 가장가까운 값을 저장하여 출력하게되는것이다.
정수 오버플로우
#include <stdio.h>
#include <unistd.h>
int main(void)
{
for (int i = 1; ; i *= 2)
{
printf("%i\n", i);
sleep(1);
}
}