C언어가 실수를 기억하는 방법?

C언어 기초 2015. 4. 28. 21:33 Posted by 네트동자

C언어는 실수를 부동 소수점이라는 특이한 방법으로 저장한다.

부동소수점이란,

실수를 정수부와 소수부로 나누는 것이 아니라

실수를 지수부와 가수부로 나누어 기억하는 방식이다.


'C언어 기초' 카테고리의 다른 글

No.19 scanf( ) 함수 예제.  (0) 2015.04.18
No.20 실수값을 입력할 때 사용하는 서식문자.  (0) 2015.04.18
No.16 scanf() 함수의 기본 구조  (0) 2015.04.17
No.17 scanf( ) 함수 예제  (0) 2015.04.17
No.18 서식 문자.  (0) 2015.04.17

01: #include <stdio.h>

02: int main(void)

03: {

04: float f1, f2;

05: double d1, d2;

06:

07: printf("float형 실수 두개 입력 : ");

08: scanf("%f %e", &f1, &f2);

09: printf("float형 실수 출력 : f1=%f, f2=%e \n", f1, f2);

10:

11:

12: printf("double형 실수 두 개 입력 : ");

13: scanf("%lf %le", &d1, &d2);

14: printf("double형 실수 출력 : d1=%lf, d2=%le \n\n\n\n", d1, d2);

15:

16: return 0;

17: }



04행에서 실수 데이터를 저장하기 위해서 변수 f1, f2 를 float 형으로 선언합니다.

05행에서 실수 데이터를 저장하기 위해서 변수d1, d2 를 double 형으로 선언합니다.

--- 실수형 변수는 보통 double 형을 많이 쓴다.


< int 형,  float 형,  double 형 변수>들에 대한 자세한 사항에 대해서는 나중에 설명하겠다.



08행에서 서식문자 %f와 %e 를 통해서 키보드로부터 두 개의 실수를 각각 입력받아 

           변수 f1과 f2에 저장한다

09행에서 f1과 f2에 저장된 데이터를 %f와 %e를 사용하여 출력합니다.


'C언어 기초' 카테고리의 다른 글

C언어가 실수를 기억하는 방법?  (0) 2015.04.28
No.19 scanf( ) 함수 예제.  (0) 2015.04.18
No.16 scanf() 함수의 기본 구조  (0) 2015.04.17
No.17 scanf( ) 함수 예제  (0) 2015.04.17
No.18 서식 문자.  (0) 2015.04.17

No.19 scanf( ) 함수 예제.

C언어 기초 2015. 4. 18. 09:00 Posted by 네트동자

01: #include <stdio.h>

02: int main(void)

03: {

04: int a, b, c;

05:

06: printf("10진수 정수 1개 입력: ");

07: scanf("%d", &a);

08: printf("10진수 : %d, 16진수 : %x, 8진수 : %o \n", a, a, a);

09:

10: printf("16진수 정수 1개 입력 : ");

11: scanf("%x", &b);

12: printf("10진수 : %d, 16진수: %x, 8진수 : %o \n", b, b, b);

13:

14: printf("8진수 정수 1개 입력 :");

15: scanf("%o", &c);

16: printf("10진수 : %d, 16진수 : %x, 8진수 : %o \n\n\n",b , b, b);

17:

18: return 0;

19:

20: }



결과값



04행에서 정수 데이터를 저장하기 위해 변수 a, b, c 를  int형으로 선언합니다.

정수형 변수는 int 을 많이 사용합니다.

변수에 대해서는 다음에 더 자세히 이야기 하겠습니다.


07행에서 10진수 정수(%d) 한 개를 키보드로 입력받아 변수 a에 저장합니다.

08행에서 변수 a 에 저장된 값을 각각 10진수, 16진수, 8진수로 출력한다.


11행에서 16진수 정수(%x) 한 개를 키보드로부터 입력받아 변수 b에 저장한다.

12행부터는 저장된 값을 각각 10진수, 16진수, 8진수로 출력한다.


15행에서 8진수 정수(%o) 한 개를 키보드로 입력받아 변수 c에 저장한다.

16행에서는 저장된 값을 각각 10진수, 16진수, 8진수로 출력된다.




위의 예제는 정수 값을 입력할 때 사용하는 '서식문자' 들이다.


