·출력함수


- 출력함수

 우선 출력함수는 저번에 사용한 printf가 있는데요, print안에 쓰는 포맷에대해 알아보겠습니다.

먼저 printf는 다음과 같은 형식으로 사용합니다. printf("포맷과 내용",변수명);

이때 포맷에는 각각의 자료형에 맞게 사용 해주면됩니다. int형일 경우 %d, double형일 경우 lf, float형일경우 f, 8진수와 16진수로 표현하고 싶을경우 %o,%x 문자 한글자일경우 %c, 문자열일경우 %s로 포맷을 지정해주면 됩니다.  그리고 굉장히 큰 수를 표현할 경우에는 수를 저장할때에 E를 활용하고 포맷도 %e로 써주면됩니다. 아래 코드를 보면서 확인해 보겠습니다. 

-------------------------------------------------------------------------------------------------------

#include <stdio.h>


int main()

{

int a = 10; 

double b = 3.14;

float c = 3.15;

char d = 3;

char e = 'Q';

char *f = "문자열";

// 정수형 : %d, double형 : lf, float형 : f, 문자 : %c, 문자열 :%s

printf(" a : %d\n a2 : %05d\n b : %lf\n c : %f\n d : %d\n e : %c\n f : %s\n",a,a,b,c,d,e,f);

}

-------------------------------------------------------------------------------------------------------



 

 결과 값을 확인해보면 정상적으로 출력이 된걸 확인 할 수 있습니다. 이때, d를보시면 char형임에도 불구하고 작은 범위의 숫자 표현도 가능했습니다. a2는 %05d로 포맷을 지정했는데 결과값을 보면 00010 으로 나오는데, 5자리 정수를 표현하고 앞에 빈자리는 0으로 채우라는 포맷입니다.


- 입력함수


입력함수에는 scanf가 있습니다. 형식은 printf와 비슷합니다. scanf("포맷",저장할주소); 아래 코드를 보면서 확인해보겠습니다.

-------------------------------------------------------------------------------------------

#include <stdio.h>

#pragma warning(disable:4996)

int main()

{

int a, b;

printf("a:");

scanf("%d", &a); // 변수앞에 &사용

printf("b:");

scanf("%d", &b);

printf("a+b: %d\n",a+b);

}

-------------------------------------------------------------------------------------------

Visual Studio 2013에서는 scanf를 쓰면 취약하다는 문구가 뜨면서 오류가 납니다.  scanf_s함수를 사용하거나, #pragma warning(disable:4996) 또는 #define _CRT_SECURE_NO_WARNINGS를 헤더파일 밑에 넣어주면 오류가 나지 않습니다. printf와 유사하지만 뒤에 변수앞에 &(엔퍼센트)를 붙여야 합니다. 저장할 주소를 입력 해야하기 때문에 &를 붙여줍니다. 문자를 입력받을때에는 &를 쓰지않습니다. 또한 scanf에서는 \n(줄바꿈문자)를 쓰지않습니다.



아래 코드처럼 따로따로 입력 받지 않고, 여러개를 한번에 입력 받을 수도 있습니다.

-------------------------------------------------------------------------------------------

#include <stdio.h>

#pragma warning(disable:4996)

int main()

{

  int a, b;  

        printf("a와 b를입력하시면 합이 출력됩니다. \n");

scanf("%d %d", &a, &b);

printf("a+b: %d\n",a+b);

}

-------------------------------------------------------------------------------------------





기본자료형(Basic Type)

1) 정수형

 - 위의 코드들 처럼 printf와 scanf에 %d 를사용합니다.

2) 부동소수형

 - 부동소수는 소수점이 움직인다는 말로, 부동소수 표기법은 근사치를 표기하기 위한 방법입니다. 큰 자료형 일수록 정밀도가 증가합니다. 정밀도는 숫자를 얼마나 정밀하게 표현하는가를 뜻합니다. printf 함수에 특별한 옵션이 없는 경우 기본적으로 소수점 6자리에서 반올림해서 출력합니다.

 - float과 double 비교

아래 코드는 x,y에 같은 소수점 16자리수를 넣고 16자리까지 출력하라는 코드입니다. 결과가 어떻게될까요?

-------------------------------------------------------------------------------------------

#incldue <stdio.h>

int main()

{

float x;

double y;

x = 1.23455678901234567;

y = 1.23455678901234567;

printf("float형 : %.16f\n double형 : %.16lf\n", x, y);

}

-------------------------------------------------------------------------------------------

둘 다 16자리까지 출력을 했지만, float형은 값을 정확하게 저장하지 못했습니다. double형이 float형보다 더 정밀하게 표현합니다.


3) 문자형 

위에서도 언급하였듯 char는 문자형 자료형과 정수형 자료형 둘 다 간주합니다. 정수형에서 char의 범위는 -128~127인데, 총 256개의 숫자와 문자가 표현 가능합니다. 문자는 하나하나 숫자가 정해져있습니다.

