IT Japan

제 2장 - C의 입출력 함수 및 수의 표현 본문

IT/Programming

제 2장 - C의 입출력 함수 및 수의 표현

swhwang 2016. 3. 22. 00:07
반응형


제 1장에서 우리는 C의 기본 문법과 print함수에 대해서 공부하였다. 이 

번장에서는 기본적인 입출력 함수들 각각의 기능과 차이점을 알아보고 상 

황에 따라 알맞은 입출력 함수를 선택할 수 있도록 할 것이다. 그리고 C언 

어에서 여러가지 수치의 표현방법과 수치의 형을 지정하는 이유를 알아보 

자. 


1. 라이브러리(Library)에 관하여 


- C의 배움의 과정은 문법과 라이브러리 함수 마스터 이다. - 


프로그램을 작성할 때 모든 루틴을 프로그래머가 일일이 작성해야 한다 

고 생각해 보자. 얼마나 비효율적인 일인가? 프로그래머가 입,출력 등의 

프로그램의 사소한 부분까지 코딩해야 한다면 시간낭비요, 인력낭비일 것 

이다. 그래서 C와 같은 고급언어에서는 프로그램에서 주로 사용되는 기본 

적인 기능들을(함수들을) 미리 작성하여 라이브러리로 구축하여 놓고 프로 

그래머들이 하나씩 호출하여 쓸 수 있도록 해 놓았다.(이것을 표준 라이브 

러리라고 한다) printf()의 경우에도 라이브러리에 미리 작성되어 있는 함 

수이다. 

전장에서 C프로그램은 함수들의 집합으로 이루어져 있다고 배웠다. 화면 

에 문자를 원하는 형식대로 출력해 주는 기능의 printf()함수를 비롯하여 

C에서는 수백가지의 함수들을 지원한다. 프로그래머는 이러한 다양한 함 

수들중에서 자기가 필요로 하는 함수들을 호출하여 사용하는 것이다. prin 

tf()함수뿐만 아니라 오늘 우리가 배우려 하는 입출력 함수들도 일반적으 

로 많이 쓰는 함수이다. 

요즘에는 이러한 C표준 라이브러리 뿐만 아니라, C프로그래머들의 편의를 

위하여 각종 상용 라이브러리들이 나와 있다. 우리가 지금 자체 한글을 지 

원하는 회원관리 프로그램을 작성한다고 치자. 그러면, 정작 중요한 자료 

관리 부분보다는 먼저 한글과 프로그램 인터페이스를 작성하여야 할 것이 

다. 프로그램의 가장 중요한 부분인 자료관리 부분에 많은 노력이 들어가 

야 하는데, 그 이전에 덜 중요한(?) 부분에 매달려야 한다면 이것은 시간, 

노력낭비가 아닐 수 없다. 하지만 시중에 나와있는 한글 라이브러리를 사 

용하여 원하는 기능을 가진 함수들을 호출하기만 하면 시간과 노력을 훨씬 

줄이면서 프로그램을 작성할 수가 있는 것이다. 참고로 필자는 한라프로라 

는 자신의 프로그램에서 한글과 GUI를 마음대로 구현할 수 있는 공개 라이 

브러리를 쓰고 있다. 이 라이브러리는 한글프로그래밍 동호회에 가면 쉽게 

구할 수 있다. 

우리는 초보이므로 일단은 C에서 제공하는 기본 라이브러리 함수를 이용 

하는 방법부터 배워야 한다. 그러면 오늘은 먼저 입출력 함수에 대하여 알 

아보기로 하자. 



2. 출력 함수 

C에는 printf()함수 이외에도 단일문자를 출력하는 putchar()함수와 문자 

열을 출력하는 puts()함수가 있다. 


putchar('C'); --> 단일문자 출력(줄을 바꾸지 않는다) 

puts("I Love You!"); --> 문자열 출력(출력한 후 자동으로 줄을 바꾼다) 


