좌표 두개 받고 원넓이랑 둘레 구하는 코드인데요.

kknd345의 이미지

#include<stdio.h>
#include<math.h>

float circumference(float R)
{
	float x;
	x=3.14*2*R;
	return x;
}

float circlewidth(float R)
{
	float x;
	x=3.14*R*R;
	return x;
}



main()
{
	float a,b,R,x1,y1,x2,y2,x,y;
	printf("x1 y1 x2 y2 순으로 입력하시오.\n");
	scanf("%f %f %f %f",x1,y1,x2,y2);
	x=x1-x2;
	y=y1-y2;
	x=abs(x);
	y=abs(y);
	R=((x*x)+(y*y))^0.5;
	a=circumference(R);
	b=circlewidth(R);
	printf("원주=%f,원넓이=%f",a,b);
}

제가 보기에는 오류가 없는것 같은데..초짜라 ^^;;

컴파일 하려니 오류가 있네요
잘못된 부분좀 잡아주세요
R=((x*x)+(y*y))^0.5; 그리고 제곱근 구하는게 이거 맞나요?

맹고이의 이미지

sqrt(), pow()를 쓰세요.

cdpark의 이미지

scanf 부분도 틀렸군요. scanf에선 변수의 주소를 주어야 합니다. abs() 대신에 fabs()를 쓰세요.

그리고 특별한(!) 이유가 없다면 float 대신에 double을 사용하시고요.

단호진의 이미지

kknd345 wrote:

---------------snip
	printf("x1 y1 x2 y2 순으로 입력하시오.\n");
---------------잘랐다니까
	printf("원주=%f,원넓이=%f",a,b);
---------------잘라버렸수

질문이.... 한글을 출력할 때 그냥 printf를 써도 윈도우에서는
보여주긴 하는 것 같은데... wprintf인가 이런거는 언제 쓰는지...
예전에 그냥 printf를 사용하다가 낭패를 봤던거 같기도 하고...
수치해석 관련 프로그램 하다보니 한글 쓸일이 별로 없었던지라...

흠... 갑자기 미안해지네요. 찾아보면 국제화에 관한 문서가 많을 것
같다는 느낌이... 이 게으른 흑...

:wq

dragonkun의 이미지

main 함수의 정의는..

int main()
{
    .....
    .....
    return 0;
}

제곱근의 경우는

R=sqrt(pow(x,2)+pow(y,2)); 

가 맞습니다..

Emerging the World!

kknd345의 이미지

sqrt() 는 제곱근 구하는 것이네요
그런데 pow()는 먼가요?

그리고 주소 지정해야 한다는 것 고맙습니다. 깜박하고 & 빼먹어 버렸네요
ㅋㅋ

#include<stdio.h>
#include<math.h>

float circumference(float R)
{
	float x;
	x=3.14*2*R;
	return x;
}

float circlewidth(float R)
{
	float x;
	x=3.14*R*R;
	return x;
}

void main()
{
	float a,b,R,x1,y1,x2,y2,x,y;
	printf("x1 y1 x2 y2 순으로 입력하시오.\n");
	scanf("%f %f %f %f",&x1,&y1,&x2,&y2);
	x=x1-x2;
	y=y1-y2;
	x=fabs(x);
	y=fabs(y);
	R=((x*x)+(y*y));
	R=sqrt(R);
	a=circumference(R);
	b=circlewidth(R);
	printf("원주=%f,원넓이=%f",a,b);
}

완성형입니다 ^^~ 이제 잘 되네요

그리고 double 하니깐 값이 이상하네요 지맘대로 나온다는...
그래서 float 쓰게 됐습니다. 그런데 왜 그럴까요?

1%의 가능성이면 충분하다!
최선을 다하자!

dragonkun의 이미지

pow는 n제곱을 구하는 함수입니다..

c에서는 ^ 는 n제곱을 구하는 연산자가 아니랍니다..;;

^은 XOR을 의미하는 비트연산자구요..

