안녕하세요 냐하함입니다. 저는 2학년 c기초를 배우고있습니다. 책에서 보니까 예제로 마일,야드를 킬로미터로 변환해서 출력해주는 예제가 있는데요 int miles , yards float Kilometers 라고 나옵니다. 이게 그 베이직에서 a=1 b=2 c=a+b 와 같은건가요 아니면 다른 뜻이 있는건가요 정확하게 짚고 넘어가야할거같은데 책에있는 내용으로는 이해가 안가서말이죠. 예문에는 miles = 26; yard = 385; Kilometers = 1.609 * (miles + yards / 1760.0) printf(\"\\n A marathon is %f Kilometersm \\n\\n\", Kilometers); return 0; 이라고 되어있습니다. 답변 감사합니다 (__)
여기서 킬로미터즈 라는 변수는 그 자체가 부동소수점을 가질수밖에 없는 실수임으로 integer로 선언해주면 소수점이 몽창 짤린 결과가 나오게 되죠;;
int는 정수형을 뜻하는 것이구요.
Kilometeres 라는 변수가 소수점 값이 필요하기 때문에 int가 아닌 float 이라고 선언하는 것입니다.
그리고 float은 소수점의 위치가 정해져있는 것이 아닌, \'떠다니는\' 의 의미에서 온 거라고 생각하시면 될 것 같습니다.
선언문은 어떤게 있는지요?
float보다는 연산의 정확성을 위해 double을 많이 쓸겁니다.
int miles , yards
float Kilometers 라고 나옵니다. 는
int 형 변수 miles, yards 와 float형 변수 Kilometers를 선언 한 것입니다.
일단 용어 정리부터 다시 하시는게 좋을듯 합니다.
함수 포인터 사용하면 됩니다만... 지금 기초가 전혀 안되어 있으신것 같은데요.
The C Programming Language. 얇고 번역도 잘 되어 있는 명작입니다.
=-=;;
게다가 아주 오래전 C89표준이라 새로 배우는 분들에게 추천할만 한것도 아닙니다.
다배운 사람에게 참고해라 하고 던저주는 용도면 모를까요.
용어, 명칭, 사용예를 배우는건 차라리 C99표준안 쭉 읽는게 더 좋을수도 있습니다.
지금 ABC책을 보고 있습니다.
학교에서 기초로 배우고있는데 미리복습할겸 따라치다 의문이 들어서 질문한건데
괜한질문을 했나봅니다.
C에서는 자신이 쓸 변수(값이 변할 수 있는 기억공간)을 미리 지정해야합니다.
int a 라고 하면 int형(정수) a 라고 불리우는 기억공간을 할당하게 됩니다.
float a 라고 하면 float형(실수) a라고 불리우는 기억공간을 할당하게 되겟죠.
컴퓨터는 0,1로 실수를 표기하게 되며 그 표현 양에 제한이 있습니다.
하여 1씩 증가하여 표기할 수 있는 정수는 일정 영역안에선 정확히 연산할 수 있습니다만
그외 실수는 정확히 연산할 수 없으며 따라서 유효숫자의 개수를 제한하고 거기에 10의 제곱을 곱한 형태의 실수를 사용하여 근사하게 됩니다.
근데 이 두개의 데이터는 같은 바이트 크기에서 서로 표기하는 법이 완전히 완전히 달라서
변수를 정할 때는 이 변수는 어떤 형태로 쓰일 것인지를 정해줘야합니다.
그렇지 않으면 대입이 안되는 거죠
자 문제로 돌아가 봅니다.
mile과 yard는 다행히 딱 떨어지는 정수 이군요 그리고 다시 바뀌지 않는 놈이네요
그냥 int를 써도 됩니다.
그런데 Kilometers란 변수는 소숫점이 필요한 변수네요
이럴 경우 float형으로 선언해줘야겠네요
그렇지 않고 그냥 대입해주면 계산식에서 나온 값이 (정밀한) 소수가 아닌 정수로 나올 테니까요
대충 이런 흐름으로 이해하시면 될 듯 싶습니다.
하지만 컴퓨터 공학 개론 같은 책을 반드시 보셔야할 것 같습니다.
프로그래밍이란게 어차피 컴퓨터 연산을 통해서 결과물을 도출하기 위한 프로그램을 만드는 행위이니...
컴퓨터가 어떻게 해당 구문을 수행하는지를 모르면 아무 발전도 없을터이니까요
프로그래밍 = 대충 때우기 라고 생각하지 마세요
C언어를 포함한 프로그래밍 언어를 처음 배우는 분들이 많이 헤매는 경우가 많은 건 사실입니다만..
윗분들 말씀처럼 용어에 대한 정리가 아직 좀 덜 되신게 아닌가 싶습니다.
사실, float을 어느때 써야하는가? 라고 하신 질문에 대답을 드리려면 좀 막막한 게 사실입니다.
애시당초 컴퓨터라는 녀석이 디지털이니 정수타입밖에 지원하지 않는데, 억지로 소수점이라는 개념을 넣으려다보니 만들어진 놈이기 때문이죠;
그리고, 컴퓨터라는 것이 어차피 저장할 수 있는 공간상의 한계가 있기 때문에...
32bit 시스템 상에서 int형은 32bit의 저장공간이 필요하므로 보통 -2147483648부터 2147483647 까지의 숫자밖에 표현할 수 없습니다.
그런데 float타입의 경우는 실수부와 지수부로 나뉘어 있고, 실수부는 다시 정수부와 소수부로 나뉘어져있습니다.
그래서 float은 약 3.4*10의 -38승부터 3.4*10의 38승 정도의 수를 표현할 수 있습니다.
대신, 정밀도가 int형처럼 정확하지 않기 때문에 두리뭉술하게 7자리 정도 숫자까지의 정확도를 가집니다;;
미리 공부해 보려고 했다는 말씀이 없으셔서 그런것이지. 호기심을 갖고 질문하는 습관은 좋은 습관입니다.
ㅎㅎㅎ
여튼 모르시더라도 문제에서 뭘 공부해야할 것인지를 파악하시면
큰 도움이 될 겁니다.
즐프하세요~
일반 정수를 더하거나 빼거나 곱하더라도 정수가 되기 때문에
결과값을 정수형인 int로 선언해도 무방합니다.
하지만 나누면 소수점까지 나올수도 있죠 그런경우 더 정확한 결과값을
반영하기 위해 소수점까지 표현 가능한 float을 썼다고 보시면 됩니다.
입력을 받아서 처리하려면
출력에 printf 가 있듯이 입력에는 scanf 라는 기본함수가 있는데
이게 참 걍 설명하면 쉬운데 &연산자에 대해 알아야 해서..
차차 공부하시면서 알아가시면 될듯...