위의 두 함수로 전장에서 배웠던 Esc문자열을 그대로 쓸 수가 있다. 즉 p 

utchar('\n')은 줄을 바꾸며, puts("\a Error!")는 삑 소리를 내며 에러메 

시지를 출력한다. 


<예제1> 변수를 이용하여 'I' 'like' 'C' 'Programming'을 기억시키고 다 

음과 같이 출력되도록 하는 프로그램 작성. 

I like 

C Programming! 


이 프로그램은 두 가지 관점에서 작성될 수가 있다. 

<리스트1> <리스트2> 

#include |#include 

main() |main() 

{ |{ 

char c1='I', c2='C'; |char c1='I', c2='C'; 

char *s1="like",*s2="Program"; |char *s1="like",*s2="Program"; 

printf("%c %s\n%c %s\n",c1,s1,c2,s2); |putchar(c1); 

} |putchar(' '); 

|puts(s1); putchar(c2); 

|putchar(' '); puts(s2); 

|} 


먼저 각 프로그램 첫머리의 #include 라는 문장을 주시하라. 

stdio.h는 standard input/output의 준말로서 표준입출력 함수에 관한 선 

언을 모아둔 Header화일이다. 

위에서 우리는 라이브러리에 대하여 알아보았다. 고급언어로 작성된 프로 

그램은 <컴파일>이라는 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번 

역이 되고, 프로그램에서 사용된 표준 함수들을 라이브러리(미리 기계어 

로 변환 되어 있다)에서 추출해 와서 프로그램에 결합하는 <링크>라는 과 

정을 거쳐야 비로소 하나의 실행화일이 만들어 지는 것이다. 

변수와 마찬가지로 프로그램에서 사용되어질 함수들은 모두 프로그램 첫 

머리에서 선언이 되어야 한다. C에서는 방대한 라이브러리 함수들을 그 기 

능별로 세분화하여 선언을 해 둔 헤더화일을 가지고 있다. 위 프로그램에 

서 사용되는 printf(), putchar(), puts()등과 잠시후 배울 입력 함수들에 

관한 선언들은 모두 화일에 들어있으므로 #include 명령을 써서 

화일을 포함시켜 준 것이다. #include <화일명>은 화일명으로 

지정하는 프로그램 모듈을 그 위치에 삽입하여 컴파일 하라'는 의미로 C컴 

파일러에 주는 의사명령의 하나이다. 의사명령이란 예약어가 아니고 컴파 

일러에게 지시하는 명령어를 말한다(이러한 것을 전처리기라고 한다). 


그러면, 지난 장에서는 예제에서 printf()함수를 사용하였는데 왜 #inclu 

de문장이 없었지? 라고 생각하는 분도 계실텐데, 'stdio.h'는 기본 입출력 

처리루틴을 위해 준비된 것으로 #include문으로 지시하지 않더라도 자동 

적으로 삽입이 된다. 하지만 기술하여 주는 것이 바람직한 습관이라 하겠 

다. 


위의 두 프로그램을 비교해 보면 <리스트1>이 훨씬 간단하고 편리함을 알 

수가 있다. 하지만, printf() 함수는 수치, 수식 등의 계산 결과와 문자, 

문자열 등을 처리해야 하므로 당연히 수학적인 라이브러리가 일부 <링크> 

시에 포함이 된다. 그러나, putchar()함수나 puts()함수는 문자와 문자열 

만 처리하면 되므로 수학적인 라이브러리가 필요없다. 그러므로 <리스트1> 

이 소스코드는 간단하지만 실행화일의 크기는 <리스트2>가 작다. 



3. 입력 함수 


다음은 C의 표준 입력 함수들에 관하여 알아보자. 


# getch() 


단일문자를 입력받으며, 입력하는 문자는 화면에표시되지 않는다(No Echo) 


# getchar() 


단일문자를 입력받으며, 입력하는 문자는 화면에 표시된다(Echo Back) 

를 누르면 입력이 종료되며 여러문자를 입력해도 처음의 한 문 

