컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
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));

}



%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




루트 근사값 계산 함수 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>

이런 에러가 나게 됩니다. 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++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top