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함수 위로 올리기
함수 여러개 만들수록 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 |