자만을 유효하게 받아들인다. 


# gets() 


를 누를 때까지 공백을 포함한 모든 문자열을 입력받는다. 


# scanf() 


여러개의 변수값을 입력받는다. 자료와 자료사이는 공백, 탭, \n 등으로 

구분한다. 서식 제어 문자열(%d,%f,%c,%s 등)을 사용하여 지정된 형식으 

로 입력받기도 한다. 또한 수치변수에 값을 읽어 들일 때에는 인수명 앞 

에 & 를 붙여야 한다. ( printf()함수는 변수명칭, 상수, 수식 등을 

인수로 사용하나 scanf()함수는 변수의 포인터를 인수로 사용한다. 

- 일단은 수치형을 입력 받을 땐 &를 붙이고, 문자열을 입력받을 땐 &를 

사용하지 않는다고 알고 있자. ) 



<예제2> "당신의 이름은?"이라는 질문에 자신의 이름을 성과 이름을 구분 

하여 입력하여 "내 이름은 # ##입니다."를 출력하는 프로그램 작성. 


<리스트3> 

1: #include 

2: main() 

3: { 

4: char *s=" "; 

5: printf("당신의 이름은? "); 

6: scanf("%s",s); 

7: printf("내 이름은 %s입니다.\n"); 

8: } 


지난 장에서 문자열을 기억하는 변수는 변수명 앞에 *를 붙인다고 했다. 

변수명 앞에 * 를 붙인 것은 포인터를 의미하는데, 일단은 포인터 변수란 

"어떤 자료가 메모리에 저장될 때 그 메모리의 번지를 기억하는 변수" 정 

도로 알고 있자. 문자열을 입력받기 위해서는 4행과 같이 먼저 문자열을 

기억시킬 영역을 확보해 두어야 한다. 4행에서 공백은 입력받을 문자열의 

길이와 같거나 길어야 한다. 이 문장의 s 변수는 공백 10칸이 저장된 메모 

리의 번지를 가지는 변수라고 해석할 수 있다. <리스트3>의 실행 결과는, 


당신의 이름은? 홍 길동 

내 이름은 홍입니다. 


6행에서 scanf()함수는 공백이 자료를 구분하는 역할을 한다고 했으므로 

변수 s에는 '홍'만 기억되는 것이다. 

그럼, <리스트3>을 어떻게 바꾸면 좋을까? 


4행을 char *s1=" ", *s2=" "; 

6행을 scanf("%s %s",s1,s2); 


로 바꾸어 성과 이름을 넣는 변수를 각각 선언하고 값을 할당하면 된다. 

하지만 이것은 별로 바람직 하지가 못하다. 그러면 <리스트3>에서, 


6행을 gets(s);로 바꾼다. 


공백을 포함한 문자열을 입력받을 경우에는 gets()함수를 쓰면 된다. 

그리고 <리스트3>을 <리스트4>로도 기술할 수가 있다. 


<리스트4> 

1: #include 

2: main() 

3: { 

4: char *s, arr[20]; 

5: s=arr; 

6: printf("당신의 이름은? "); 

7: gets(s); 

8: printf("내 이름은 %s입니다.\n",s); 

9: } 


위에서 'arr[20]'은 배열을 의미한다(배열은 후에 자세히 배울 것이다). 

char arr[20];의 뜻은 문자가 20개 저장될 만큼의 arr라는 이름의 빈 공 

간을 확보하라는 것이다.( int number[10];은 정수가 10개 저장될 number 

라는 방을 확보하라는 뜻이다) 

그러므로 5행은 20칸의 공백(을 가진 배열 arr)을 s에 대입한다는 의미이 

다. 


문자열을 입력받기 위해서는 먼저 문자열을 기억시킬 영역을 확보해 주어 

야 하는데, 그 방법은 다음의 2가지가 있다. 


1) char *s=" "; 

2) char *s, arr[n]; ( arr: 임의의 배열명, 

s=arr; n: 임의의 수치 ) 



