원주율 소수점n자리까지 출력하기
조회수 914회
안녕하세요. 입력: n가 25이내로 입력되고, 출력: 원주율소수점아래부터 n자리까지 출력 이있습니다.
#include <stdio.h>
int main() {
int n;
char py[30] = "3.14159265358979323846264";
scanf("%d", &n);
n += 2; //"3."여기부분이 2글자이기때문에 n에 2를 추가합니다.
for (int i = 0; i < n; i++) {
printf("%c", py[i]);
}
return 0;
}
위코드와 같이 문자열로 바꾸면서 출력하는방법은 반복문말고도 다양하게 있습니다. 하지만 실수형태로 출력하는걸로 제가 생각한방법은
#include <stdio.h>
int main() {
int n;
double py = 3.14159265358979323846264;
scanf("%d", &n);
printf("%.%df", n, py);
return 0;
}
이런것입니다. 당연히 실패했고 %df가 출력되었습니다.(%.%두게연속으로 있어서 "%"가 이스케이프했습니다. "."는 출력되지않고.) 소수점 ~까지출력은 정수로는 가능하지만 변수로는 무리일까요? 아니면 출력하기전에 잘라버릴까요? 귀찮은질문해서 죄송합니다.
2 답변
-
#include <stdio.h> int main() { double pi = 3.14159265358979323846264; int i; for (i = 0; i < 15; i++) printf("%.*lf\n", i, pi); return 0; }
3 3.1 3.14 3.142 3.1416 3.14159 3.141593 3.1415927 3.14159265 3.141592654 3.1415926536 3.14159265359 3.141592653590 3.1415926535898 3.14159265358979
If the precision specification is an asterisk (
*
), anint
argument from the argument list supplies the value. In the argument list, theprecision
argument must precede the value that's being formatted, as shown in this example:printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */
- 이거 좋은 기능인데 까먹고 있었네요. printf("%*.*f", 10, 4, py); 이런 식도 가능합니다. 알 수 없는 사용자 2021.4.21 12:33
- 출력함수가 많이 있었네요. 감사합니다. noah0508 2021.4.22 08:03
-
printf 함수의 첫번째 인수는 문자열 형태면 됩니다. 직접
""
형태의 문자열을 넣어줘도 되지만, 배열에 저장된 문자열 등도 사용 가능합니다. 따라서 sprintf 함수로 미리 문자열을 적절히 만든 후에 그 문자열을 printf 함수에 넣어주시면 하고자 하는 것을 할 수 있습니다.아래 코드 참고하세요.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { double py = 3.14159265358979323846264; char format_str[20] = { 0, }; int n; scanf("%d", &n); sprintf(format_str, "%%.%df", n); printf(format_str, py); return 0; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
- 감사합니다. sprintf부분의 "%%.%df"는 무슨뜻인가요? noah0508 2021.4.22 08:03
- sprintf 함수는 첫 칸에 출력할 배열 주소를 적는 것 빼고는 printf 함수와 사용법이 동일합니다.%%는 %를 출력하라는 것이고, %d는 뒷항의 숫자가 십진수 형태로 출력하는 뜻이므로, n이 만약 3일 경우, "%%.%df", n의 결과는 "%.3f"가 됩니다. 알 수 없는 사용자 2021.4.22 16:10
- 감사합니다. noah0508 2021.4.23 07:17
댓글 입력