코드업 C언어 기초 100제 - [기초-데이터형]

6720·2022년 8월 7일
0

CodingTest(코드업)

목록 보기
4/13
post-thumbnail

👨‍🏫 이번 목표

코드업 C언어 기초 100제에서 [기초-데이터형] 풀기

📒 문제 풀이

1028번

정수 1개를 입력받아 그대로 출력해보자.

(단, 입력되는 정수의 범위는 0 ~ 4,294,967,295 이다.)

  • 내가 쓴 답
#include <stdio.h>

int main() {
	unsigned int a;
	scanf("%d", &a);
	printf("%d", a);
	return 0;
}
  • 정답 여부: X -> 음수가 출력됨.

  • 해설: 정수의 범위는 잘 설정했지만 서식 지정자를 잘못 선택함.

다음을 보면 정수 타입에 따라 서식 지정자가 다름을 알 수 있다.

// 정수
printf("%u\n", 10);      //  10: 부호 없는 10진 정수
printf("%d\n", -20);     // -20: 부호 있는 10진 정수
printf("%i\n", -20);     // -20: 부호 있는 10진 정수
printf("%o\n", 071);     //  71: 부호 없는 8진 정수
printf("%x\n", 0xF1);    //  f1: 부호 없는 16진 정수(소문자)
printf("%X\n", 0xF1);    //  F1: 부호 없는 16진 정수(대문자)

// long, long long 정수
printf("%lu\n", ULONG_MAX);      // 4294967295: 부호 없는 long
printf("%ld\n", LONG_MAX);       // 2147483647: 부호 있는 long
printf("%llu\n", ULLONG_MAX);    // 18446744073709551615: 부호 없는 long long
printf("%lld\n", LLONG_MAX);     // 9223372036854775807: 부호 있는 long long

// 실수
printf("%f\n", 1.2f);    // 1.200000: 실수를 소수점으로 표기(소문자)
printf("%F\n", 1.2f);    // 1.200000: 실수를 소수점으로 표기(대문자)
printf("%e\n", 1.2f);    // 1.200000e+00: 실수 지수 표기법 사용(소문자)
printf("%E\n", 1.2f);    // 1.200000E+00: 실수 지수 표기법 사용(대문자)
printf("%g\n", 1.2f);    // 1.2: %f와 %e 중에서 짧은 것을 사용(소문자)
printf("%G\n", 1.2f);    // 1.2: %F와 %E 중에서 짧은 것을 사용(대문자)
printf("%a\n", 1.2f);    // 0x1.3333340000000p+0: 실수를 16진법으로 표기(소문자)
printf("%A\n", 1.2f);    // 0X1.3333340000000P+0: 실수를 16진법으로 표기(대문자)

printf("%Lf", LDBL_MAX);    // 생략: long double
printf("%Le", LDBL_MAX);    // 1.797693e+308: long double

// 문자, 문자열
printf("%c\n", 'a');    // a: 문자
printf("%s\n", "Hello, world!");    // Hello, world!: 문자열

// 포인터
int num1;
void *ptr = &num1;
printf("%p\n", ptr);    // 008BFB6C: 포인터의 메모리 주소
                        // 0x8bfb6c: 리눅스, OS X에서는 앞에 0x가 붙고, A~F는 소문자로 출력
                        // 높은 자릿수의 0은 생략

// % 기호
printf("%%\n");    // %: % 기호 출력

여기서 맨 위의 %u를 보면 부호 없는 10진 정수라는 설명을 볼 수 있다. 이를 이용해 입력되는 값에 부호가 오지 않음을 알려줘야 한다.

참고로 여기에서 변수 범위를 정하는 타입을 볼 수 있다.
여기에서는 unsigned int가 쓰였는데 +-가 둘 다 속한 int와는 달리 0부터 범위가 시작하는 모습을 볼 수 있다.

굿


1029번

실수 1개를 입력받아 그대로 출력해보자.

입력된 실수를 소수점 이하 11자리까지 반올림하여 출력한다.
(단, 입력되는 실수의 범위는 +- 1.7*10⁻³⁰⁸ ~ +- 1.7*10³⁰⁸ 이다.)

  • 내가 쓴 답
#include <stdio.h>

int main() {
	unsigned int a;
	scanf("%d", &a);
	printf("%d", a);
	return 0;
}
  • 정답 여부: X -> 정수만 출력됨.

  • 해설: 1) 실수가 출력됨 2) 11자리까지 반올림되서 출력됨

실수이므로 float를 선언해주면 되지만 float의 범위는 3.4E+/-38(7개의 자릿수)이므로 범위가 1.7E+/-308(15개의 자릿수)인 double을 사용해야 한다.

서식 지정자의 경우는 %lf를 사용해줘야 하며 11자리까지 반올림되서 출력되도록 앞에 .11도 붙여야 한다.

#include <stdio.h>

int main() {
	double a;
	scanf("%lf", &a);
	printf("%.11lf", a);
	return 0;
}



1030번

정수 1개를 입력받아 그대로 출력해보자.

단, 입력되는 정수의 범위는
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 이다.

  • 내가 쓴 답
#include <stdio.h>

int main() {
	long long int a;
	scanf("%lld", &a);
	printf("%lld", a);
	return 0;
}
  • 정답 여부: O



✨ 후기

1) 오.. 실전 문제에는 이렇게 더럽게 묻는 문제는 없었으면 좋겠다.

2) 서식 지정자 정리

정수

서식 지정자설명
%u부호 없는 10진 정수
%d부호 있는 10진 정수
%i부호 있는 10진 정수
%o부호 없는 8진 정수
%x부호 없는 16진 정수(소문자)
%X부호 없는 16진 정수(대문자)

long, long long 정수

서식 지정자설명
%lu부호 없는 long
%ld부호 있는 long
%llu부호 없는 long long
%lld부호 있는 long long

실수

서식 지정자설명
%f실수를 소수점으로 표기(소문자)
%e부호 없는 long long
%E부호 있는 long long
%g%f와 %e 중에서 짧은 것을 사용(소문자)
%G%F와 %E 중에서 짧은 것을 사용(대문자)
%a실수를 16진법으로 표기(소문자)
%A실수를 16진법으로 표기(대문자)
%Lflong double로 저장
%Lelong double로 저장

문자, 문자열

서식 지정자설명
%c문자
%s문자열

기타

서식 지정자설명
%p포인터의 메모리 주소
%%% 기호 출력
profile
뭐라도 하자

0개의 댓글