<예제3> 사다리꼴의 3변(윗변,밑변,높이)를 입력하여 그 넓이를 구하는 

프로그램 작성. 


[입력] 

DATA? 345 678 123 

[결과] 

AREA=62914.50 


<리스트5> 

1: #include 

2: 

3: main() 

4: { 

5: int a, b, c; 

6: float s; 

7: printf("DATA ? "); 

8: scanf("%3d %3d %3d", &a,&b,&c); 

9: s=(a+b)*c/2.0; 

10: printf("AREA=%10.2f\n",s); 

11: } 


위에서 8행의 의미는 

@ # $ @ # $ <= 차례로 대응한다 

scanf("%3d %3d %3d", &a,&b,&c); " "안의 공백은 있어도 

없어도 된다. 


%3d는 3자리의 정수를 입력 받는다는 의미이다. scanf()함수의 제어코드 

는 지난 장에서 배운 printf()함수의 제어코드와 대부분 일치한다. 

그럼, <리스트5>를 실행한 후, 345 678 123입력해 보라. 답이 제대로 나 

왔는가? 아마 -2621.50이라는 엉뚱한 수치가 출력될 것이다. 

그러면,34 56 78을 입력해 보자. 3510.00이라는 정확한 수치가 출력된다. 


얘가 왜 이럴까? 

전자의 경우는 답이 음수로 출력이 된다. 이것은 (a+b)*c 즉, (345+678)* 

123의 계산 결과가 int형 정수의 범위(-32,768 -- 32,767)을 넘어섰기 때 

문이다. 자료형의 범위를 넘어섰을 경우를 overflow가 발생했다고 한다. C 

에서는 이러한 프로그래머의 조그마한 실수의 책임을 전적으로 프로그래머 

자신에게 떠맡긴다. 그래서 우리는 자료형의 범위를 알아놓을 필요가 있 

다. 


여기서 overflow가 발생하지 않도록 하려면, 


(1) 변수 c를 실수형으로 선언하고(c를 곱하는 과정에서 발생했으므로), 

8행을 scanf("%3d %3d %3f",&a,&b,&c);로 바꾼다. 


이 이유는 지난 장에서 자세히 설명하였다. 


c가 실수형이면, 

(a + b) * c / 2.0 (a + b) * c / 2.0 

정수 정수 실수 정수 실수 실수 

| | | | | | 

+---------+ | ===> +---------+ | 

정수(Overflow) | 실수(Overflow발생안함) 

| | | | 

+-------------+ +-------------+ 

실수 실수 


(2) 9행을 다음과 같이 기술한다. 


s=(float)(a+b)*c/2.0; 또는 s=(a+b)*(float)c/2.0; 


(float)의 의미는 뒤의 식의 결과나 변수값을 강제로 실수로 보존 

하라는 의미이다. 이렇게 자료형을 강제로 바꾸는 예약어를 cast 

연산자라고 한다. 

물론 실수변수 float c;를 정수로 강제로 지정하려면 (int)c로 하 

면 된다. 


(3) 변수 a, b, c를 배정도 정수로 선언한다.(설명은 밑에 계속된다) 



4. 수치자료의 표현 


컴퓨터에서의 수치자료의 형은 여러가지로 나누어 진다. 다음 표를 보자. 


<표1> 기본 데이터형의 크기와 범위 

+------+-----------------+-------------+----+-----------------------+ 

| 구분 |종 류|선 언|크기| 범 위 | 

+------+-----------------+-------------+----+-----------------------+ 

| 문자 |부호있는 문자형 |char | 1 |-128 -- 127 | 

| 자료 |부호없는 문자형 |unsigned char| 1 | 0 -- 255 | 

+------+-----------------+-------------+----+-----------------------+ 

| 표준 |부호있는 정수 |int | 2 |-37,768 -- 32,767 | 

| 정수 |부호없는 정수 |unsigned int | 2 | 0 -- 65,535 | 

+------+-----------------+-------------+----+-----------------------+ 

