×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,877,104명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

1. 변수 선언


int a; 

a라는 정수형 변수를 선언해준다.

크기 :: 4byte 

정수형 범위는 -2^31 ~ 2^31 +1이고, 약 -20억 ~ 20억이다.


usigned int a;

a라는 정수형 변수를 선언해준다.

크기 :: 4byte 

범위는 0~ 2^32 -1이고, 약 40억이며 음수를 쓸 수 없다.


long long a;

a라는 정수형 변수를 선언해준다.

크기 :: 8byte 

범위는 -2^64 ~ 2^64 + 1이다.


float a;

a라는 소수형 변수를 선언해준다.

크기 :: 4byte 

float는 6자리 소수점까지 지원해준다.


double a;

a라는 소수형 변수를 선언해준다.
크기 :: 8byte 

double은 15자리 소수점까지 지원해준다.


char a;

a라는 문자형 변수를 선언해준다.

크기 :: 1byte 


bool a;

a라는 boolean형 변수를 선언해준다.

크기 :: 1byte 

이 bool형은 1또는 0밖에 되지 않는다.(true :: 1 / false :: 0)


이제 변수 선언을 한번 해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    int a; // a라는 변수를 선언한다.
    a = 2// a에 2를 대입한다.
 
    char b = 'a'// b라는 변수에 a를 대입한다.
 
    int c = 4, d = 5, e = 6// c에는 4 d에는 5 e에는 6을 대입한다.
 
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus






2. 입/출력


printf() 함수를 이용한다.


다음을 컴퓨터에 직접 코딩해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int a; // a라는 변수를 선언한다.
    a = 2// a에 2를 대입한다.
 
    char b = 'a'// b라는 변수에 a를 대입한다.
 
    int c = 4, d = 5, e = 6// c에는 4 d에는 5 e에는 6을 대입한다.
    float f = 6.666;
    double g = 1.2345561651;
 
    printf("%d %c %d %d %d %f %lf \n", a, b, c, d, e, f, g);
    printf("%.10lf \n", g);
    printf("%.30lf \n", g);
 
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus


%d :: 정수를 출력해준다.

%c :: 문자를 출력해준다.

%f :: float형을 출력해준다.

%lf :: double형을 출력해준다.


이때 %.10lf로 출력하면 10자리까지 출력을 해줌을 알 수 있다.

그런데 %.30lf로 출력하면 출력은 되지만 그 뒤에 이상한 값들이 찍힘을 알 수 있다.


이러한 이유는 컴퓨터에서 원래 소수라는 개념이 존재하지 않기에 대략 이라는 개념을 써서 만들어지기 때문이다.


따라서 많은 소수 연산은 되도록 자제하도록 한다.(연산의 오차범위가 계속해서 커질 수 있다.)



아래 코드를 작성해서 실행해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    int a, b, d;
    char c;
    scanf("%d %d %c %d"&a, &b, &c, &d);
 
    printf("%d %d %c %d \n", a, b, c, d);
    printf("%c %c %d %c \n", a, b, c, d);
 
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus


a,b,c,d를 scanf() 함수를 통해 입력받았다.


printf와 형식이 똑같으며 단 입력받을때 &라는 기호를 써줘야한다.

(&의 의미는 추후 알게 되니 우선은 외워두도록 하자.)


첫번째 출력은 97 98 c 100

두번째 출력은 a b 99 d가 나올 것이다.


이 이유는 컴퓨에는 이미 a가 97이라는 숫자에 대응되어있는 것이다.


아래 표를 참고해보자.



이 표는 외울 필요는 없다.


보면 97에는 a가 적혀있음을 알 수 있다.

따라서 문자 0은 숫자 48에 대응되는 것이고 문자 Z는 숫자 90에 대응되는 것들을 알 수 있다.





3. 연산


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main()
{
    int a, b, c;
    a = 2;
    b = 3;
 
    c = a + b;
    printf("a :: %d  b :: %d \n", a, b);
    printf("%d \n", c);
    printf("%d %d %d %d \n", a - b, (a * b), a % b, c = b / a);
    printf("%d \n", c);
 
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus



연산은 우리가 흔히 하던 방식과 같다.


+,-,/,*가 있으며 컴퓨터에서는 추가적으로 %도 존재한다.


%의 의미는 나머지를 구해주는 연산이고

/의 의미는 몫을 구해주는 연산이다.


처음 하게 된다면 두개가 햇갈릴 수 있으니 %(퍼센트 = 나머지(3글자) )로 외워보자.


여기서 세번째 printf에서 c = b / a로 출력을 했다.


이 의미는 b / a를 한 값을 c에 넣고 c를 출력하라는 의미와 같다.


따라서 마지막 printf에서 c값이 변경되어 있음을 알 수 있다.






4. 주석


주석은 // 와 /* */가 있다.


//는 한줄을 주석처리할 때 쓰이고

/* */는 여러줄에 걸쳐 주석을 달 때 쓰인다.


위의 코드에서 return 0; 윗 부분에 아래와 같이 적어보자.


// 이것은 주석입니다.


/*

이렇게 하면 여러줄에 걸쳐 주석이 됩니다.

가나다

라마바사

*/



추가적으로 더 알아보고 싶은 내용들은 아래 링크들을 참조해보자.

c언어 카테고리 :: http://www.crocus.co.kr/category/Basic/C


기본 입출력 함수의 이해 , 데이터 형 :: http://www.crocus.co.kr/108?category=116610





이제 이 내용들을 바탕으로 문제를 풀어보자.


https://www.acmicpc.net/step/1


https://www.acmicpc.net/step/2





문제 1.


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    char a, b, c;
    scanf("%c"&a);
    scanf("%c"&b);
 
    printf("%c %c", a, b);
    return 0;
}
        //                                                       This source code Copyright belongs to Crocus
        //                                                        If you want to see more? click here >>
Crocus



위의 코드에서 h e를 입력해보자.

그리고

h

e

로도 입력해보자.


마지막으로 he로 입력해보자.


3가지 입력중 하나라도 제대로 출력이 되지 않는다면 왜 그런지 한번 생각해보자.(아스키 코드 표 참조)

그렇다면 제대로 입력하고 출력하기 위해서는 어떻게 해야할지도 한번 생각해보자.



문제 2.


1. int형 변수 a는 10 b는 35이라면 이 값을 두개 더한 char형 변수는 뭐가 나타날지 한번 작성해보자.


2. 이때 char형 변수의 값은 숫자가 나올 것이다.

이 값을 실제 숫자로 바꾸어 int형 변수에 저장하기 위해서는 어떻게 하면 될지 생각해보자.

(아스키 코드표 참조)



반응형