다음 Chapter 에서는 

'실수'값을 입력할 때 사용하는 '서식문자'에 관해 공부해보자.









No.18 서식 문자.

C언어 기초 2015. 4. 17. 09:00 Posted by 네트동자

scanf( ) 함수의 f도 

printf( ) 함수에서처럼 'formatted' 서식화된 의미로 같은 서식문자를 사용한다.


즉,

10진수 정수, 8진수 정수, 16진수 정수, 실수, 문자, 문자열 등을 입력받을 수 있다.


입력 서식문자에 대한 자세한 내용은 다음 표에 기재되어 있으니 참고하세요.^^


 서식 문자

   입력 형태

 %d

  10진수 정수 입력

 %x

  16진수 정수 입력

 %o

   8진수 정수 입력

  %f 

  float형 실수 입력

 %lf

  double형 실수 입력

 %c

  한 개의 문자 입력

 %s

  문자열 입력

 %u

  10진수 정수 (양수만 표현가능) 입력

 %e 

  float형 e 표기법에 의한 실수 입력

 %le 

  double형 e 표기법에 의한 실수 입력



No.17 scanf( ) 함수 예제

C언어 기초 2015. 4. 17. 09:00 Posted by 네트동자

01: #include <stdio.h>

02: int main(void)

03: {

04: int age;

05: printf("What is your age? : ");

06: scanf("%d", &age);

07: printf("Wow! Really? Are you %d years old? \n\n\n", age);

08:

09: return 0;

10: }



04행에서 age는 

06행의 

scanf( ) 함수에서 입력받은 데이터를 저장하기 위해서 선언된 변수 (임시 저장 공간) 이다.



궁금한 점.

왜,             scanf("%d", age) 라고 하지 않고

                scanf("%d", &age) 라고 age 앞에 &을 붙여줄까?


간단히 설명해보겠다.

               &age는 변수 age 를 위해 할당된 메모리의 주소를 의미한다.


 scanf("%d", &age) 라는 표현은 10진수 Data를 입력받아서 

                '변수 age의 메모리 주소'에 '입력값'을 저장하라는 의미이다.


한마디로 말해서 이런거다.

당신이 택배(Data)를 받을 때, 어떻게 해야 택배를 받을 수 있는가 ? 

바로 '주소'가 있어야 '택배'를 받을 수 있다.


이때, 택배는 10진수 data이고,

      주소는 &age를 의미한다.

즉, 10진수 data가 도달해야 할 주소 &age 를 의미한다.



 


               

No.16 scanf() 함수의 기본 구조

C언어 기초 2015. 4. 17. 09:00 Posted by 네트동자

Keaboard 로부터 Data를 입력받은 후,

입력받은 Data를 사용하고자 한다면, 입력받은 Data를 저장해야한다.

이것이 scanf( ) 함수의 기본기능 중 하나이다.


Example)

10진수 Data를 하나 입력받아 저장하려면

다음과 같이 사용한다.


scanf("%d",&a)

"%d" 입력을 위한 서식문자.

&a    입력을 저장하는 변수.


위의 예에서 살펴볼 수 있듯이

scanf( ) 함수도 printf( ) 함수와 같이 '서식문자'를 사용한다.

scanf( ) 함수에서 사용하는 서식문자는 입력받을 Data의 Type을 결정하기 위해서이다.

위의 서식문자 %d 는 keaboard를 통해서 10진수를 입력받는다는 것을 의미한다.


그리고, &a는 입력받을 값을 저장하는 '임시저장공간'과 관계가 있다.

이에 대한 내용은 다음 Chapter에서 공부할 '변수'에 관해서 알아야 이해할 수 있다.

일단은 쉽게 생각해서,

keaboard 로부터 입력받은 Data를 a라는 이름의 변수에 (임시 저장 공간)에 저장한다고 생각해보자.


----- to be continued.


 




- 키보드로부터 데이터를 입력받는 것을 표준입력.

- 모니터에     데이터를 출력하는 것을 표준출력.


scanf( ) 함수 역시 printf( ) 함수와 마찬가지로

stdio.h 헤더 파일에 정의되어 있는 표준 라이브러리 함수에 속한다.


그러므로, scanf( ) 함수를 사용하려면,

printf( ) 함수와 마찬가지로,