|배정도|배정도정수(부호O)|long=long int| 4 |-21억4천만 -- 21억4천만| 

| 정수 |배정도정수(부호X)|unsigned long| 4 | 0 -- 4,294,967,295 | 

+------+-----------------+-------------+----+-----------------------+ 

| 실수 |단일 실수 |float | 4 |1.7*10^-308~ 1.7*10^308| 

| |배정도 실수 |double | 8 |3.4*10^-308~ 3.4*10^308| 

+------+-----------------+-------------+----+-----------------------+ 

# ^ 은 거듭제곱을 나타낸다. # 위에서 크기의 단위는 Byte이다. 

# 문자자료의 경우 C에서는 1 Byte정수형 자료로 처리한다. 



(수치의 형을 지정해야 하는 이유) 


위의 표에서 보듯이 수치의 범위에 따라 자유롭게 변수형을 선언할 수가 

있다. 수치의 형을 왜 이리 복잡하게 나누어 놓았나 반문하는 사람도 있겠 

지만 표에서 위에 있는 형일수록 크기(Byte)가 작아 메모리 사용량도 줄어 

들고 연산속도도 빨라진다. 작고 단순한 연산을 할 때에는 char형, int형 

으로도 충분하겠지만, 심지어 우리가 가계부같은 프로그램을 작성하려 해 

도 최소한 배정도 정수형은 필요할 것이다. 


그러므로, C에서는 사용자의 필요에 따라, 프로그램의 목적에 따라 속도 

와 메보리를 고려해 가면서 자유롭게 수치의 형을 선택할 수가 있는 것이 

다. 


(1) 정수 표현 방법 


정수형의 자료를 나타내는 int형은 2Byte(즉 1Word,16Bit)이므로 나타낼 

수 있는 수치의 종류는 65,536가지이다.(2의 16승 - 수학시간에 졸지 않은 

사람은 다 안다) 


부호를 사용할 필요가 없는 정수형 변수(Unsigned int)는 0에서 65,536까 

지 범위를 나타낼 수가 있으나, 일반 int형 변수는 양수, 0 ,음수를 모두 

사용해야 하므로 반으로 나누어 -32,768 ~ 32,767 ( 0은 편의상 양수에 속 

한다 )사이의 범위를 가지게 되는 것이다. 



그러면, int a=32767, b=1, sum; 

sum=a + b ; 에서 sum의 값은 얼마일까? 


바로, 오버플로우가 발생한다. 실제는 32768이 되지만 범위를 넘어서므로 

sum의 값은 -1이라는 어처구니 없는 값이 발생한다. 그러므로 우리는 연산 

을 할 때, 수치형의 범위를 고려하여야 괴짜 프로그램을 생산하지 않게 된 

다. 


이젠, <예제3>의 해결책 3가지 중 3번이 이해가 되리라고 본다. 


5행을 long a,b,c; 

8행을 scanf("%3ld %3ld %3ld",&a,&b,&c); 로 바꾸면 된다. 


(%ld는 배정도형 정수를 출력하거나 입력받을 때 쓰는 변환기호이다) 



컴퓨터에서는 모든 자료를 2진수로 취급한다. 


int a=15라고 했을 때, 컴퓨터 내부에서는 a를 000000000001111(int형은 

2바이트=16비트이므로)로 기억한다. 


그러면, int b=-15라고 했을 때 어떻게 기억을 할까? 


컴퓨터는 2진수로 음수를 표현할 때 2의 보수를 취하는 방법을 이용하는데 

, 그 방법은 아래와 같다. 


(1) 양수값에다가 1의 보수를 취한다(비트반전). 

(2) (1)의 결과에 1을 더한다. 


15 => (1) 1111111111110000 (1의 보수를 취함) 

(2) 1111111111110001 => -15 (1을 더함) 


부호를 고려하는 정수형(int)의 경우에는 맨좌측 최상위 비트가 0이면 양 

수로, 1이면 음수로 본다. 