x의 n제곱을 구하려면 x^n가 아니라 pow(x,n)..입니다..;

그리고 main 함수는 int main()으로 정의하고..

return 0을 해 주시는 것이..ANSI c의 표준이랍니다.. :)

Emerging the World!

세벌의 이미지

여러분들이 많은 도움말을 주셨네요. 제가 한 마디 더 한다면...
3.14 대신 M_PI를 쓰시면 좀 더 정확한 값이 나오겠지요. M_PI 가 뭔지는 math.h 를 보시면...

circlewidth 함수는 circlearea 정도로 이름을 바꾸는 게 더 나을 것 같습니다.

cdpark의 이미지

2제곱을 위해서라면 pow(x, 2)보다는 (x*x) 쪽이 훨씬 더 직관적이고 빠르고 정확합니다. :)

단호진의 이미지

sebul wrote:
여러분들이 많은 도움말을 주셨네요. 제가 한 마디 더 한다면...
3.14 대신 M_PI를 쓰시면 좀 더 정확한 값이 나오겠지요. M_PI 가 뭔지는 math.h 를 보시면...

M_PI 는 표준이 아니지 않나요? 저는 그냥 pi = 4.*atan(1.) 식으로 정의합니다만...

:wq

ironiris의 이미지

단호진 wrote:
sebul wrote:
여러분들이 많은 도움말을 주셨네요. 제가 한 마디 더 한다면...
3.14 대신 M_PI를 쓰시면 좀 더 정확한 값이 나오겠지요. M_PI 가 뭔지는 math.h 를 보시면...

M_PI 는 표준이 아니지 않나요? 저는 그냥 pi = 4.*atan(1.) 식으로 정의합니다만...

M_PI는 이미 정의된 값 아닌가요?
4.*atan(1.) 이건 계산해야 하는 값이고 속도에서 차이가 날거라 생각됩니다.
정태영의 이미지

단호진 wrote:
M_PI 는 표준이 아니지 않나요? 저는 그냥 pi = 4.*atan(1.) 식으로 정의합니다만...

/* Some useful constants.  */
#if defined __USE_BSD || defined __USE_XOPEN
# define M_E        2.7182818284590452354   /* e */
# define M_LOG2E    1.4426950408889634074   /* log_2 e */
# define M_LOG10E   0.43429448190325182765  /* log_10 e */
# define M_LN2      0.69314718055994530942  /* log_e 2 */
# define M_LN10     2.30258509299404568402  /* log_e 10 */
# define M_PI       3.14159265358979323846  /* pi */
# define M_PI_2     1.57079632679489661923  /* pi/2 */
# define M_PI_4     0.78539816339744830962  /* pi/4 */
# define M_1_PI     0.31830988618379067154  /* 1/pi */
# define M_2_PI     0.63661977236758134308  /* 2/pi */
# define M_2_SQRTPI 1.12837916709551257390  /* 2/sqrt(pi) */
# define M_SQRT2    1.41421356237309504880  /* sqrt(2) */
# define M_SQRT1_2  0.70710678118654752440  /* 1/sqrt(2) */
#endif

/* The above constants are not adequate for computation using `long double's.
   Therefore we provide as an extension constants with similar names as a
   GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
#ifdef __USE_GNU
# define M_El       2.7182818284590452353602874713526625L  /* e */
# define M_LOG2El   1.4426950408889634073599246810018921L  /* log_2 e */
# define M_LOG10El  0.4342944819032518276511289189166051L  /* log_10 e */
# define M_LN2l     0.6931471805599453094172321214581766L  /* log_e 2 */
# define M_LN10l    2.3025850929940456840179914546843642L  /* log_e 10 */
# define M_PIl      3.1415926535897932384626433832795029L  /* pi */
# define M_PI_2l    1.5707963267948966192313216916397514L  /* pi/2 */
# define M_PI_4l    0.7853981633974483096156608458198757L  /* pi/4 */
# define M_1_PIl    0.3183098861837906715377675267450287L  /* 1/pi */
# define M_2_PIl    0.6366197723675813430755350534900574L  /* 2/pi */
# define M_2_SQRTPIl    1.1283791670955125738961589031215452L  /* 2/sqrt(pi) */
# define M_SQRT2l   1.4142135623730950488016887242096981L  /* sqrt(2) */
# define M_SQRT1_2l 0.7071067811865475244008443621048490L  /* 1/sqrt(2) */
#endif

