
모두를 위한 컴퓨터 과학 CS50 데이비드 J. 말란 (David J. Malan)
2. C언어
4) 자료형, 형식 지정자, 연산자
변수의 자료형(데이터 타입)들은 어떤 것들이 있을까
- bool : boolean 불리언 표현 ex) True, False, 1, 0, yes, no
- char : 문자 하나
- string : 문자열
- int : 특정 크기 또는 특정 비트까지의 정수 (대략 40억 개)
- long : 더 큰 크기의 정수
- float : 부동소수점을 갖는 실수 ex) 3.14
- double : 부동소수점을 포함한 더 큰 실수
이 데이터 타입들 마다 printf 함수에서 사용할 형식 지정자들도 있다
- % c : char
- % f : float, double
- % i : int
- % li : long
- % s : string
% f는 f 앞에. 원하는 자릿수를 넣어 소수점을 원하는 자리까지 나오게 할 수 있다
ex) 물건의 가격을 물어보고 세금을 포함한 값을 계산해 출력하는 코드이다.
부가세가 6.25%, 가격이 100이라고 했을 때 코드는 다음과 같다
# include <cs50.h>
# include <stdio.h>
int main(void)
{
float price = get_float("What's the price?\n");
printf("Your total is %.2f \n", price*1.0625);
}
get_float는 cs50의 함수이다
가격이 얼마인지 물어보고 가격을 받아 price에 저장한다
총액이 실수이므로 float를 사용해 % f를 사용한다
% f로만 계산하게 된다면 값은 105.250000까지 나타내기 때문에
%. 2f로 소수점 2번째 자리까지만 나오게 할 수 있다
./float
what's the price?
100
Your total is 106.25
이외에도 아래와 같이 다양한 수학 연산자, 논리 연산자, 주석 등이 기호로 정의되어 있다
- +, - : 더하기, 빼기
- *, / : 곱하기, 나누기
- % : 나머지
- && : 그리고
- || : 또는
- // : 주석
주석은 코드가 어떤 일을 하는지 설명한다
처음 보는 사람도 이해하기 쉽게 잘 설명해 두는 습관이 중요하다
5) 사용자 정의 함수, 중첩 루프
c언어로 나만의 함수를 만들고 싶다면?
사용자 정의 함수를 만드는 법
#include <stdio.h>
void cough(void)
{
printf("cough\n")
}
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void를 입력하고 원하는 함수명을 적고 (void)를 적어준다
그리고 실행될 코드를 작성한다
다만 이렇게 했을 때 문제는 함수를 여러 개 만들 경우
main 함수가 밑으로 내려가기 때문에 가독성이 떨어진다
그렇다고 main 함수를 무턱대고 위로 올리면 main 함수를 실행할 때
만들어둔 함수는 인식하지 못하기 때문에 오류가 발생하므로 이렇게 하는 것이 좋다
#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(void)
{
printf("cough\n");
}
void cough(void); 만 위로 올리면
C에게 내가 만든 함수를 인식시켜 속일(?) 수 있다
함수를 원하는 횟수만큼 출력하는 법
#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");
}
}
int n 은 함수에서 int 정수 형식을 갖는 입력값을 받아 변수명 n에 저장한다는 의미이다
중첩루프
가로가 n개, 세로가 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");
}
}
int n으로 정수값을 받는 변수 n을 정의하고,
do {... } while()을 이용해 while()의 조건이 만족할 때까지
get_int cs50 라이브러리 함수로 입력값을 받아 n에 저장한다
do while을 사용하면 조건과 상관없이 최소 한 번은 { } 안의 내용을 실행할 수 있다
그리고 for 루프를 두 번 중첩하며 # 을 출력하는 데,
첫 번째 루프는 변수 i를 기준으로 n번 반복하고,
그 안의 내부 루프에서 변수 j를 기준으로 n번 반복한다
내부 루프에서 #을 출력하고, 내부 루프가 끝날 때마다 줄 바꿈이 실행되어,
최종적으로 가로, 세로가 n 개인 #이 출력된다
이렇게 사용자 정의 함수를 사용했을 때의 장점은?
- 모듈화
반복적으로 작성하지 않아 작업시간을 단축할 수 있어 재사용성을 높인다
함수 내부의 코드 구조를 이해 못 해도 사용이 가능하다 - 구조화, 단순화
main 함수의 길이를 줄여 간결한 코드로 복잡성을 낮추고 가독성을 높인다
협업(코드리뷰)에 수월해지고 유지보수(수정)하기도 좋다
'궁금한게 많은 백구스 > C언어' 카테고리의 다른 글
[C언어] #include<stdio.h> 뭐임? (0) | 2024.09.26 |
---|---|
[CS50/C언어] 기초, 문자열, 조건문, 반복문 (루프) (0) | 2023.02.27 |