하지만 unsigned int(부호없는 정수)형의 경우에는 양수만을 취급하므로 

최상위 비트를 고려하지 않는다. 


예를 들어보자. 1111111111110001가 int형이라면, 

최상위비트가 1이므로 이 값은 음수이므로 2의 보수를 취 

하여 0000000000001111(15)의 음수값인 -15가 된다. 


반면에 1111111111110001이 unsigned int형이라면, 

최상위비트와는 관계없이 10진수로 65521이 된다. 


장황하게 설명을 하였는데, 기본적으로 알아두어야 할 내용이므로 언급하 

였다.(전산학에서는 기본적으로 알아야 할 내용이다) 


일반적인 프로그램에서는 정수형이나 배정도 정수형 변수로도 프로그램 

작성이 가능하나, 수학적인 계산이 조금이라도 들어가는 프로그램에서는 

실수형이 필요하게 된다. 그럼, 실수 표현 방식에 대하여 알아보자. 



(2) 실수 표현 방법 


컴퓨터에서 실수(float형)를 표시하는 경우에는 부동소숫점 형식을 이용 

한다. 부동소수점 형식에서는 하나의 수치를 표시하는데에 4Byte를 할당한 

다. 

첫 byte는 그 수치의 부호와 지수를 표시하며 남은 3 byte로는 1 byte 당 

10진수 2자리를 BCD형식으로 표시한다. BCD(Binary Coded Digit)는 우리 

말로 2진화 10진수라고 부르며, 4비트로 10진수 1자리를 표시하는 형식을 

말한다. 

4비트로 표시할 수 있는 수의 종류는 2의 4승(0 ~ 15까지)가지가 있지만 

BCD에서는 0에서 9까지만 표시한다. 1994를 BCD로 표시하면, 


+----+----+----+----+ 

|0001|1001|1001|0100| (4비트로 10진수 1자리를 표시) 

+----+----+----+----+ 

1 9 9 4 


예를 들어 float a=1994; 일때 컴퓨터에서는, 


+---------------------------+ 

| (이 영역은 BCD형식으로) | 

+====+====+====+====+====+====+====+====+ 

|xyyy|yyyy|0001|1001|1001|0100|0000|0000| (총 4 byte) 

+====+====+====+====+====+====+====+====+ 

|| | 1 . 9 9 4 0 0 

|+--+---+ 

| | * 소수점은 항상 이 위치에 있는 걸로 간주 

| | 

| +---------- 지수(10의 멱승을 나타냄) .여기선 0000011 

+-------------- 부호(양수이면 0, 음수이면 1) .여기선 0 


==> 1.99400 * 10의 3승 (1994.00) : 실수 표현 방식이다. 


위에서 보면 지수의 표현을 7bit로 하고 있다. 7비트로 할 수 있는 자료 

의 종류는 128가지인데, 음수, 양수를 구분해야 하므로 지수의 범위는 -6 

4에서 63까지가 된다. 

위에서 보듯이 실수형(float) 자료의 유효 수치는 6자리이다. 그러므로 7 

자리 이상의 수치를 기억시키는 경우에는 7번째 자리에서 반올림이 행하여 

진다. 


C에서는 수치의 유효 자리수를 2배로 늘리기 위해 배정도 실수형(double) 

을 지원한다. 배정도 실수는 8byte로 표시하게 되며, 유효자리수는 14자리 

로 늘어난다. 


( 총 8 byte ) 

+====+====+====+====+====+====+====+====+ +====+====+====+====+ 

|xyyy|yyyy|0000|0000|0000|0000|0000|0000|....|0000|0000|0000|0000| 

+====+====+====+====+====+====+====+====+ +====+====+====+====+ 

|| | | | 

|+------+ +-----------------------------....--------------------+ 

|지수비트 7 byte (유효자리수는 14자리로 늘어난다) 

부호비트 



5. 형 변환 기호(format code) 


지난 장에서 printf()함수를 배울 때 형변환 기호에 대해 언급하였다. 