사실 M_PI같은게 표준인지 아닌지는 모르겠습니다 :)
하지만.. 적어도 비쥬얼 C++과.. glibc에서 제공하는 math.h
에서는 문제 없더군요 :D

정 걸리시면.. 저 값을 define 해놓고 쓰는게 더 맞지 않을까 싶습니다 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

simpid의 이미지

wprintf는 윈도우에 포함되어 있는 DLL에 코드가 들어있으므로 실행파일의 크기가 커지지 않는 장점이 있습니다.
printf는 링크할때 실행파일에 코드가 포함되므로 실행파일의 크기가 커집니다.

wprintf가 좋아보이지만.. wprintf 는 %f등을 지원하지 않습니다.
그러므로 프로그램에서 %f 가 한번이라도 필요하면 printf를 사용하시고 그렇지 않다면 wprintf만 사용하시면 됩니다.

단호진 wrote:
kknd345 wrote:

---------------snip
	printf("x1 y1 x2 y2 순으로 입력하시오.\n");
---------------잘랐다니까
	printf("원주=%f,원넓이=%f",a,b);
---------------잘라버렸수

질문이.... 한글을 출력할 때 그냥 printf를 써도 윈도우에서는
보여주긴 하는 것 같은데... wprintf인가 이런거는 언제 쓰는지...
예전에 그냥 printf를 사용하다가 낭패를 봤던거 같기도 하고...
수치해석 관련 프로그램 하다보니 한글 쓸일이 별로 없었던지라...

흠... 갑자기 미안해지네요. 찾아보면 국제화에 관한 문서가 많을 것
같다는 느낌이... 이 게으른 흑...

단호진의 이미지

정태영 wrote:

사실 M_PI같은게 표준인지 아닌지는 모르겠습니다 :)
하지만.. 적어도 비쥬얼 C++과.. glibc에서 제공하는 math.h
에서는 문제 없더군요 :D

정 걸리시면.. 저 값을 define 해놓고 쓰는게 더 맞지 않을까 싶습니다 :D

예전 비쥬얼씨에는 M_PI등이 정의되지 않았다고 기억합니다. gcc에는 물론 정의되어 있을 때였죠. 그때 찾아보니 표준도 아니더군요. 요즘에는 어떤지 모르겠네요... html표준 논쟁이랑은 조금 다르겠지만 아무튼 그때부터 M_PI등을 사용하지 않습니다. 역탄젠트 계산 한번 했다고 느려진다고 생각하지도 않고... 제 경우 상수는 define보다는 const를 이용해서 정의합니다. 컴파일러에게 정확한 형식을 알려주고 저도 다시 확인하기 위해서죠. 의도하지 않았던 형전환(?type casting)에 말려본 경험이 있어서요.

모가 맞다 그르다를 말할 수는 없겠지만, 제경우 좀더 빠르게보다는 좀더 읽기쉽고 안전하게에 주안점을 두고 있습니다. :D

:wq

feanor의 이미지

M_PI는 ISO와 POSIX 표준에 포함되어 있지 않습니다. Unix98 표준에는 포함되어 있구요.

실제로 gcc -ansi 옵션을 주고 컴파일을 하면 M_PI를 사용할 경우 에러 메시지를 볼 수 있습니다. gcc는 GNU standard를 기본값으로 사용하므로 M_PI를 받아들이는 것은 버그가 아닙니다. 그러나 gcc는 -ansi 옵션등을 통해 ISO나 POSIX 표준만을 사용했는지 검사할 수 있게 하고 있습니다.

--feanor

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.