- ascii code(아스키 코드) : 숫자 값에 문자를 하나씩 대응시켜 놓은 코드입니다.

아스키표를 정리해놓은 사이트입니다. http://www.asciitable.com/


아래 코드는 char형으로 65를 선언하고 정수와 문자로 출력하는 코드입니다.

-------------------------------------------------------------------------------------------

#include <stdio.h>

int main()

{

char a = 65;

printf("정수 : %d\n문자 : %c\n", a,a);

}

-------------------------------------------------------------------------------------------

이처럼 정수로 출력할 때는 65가 나오지면 문자로 출력했을때는 알파벳 대문자 A가 출력됩니다.


아스키 코드표를 이용하면 영문 소문자를 대문자로 변환하거나 반대로 대문자를 소문자로 변환할 수 있습니다. 아스키 코드표를 보면 대문자 'A'가 65 소문자 'a'가97입니다. 32가 차이나는점을 이용해 소문자를 대문자로 바꾸는 코드를 짜봤습니다. 아래 코드는 영문 소문자를 입력하면 대문자로 변환하는 코드입니다. 

-------------------------------------------------------------------------------------------

#include <stdio.h>

#pragma warning(disable:4996)


int main()

{

char ch;

printf("영문 소문자를 입력하면 대문자로 변환됩니다 : ");

scanf("%c", &ch); // 숫자 계산을 해야하므로 &를 붙여줍니다.

printf("영문 대문자 : %c\n",ch-32); // 숫자 계산을하고난 후 출력은 문자로 해줍니다.

}

-------------------------------------------------------------------------------------------


- 배열 : 기본 자료형의 연속을 한번에 다루는 자료형으로 문자를 여러 개 묶어서 사용합니다.

char x[5]로 선언하게되면 char형이 char[0],char[1],char[2],char[3],char[4] 5개가 선언이됩니다. "LOVE"라는 문자열을 넣고싶다면 배열의 순서대로 넣어주면됩니다. 배열의 끝에는 널문자라고 불리는 '\0' 를 넣어줘야합니다. 문자열의 끝을 표시해주지 않으면 않으면 남는 배열의 크기만큼 쓰레기값이 뒤에 붙게됩니다. 아래 코드는 배열의 크기를 넉넉하게 선언하고, 널값을 주석처리 했을때의 코드입니다.

-------------------------------------------------------------------------------------------

#include <stdio.h>

int main()

{

char x[8]; // 배열을 8로 넉넉하게 선언

x[0] = 'L';
x[1] = 'O';
x[2] = 'V';
x[3] = 'E';
// x[4] = '\0'; // 널값을 주석처리
printf(x);
}

-------------------------------------------------------------------------------------------


위에 방법처럼 배열에 직접 한글자씩 넣어줄수도있지만, 번거롭다면 변수를 선언하면서 동시에 "="를 써서 초기값을 설정 하거나, String Copy의 줄임말인 strcpy함수를 쓰면 간편하게 배열에 문자열을 저장할 수 있습니다. 이때 strcpy함수를 사용하기 위해서는 <string.h> 헤더파일을 포함시켜야합니다.

-------------------------------------------------------------------------------------------

#include <stdio.h>

int main()

{

char x[5]="LOVE"; 

printf("%s\n",x);

}
-------------------------------------------------------------------------------------------

#include <stdio.h>

#include <string.h>

int main()

{

char x[5]; 

strcpy(x,"LOVE");

printf("%s\n",x);

}

-------------------------------------------------------------------------------------------


형 변환 혹은 타입캐스팅(Type Casting)

 계산을 할 때, 타입이 다를경우 형변환을 해줘야 합니다.

- 묵시적 형 변환 (implicit type conversion) : c언어 스스로 형 변환 수행하는 경우입니다. 아래와 같은 계산이 있을경우, 3은 정수이므로 float형으로 형변환 되어 계산됩니다.

-------------------------------------------------------------------------------------------

float x;

x = 3.14 + 3 ;

-------------------------------------------------------------------------------------------

- 명시적 형 변환 (explicit type conversion) : 사용자가 직접 형 변환을 붙여 직접 형 변환 수행하는 경우 입니다. 아래코드는 계산은 double형으로 하고 결과를 int형으로변환 하는 경우 입니다. 형변환 하면 소수점은 반올림하지 않고 버림하게됩니다.

-------------------------------------------------------------------------------------------

double x=1.2;
double y=3.9

int result = (int)x+y;

-------------------------------------------------------------------------------------------

- 형넓히기 : 작은자료형->더큰 자료형으로 확장되며 형변환

- 형좁히기 : 큰자료형->작은자료형 정보손실 발생->컴파일러에서 경고


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_1 

   스타일 C프로그래밍 저.김종훈,김종진 출.WellBook

   http://www.asciitable.com/




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

[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17
[C] 연산자  (0) 2016.12.16
[C] C 기본개념(2) 라이브러리와 변수  (0) 2016.12.12
[C] C 기본개념 및 실습환경  (0) 2016.12.07

+ Recent posts