stdio.h 헤더파일을 include 해야한다.



14번째 - 필드 폭 지정.

C언어 기초 2015. 4. 16. 09:00 Posted by 네트동자

서식문자에 적절한 옵션을 추가하면 

출력되는 데이터 필드의 폭을 조절할 수 있다.


다시 말해,

일정한 간격으로 데이터를 출력할 수 있게 해준다.


다음은 '서식 문자'에 옵션을 추가하는 예들이다.


%03d 필드 폭을 3칸 확보, 오른쪽으로 정렬해서 출력, 남은 자리는 0으로 채움.

%-3d 필드 폭을 3칸 확보, 왼쪽으로   정렬해서 출력.

%+3d 필드 폭을 3칸 확보, 오른쪽으로 정렬해서 출력, 양수는 +부호를 붙이고

                                                             음수는 -부호를 붙여서 출력.




다음 예제를 통해 연습해보자.


01: #include <stdio.h>

02: int main(void)

03: {

04: printf("%03d, %03d, %03d \n", 1, 20, 300);

05: printf("%-3d, %-3d, %-3d \n", 1, 20, 300);

06: printf("%+3d, %+3d, %+3d \n", 1, 20, 300);

07: printf("%+3d, %+3d, %+3d \n", 1, 20, -300);

08:

09: return 0;

10: }



결과값.


001, 020, 300

1  , 20 , 300

 +1, +20, +300

 +1, +20, -300

계속하려면 아무키나 누르십시오 . . .


 06행과 07행은 

%+3d 필드 폭을 3칸 확보, 오른쪽으로 정렬해서 출력, 양수는 +부호를 붙이고

                                                             음수는 -부호를 붙여서 출력.

위의 서식 문자 옵션에 따라 각각 데이터값에 +, - 부호를 붙여서 출력하게 된다.


01: #include <stdio.h>

02: int main(void)

03: {

04: printf("%f \n", 0.000123);    //소수점이하 6자리

05: printf("%f \n", 0.0001236);   //소수점이하 6자리 초과

06:

07: printf("%e \n", 0.000123);    //소수점이하 6자리

08: printf("%E \n", 0.0001236);   //소수점이하 6자리 초과

09:

10: printf("%g \n", 0.000123);    //소수점이하 6자리

11: printf("%G \n", 0.0000123456);//소수점이하 6자리 초과

12:

13: printf("올해 우리나라 경제 성장률은 5%%입니다. \n");

14:

15: return 0;

16: }



실행결과는 다음과 같다.



0.000123

0.000124

1.230000e-004                     // 1.23*  (10의 -4승)   을 의미

1.236000E-004                     // 1.236* (10의 -4승)   을 의미

0.000123

1.2345E-005                        // 1.23456* (10의 -5승) 을 의미

올해 우리나라 경제 성장률은 5%입니다.




12번째 10진수 정수(양수) - %u

C언어 기초 2015. 4. 16. 09:00 Posted by 네트동자

01: #include <stdio.h>

02: int main(void)

03: {

04: printf("%d \n", 2147483647);   //2147483647

05: printf("%d \n", 2147483650);  //-2147483646

06: printf("%u \n", 4294967295);   //2147483647의 약 2배

07:

08: return 0;

09: }



서식문자 %u를 사용하면 

%d로 출력할 수 있는 양수의 범위보다

2배 더 넓게 출력할 수 있다.


위의 예제는 서식문자 %d와 %u의 차이를 잘 설명하고 있는 코딩이다.


04행은 서식문자 %d로 표현할 수 있는 최대값 2147483647을 출력했다.

05행은 서식문자 %d가 출력할 수 있는 최대값을 넘어서는 수치가 기입되었기에 이상한 음수값이 출력되었다.


06행은 서식문자 %d로 표현할 수 있는 최대값 2147483647보다 큰 값을 출력하기 위해서

          서식문자 %u를 사용하고 있다.

          서식문자 %u로 표현할 수 있는 최대값은 4294967295 이다. 

          이 값은 %d로 출력할 수 있는 최대값의 약 2배이다.


그럼에도 불구하고, %u 역시 표현할 수 있는 최대값보다 큰 값을 대입하면, 서식문자 %d와 마찬가지로 이상한 값이 출력된다.