'야, 너두 코딩할 수 있어!' 프로젝트
기본 문법2 '입력문'에 대하여 살펴보겠습니다.
입력문의 기본 명령어는 scanf입니다.
지금은 스마트폰의 스캔 기능으로 인해 거의 사용하지 않지만
예전에 큰 기관에서는 scanner를 많이 사용했었습니다.
'스캔한다 = 입력한다' 이렇게 생각하면 됩니다.
입력 받는 데이터의 종류는 크게 4가지 형태로 나눌 수 있습니다.
이 때 데이터의 종류를 자료형이라고 명명하겠습니다.
자료형에 따라서 서식문자라는 것이 다릅니다.

실수 자료형은 2개가 있는데 float과 double의 차이점은 차지하는 공간입니다.
float는 기본적으로 4바이트를 차지하고 double은 8바이트를 차지합니다.
double이 공간을 많이 차지하기 때문에 소수점이 긴 실수를 사용하려면 double을 사용하는 것이 좋습니다.
그리고 자료를 입력 받기 전에는 항상 입력 값을 저장하기 위한 변수를 선언해야 합니다.
예시를 통해 알아보면,
'정수형 변수 a를 쓰겠습니다.'라고 선언해야 하는데 이를 코드로 변환해보면 아래와 같습니다.
int a;
이제 입력 자료를 저장한 변수를 선언했으므로
scanf로 입력 받아 정수형 변수 a에 저장해보겠습니다. 저장할 때에는 반드시 변수 앞에 특수문자 &를 적어줘야 합니다.
scanf("%d", &a);
이와 관련된 문제 4개를 풀어보도록 합니다.
풀다가 잘 되지 않으면 코드업에서 operaghost로 쪽지를 보내면 도움을 드리도록 하겠습니다.
[기초-입출력] 정수 1개 입력받아 그대로 출력하기(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
[기초-입출력] 문자 1개 입력받아 그대로 출력하기(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
[기초-입출력] 실수 1개 입력받아 그대로 출력하기(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
[기초-입출력] 정수 2개 입력받아 그대로 출력하기(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
float, double 형으로 실수를 출력해보면 기본적으로 소수점 6번째 자리까지 출력이 됩니다.
예를 들면 double형으로 1을 출력해보면 1.000000으로 나옵니다.
출력되는 소수점의 갯수를 정할 수 있습니다. 아래 문제에서 확인해보세요.
[기초-입출력] 실수 입력받아 둘째 자리까지 출력하기(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
정수형 변수 int는 표현 가능한 수가 어디까지일까요?
무한으로 표현할 수는 없습니다 ㅜㅜ
컴퓨터는 2진수를 사용한다는 말을 들어본 적이 있을 것입니다.
2진수는 0과 1만을 사용하는 진법으로 우리가 생활에서 사용하는 10진법(0~9까지 사용)과는 차이가 있습니다.
숫자 하나를 저장할 수 있는 공간을 1bit라고 합시다.
1bit에 나타낼 수 있는 숫자는 0과 1입니다. (2진수)
2bit, 3bit에 나타낼 수 있는 숫자들은 아래 슬라이드와 같습니다.

bit가 늘어날수록 표현 가능한 숫자들의 규칙이 보이시나요?
int 자료형은 32bit를 차지합니다. 그리고 8bit = 1byte이므로 4byte를 차지한다고 표현할 수도 있습니다.
그렇다면 32bit를 차지하는 int는 최대 얼마까지 표현가능할까요?

과연 위 슬라이드처럼 2의 32승 -1까지 표현가능할까요??
결론은 아닙니다.
맨 앞의 bit는 부호(+, -)를 표현하기 때문에 int로 표현가능한 숫자는 아래 슬라이드와 같습니다.

64비트 정수형 변수를 사용하면 int보다 더 크고, 더 작은 정수를 입력 및 출력할 수 있습니다.

이와 관련된 문제를 풀어봅시다.
[기초-산술연산] 정수 2개 입력받아 합 출력하기1(설명)
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
이 문제에서는 입력 가능한 최대 값을 고려해보면 입력되는 2개의 수를 더했을 때 int 범위를 넘어가 버립니다.
그러므로 이 문제에서는 int가 아닌 long long int 형을 사용하는 것이 좋습니다.
입력에서는 int를 사용하고 출력에서만 long long int를 사용하는 소스도 공개해드립니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%lld", 1LL * a + b);
return 0;
}
지금까지 출력문과 입력문을 배워보았습니다.
기초 문제가 아닌 실전형 문제를 하나 풀어보겠습니다.
합과 차
1. 첫 번째 줄에 자연수 n이 주어진다. (2≤n≤1,000,000) 2. 두 번째 줄에 정수 m이 주어진다. (0≤m≤999,998) 3. n+m은 짝수이다.
codeup.kr
[4036 합과 차] 풀이
1. n과 m을입력 받는다.
2. 연립 방정식을 통해 두 수 a, b를 구해보면
a = (n + m) / 2
b = (n -m) / 2
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
scanf("%d %d", &n, &m);
printf("%d\n%d", (n+m)/2, (n-m)/2);
return 0;
}
댓글