CS/[부스트코스] CS05 2019

2. c언어 (2)

정호나 2024. 6. 3. 21:16

4. 자료형, 형식 지정자, 연산자

 

데이터 타입

아래 목록은 변수의 데이터 타입으로 사용할 수 있는 것들입니다.

  • 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 라이브러리 내의 get 함수

  • get_char
  • get_double
  • get_float
  • get_int
  • get_long
  • get_string

 

형식 지정자

  • %c : char
  • %f : float, double
  • %i : int
  • %li : long
  • %s : string

 

정수와 실수를 받아서 출력해보기

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    int age = get_int("what's your age?\n");
    int days = age * 365;
    printf("Your are at least %i days old.\n", days);
}

 

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    int age = get_int("what's your age?\n");
    printf("Your are at least %i days old.\n", age * 365);
}

코드 간결하게

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    printf("Your are at least %i days old.\n", get_int("what's your age?\n") * 365);
}

 

마지막 코드는 좌우로 너무 길어서 가독성이 떨어집니다.

디자인 측면에서는 시선이 왼쪽에서 오른쪽으로 가는 것보다 위에서 아래로 가는 것이 좋습니다.

 

float사용

printf("Your total is %.2f \n", price*1.0625);

 

%f:  f앞에 '.원하는 자리수'를 넣어 %.2f로 소수점 2번째 자리까지 나오게 함

 

 

 

 

 

#include<cs50.h>

CS50 라이브러리에 여러 함수를 만들어 놓음. cs50 수업을 위해 만들어진 것

 

VS에서는 표준 라이브러리 ex) #include<stdio.h> 만 사용가능

 

5. 사용자 정의 함수, 중첩 루프

main함수 위로 올리기

#include <stdio.h>

void cough(void);

int main(void)
{

    for (int i =0; i<3 ; i++){
        cough();
    }

}

void cough(void){
    printf("cough\n");
}

 

함수 여러개 만들수록 main함수는 내려가는데 아래 있는 것보다 바로 나오는 것이 보기 좋다.

main함수 이전에 void cough(void);를 올려놓으면 됨

 

원하는 횟수만큼 cough함수 실행하기(사용자 정의 함수)

#include <stdio.h>

void cough(int n);

int main(void)
{
    cough(3);
}

void cough(int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("cough\n");
    }
}

main함수에서 몇번 실행시킬 지 입력해서 코드 실행

유지보수하기 편함. 가독성 향상

 

#include <cs50.h>
#include <stdio.h>

int get_positive_int(void);

int main(void)
{
    int i = get_positive_int();
    printf("%i\n", i);
}

int get_positive_int(void)
{
    int n;
    do
    {
        n = get_int("Positive Integer: ");
    }
    while (n < 1);
    return n;
}

 

 int get_positive_int(void) 

: 입력은 받지 않고 int 반환(변수 저장 등)

 

 

파란색 글씨(int)

 

출력의 종류 의미

빨간색 단어(void) 입력의 종류, 만약 입출력이 없다면 void

 

int n; 

어떤 값을 저장할지 아직 모름. 쓰레기값 가짐

 

while(n<1);

이 참일때 질문을 반복해서 수행해라 

 

 

while 단독사용하면 while 조건이 참이어야만 수행

do-while은 do에서 무조건 한번 먼저 수행해줌

 

중첩루프

N x N '#' 출력

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int n;

    do
    {
        n = get_int("Size: ");
    }
    while (n < 1);

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("#");
        }
        printf("\n");
    }
}

do-while 이용해서 while조건 만족할 때까지 get_int함수로 사용자가 입력값 받아 n에 저장

do{ }while()을 사용하면 조건과 상관없이 최소한 한 번은 { }안의 내용을 실행할 수 있다.

 

6. 하드웨어의 한계

RAM : 저장공간.

 

 

정수 오버플로우

비슷한 오류로, 1부터 시작하여 2를 계속해서 곱하여 출력하는 아래와 같은 프로그램이 있다고 해봅시다.

 

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    for (int i = 1; ; i *= 2)
    {
        printf("%i\n", i);
        sleep(1);
    }
}

 

...
1073741824
overflow.c:6:25: runtime error: signed integer overflow: 1073741824 * 2 cannot be represented in type 'int'
-2147483648
0
0
...

정수를 계속 키우는 프로그램에서 10억을 넘기자 앞으로 넘어갈 1의 자리가 없어진 것

int에서는 32개의 비트여서 그 이상의 숫자는 저장할 수 없는 것입니다.

'CS > [부스트코스] CS05 2019' 카테고리의 다른 글

3. 배열  (0) 2024.06.04
2. C언어 (1)  (2) 2024.06.02
1. 컴퓨팅 사고  (0) 2024.06.02