Saturday, September 23, 2006
C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root
실수 출력 예제 + 루트 근사값 구하기
printf() 함수의 포맷 출력에는 공백의 너비도 지정이 가능합니다.
0.cpp
#include <stdio.h>
#include <math.h>
void main(void) {
for (int i = 1; i <= 100; i++)
printf("%3d = %18.15f\n", i, sqrt((double) i));
}
#include <math.h>
void main(void) {
for (int i = 1; i <= 100; i++)
printf("%3d = %18.15f\n", i, sqrt((double) i));
}
%3d
이것은 3자리 숫자의 정수를 출력하되, 1~2자리 정수의 앞은 공백으로 채워서 정렬하라는 뜻입니다.
따라서 100은 그대로 출력되지만, 1은 앞에 공백 2개가 있고, 10은 앞에 공백 1개가 있습니다.
%18.15f
18 이란 의미는, 실수의 최대 글자수가 18글자라는 것입니다. 17글자로 된 숫자는 앞에 공백이 붙어서 정렬됩니다.
15는 소수점 15자리까지 표현하라는 뜻입니다. 잘려나간 소수부는 반올림이 되어 반영됩니다.
실행 결과:
1 = 1.000000000000000
2 = 1.414213562373095
3 = 1.732050807568877
4 = 2.000000000000000
5 = 2.236067977499790
6 = 2.449489742783178
7 = 2.645751311064591
8 = 2.828427124746190
9 = 3.000000000000000
10 = 3.162277660168380
11 = 3.316624790355400
12 = 3.464101615137754
13 = 3.605551275463989
14 = 3.741657386773941
15 = 3.872983346207417
16 = 4.000000000000000
17 = 4.123105625617661
18 = 4.242640687119285
19 = 4.358898943540674
20 = 4.472135954999580
21 = 4.582575694955840
22 = 4.690415759823430
23 = 4.795831523312719
24 = 4.898979485566356
25 = 5.000000000000000
26 = 5.099019513592785
27 = 5.196152422706632
28 = 5.291502622129181
29 = 5.385164807134504
30 = 5.477225575051661
31 = 5.567764362830022
32 = 5.656854249492381
33 = 5.744562646538029
34 = 5.830951894845301
35 = 5.916079783099616
36 = 6.000000000000000
37 = 6.082762530298219
38 = 6.164414002968976
39 = 6.244997998398398
40 = 6.324555320336759
41 = 6.403124237432849
42 = 6.480740698407860
43 = 6.557438524302000
44 = 6.633249580710800
45 = 6.708203932499369
46 = 6.782329983125268
47 = 6.855654600401044
48 = 6.928203230275509
49 = 7.000000000000000
50 = 7.071067811865476
51 = 7.141428428542850
52 = 7.211102550927978
53 = 7.280109889280518
54 = 7.348469228349535
55 = 7.416198487095663
56 = 7.483314773547883
57 = 7.549834435270750
58 = 7.615773105863909
59 = 7.681145747868608
60 = 7.745966692414834
61 = 7.810249675906654
62 = 7.874007874011811
63 = 7.937253933193772
64 = 8.000000000000000
65 = 8.062257748298549
66 = 8.124038404635961
67 = 8.185352771872450
68 = 8.246211251235321
69 = 8.306623862918075
70 = 8.366600265340756
71 = 8.426149773176359
72 = 8.485281374238570
73 = 8.544003745317530
74 = 8.602325267042627
75 = 8.660254037844387
76 = 8.717797887081348
77 = 8.774964387392123
78 = 8.831760866327848
79 = 8.888194417315589
80 = 8.944271909999159
81 = 9.000000000000000
82 = 9.055385138137417
83 = 9.110433579144299
84 = 9.165151389911680
85 = 9.219544457292887
86 = 9.273618495495704
87 = 9.327379053088816
88 = 9.380831519646860
89 = 9.433981132056603
90 = 9.486832980505138
91 = 9.539392014169456
92 = 9.591663046625438
93 = 9.643650760992955
94 = 9.695359714832659
95 = 9.746794344808963
96 = 9.797958971132712
97 = 9.848857801796104
98 = 9.899494936611665
99 = 9.949874371066199
100 = 10.000000000000000
2 = 1.414213562373095
3 = 1.732050807568877
4 = 2.000000000000000
5 = 2.236067977499790
6 = 2.449489742783178
7 = 2.645751311064591
8 = 2.828427124746190
9 = 3.000000000000000
10 = 3.162277660168380
11 = 3.316624790355400
12 = 3.464101615137754
13 = 3.605551275463989
14 = 3.741657386773941
15 = 3.872983346207417
16 = 4.000000000000000
17 = 4.123105625617661
18 = 4.242640687119285
19 = 4.358898943540674
20 = 4.472135954999580
21 = 4.582575694955840
22 = 4.690415759823430
23 = 4.795831523312719
24 = 4.898979485566356
25 = 5.000000000000000
26 = 5.099019513592785
27 = 5.196152422706632
28 = 5.291502622129181
29 = 5.385164807134504
30 = 5.477225575051661
31 = 5.567764362830022
32 = 5.656854249492381
33 = 5.744562646538029
34 = 5.830951894845301
35 = 5.916079783099616
36 = 6.000000000000000
37 = 6.082762530298219
38 = 6.164414002968976
39 = 6.244997998398398
40 = 6.324555320336759
41 = 6.403124237432849
42 = 6.480740698407860
43 = 6.557438524302000
44 = 6.633249580710800
45 = 6.708203932499369
46 = 6.782329983125268
47 = 6.855654600401044
48 = 6.928203230275509
49 = 7.000000000000000
50 = 7.071067811865476
51 = 7.141428428542850
52 = 7.211102550927978
53 = 7.280109889280518
54 = 7.348469228349535
55 = 7.416198487095663
56 = 7.483314773547883
57 = 7.549834435270750
58 = 7.615773105863909
59 = 7.681145747868608
60 = 7.745966692414834
61 = 7.810249675906654
62 = 7.874007874011811
63 = 7.937253933193772
64 = 8.000000000000000
65 = 8.062257748298549
66 = 8.124038404635961
67 = 8.185352771872450
68 = 8.246211251235321
69 = 8.306623862918075
70 = 8.366600265340756
71 = 8.426149773176359
72 = 8.485281374238570
73 = 8.544003745317530
74 = 8.602325267042627
75 = 8.660254037844387
76 = 8.717797887081348
77 = 8.774964387392123
78 = 8.831760866327848
79 = 8.888194417315589
80 = 8.944271909999159
81 = 9.000000000000000
82 = 9.055385138137417
83 = 9.110433579144299
84 = 9.165151389911680
85 = 9.219544457292887
86 = 9.273618495495704
87 = 9.327379053088816
88 = 9.380831519646860
89 = 9.433981132056603
90 = 9.486832980505138
91 = 9.539392014169456
92 = 9.591663046625438
93 = 9.643650760992955
94 = 9.695359714832659
95 = 9.746794344808963
96 = 9.797958971132712
97 = 9.848857801796104
98 = 9.899494936611665
99 = 9.949874371066199
100 = 10.000000000000000
루트 근사값 계산 함수 sqrt()
<math.h> 의 double sqrt(double x); 함수로 루트 근사값을 출력할 수 있습니다.
참고로, 위의 소스를 비주얼C++ 2003 으로 컴파일할 때, 그냥 sqrt(i) 이렇게 하면
0.cpp(7) : error C2668: 'sqrt' : ambiguous call to overloaded function
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(626): could be 'long double sqrt(long double)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(578): or 'float sqrt(float)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(200): or 'double sqrt(double)'
while trying to match the argument list '(int)'
D:\Z>
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(626): could be 'long double sqrt(long double)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(578): or 'float sqrt(float)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(200): or 'double sqrt(double)'
while trying to match the argument list '(int)'
D:\Z>
이런 에러가 나게 됩니다. ambiguous call to overloaded function (오버로딩 함수를 모호하게 호출) 했다는 에러인데,
sqrt()함수는 double형 파라미터를 받아서 double형을 반환하지만, 정수를 넣어 주었기 때문에 그런 것입니다.
따라서 sqrt((double) i)) 이렇게 캐스팅하면 됩니다.
C 포맷 스트링의, 더 자세한 설명 보기::
▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home