이번 장에서는 좀 더 자세히 알아보자. 


<표2> 형 변환 기호 

+----+---------------+----------------------------------------------+ 

|기호| 인수의 수형 | 변환의 내용 | 

+----+---------------+----------------------------------------------+ 

| %d | 정 수 형 | 인수를 부호있는 10진수로 출력한다 | 

| %u | 정 수 형 | 인수를 부호없는 10진수로 출력한다 | 

|%ld | 배정도 정수형 | 인수를 부호있는 배정도 정수로 출력한다 | 

|%lu | 배정도 정수형 | 인수를 부호없는 배정도 정수로 출력한다 | 

| %o | 정 수 형 | 인수를 부호없는 8진수로 출력한다 | 

| %x | 정 수 형 | 인수를 부호없는 16진수로 출력한다(소문자로) | 

| %X | 정 수 형 | 인수를 부호없는 16진수로 출력한다(대문자로) | 

| %c |문자(or정수형) | 인수를 단일문자로 출력 | 

| %s | 문자열 포인터 | \0앞까지의 문자열이던가 지정된 길이만큼 출력 | 

| %f |부동소수점 실수| 고정 소숫점 형식으로 출력 ex: 35.45600 | 

| %e |부동소수점 실수| 부동 소숫점 형식으로 출력 ex: 3.54560e+01 | 

| %E | | 3.54560E+01 | 

| %g |부동소수점 실수| 고정,부동 중 간단한 형식으로 출력(e) | 

| %G | | (E) | 

+----+---------------+----------------------------------------------+ 

# 제1장의 <표1>과 조합하여 출력이 가능하다. 



scanf()함수는 printf()함수와 거의 같은 변환 기호를 사용한다. 가장 큰 

차이점은 다음과 같다. 


1) %g, %G 옵션이 없다.(생각해 보면 당연한 것이다) 

2) %f와 %e는 같다.(둘 다 부호,소수점,지수부의 유무에 관계없이 받아 

들인다. 



<예제4> 다음 프로그램의 실행결과를 적어 보아라. 


/* 출력 형태 실습 - 여러가지 수를 입력해 보고 출력형 */ 

/* 태를 예상하는 연습을 한다 */ 

#include 


main() 

float a; 

int b; 


printf("\n임의의 숫자(실수) 입력:"); 

scanf("%f",&a); /* 874563을 입력해보고, */ 

/* 0.04568을 입력해보고,*/ 

/* 756.355를 입력해보라 */ 

puts("당신이 입력한 수치를"); 

printf("고정소수점형식으로 출력하면 :%f\n",a); 

printf("부동소수점형식으로 출력하면 :%E\n",a); 


printf("\n임의의 양수를 입력하라 :"); 

scanf("%d",&b); /* 3654를 입력해 본다 */ 


printf("10진수==>8진수==>16진수\n"); 

printf("%d ==> %o ==> %X\n",b,b,b); 


printf("\n 끝낼려면 아무키나 누르시오."); 

getch(); 


제 2장에서는 기본적인 C의 입출력 함수와 수치형의 종류에 대하여 알아 

보았다. 여러분들께 자세히 전달하려고 노력하였으나, 혹시 애매한 부분이 

있을지도 모르겠다. 하지만 10번 읽으면 이해되지 않는 것이 없다고 했다. 

C언어는 기본 개념을 확실히 잡지 않으면 후에 가서 고생을 하게 되므로 

꼭 이번장의 내용을 이해하기를 바란다.(행운의 숫자가 7인데 7번 읽으면 

다 외우지 안을까 생각된다...) 



반응형

'IT > Programming' 카테고리의 다른 글

제 6장 - 배열과 포인터  (0) 2016.03.22
제 5장 - 함수 / 기억부류  (0) 2016.03.22
제 4장 - 연 산 자  (0) 2016.03.22
프로그래밍 기초 3  (0) 2016.03.22
제 1장 - C의 구조와 변수  (0) 2016.03.22
Comments