Search

자료형, 변수, 전처리기, 입출력함수

자료형과 변수

변수란

정수, 실수, 문자 등의 자료값을 저장할 공간
물리적으로 메모리(RAM)에 존재
자료형, 이름, 값을 가짐. (이름은 프로그래머가 정의)
값은 메모리 안에 저장되어 있는 정보
변수는 선언된 자료형에 따라 변수의 저장공간 크기와 저장되는 자료값의 종류가 결정된다.
변수는 저장되는 값에 따라 변수값이 바뀔 수 있으며 마지막에 저장된 하나의 값만 저장한다.
변수 선언시
1.
특수문자, 공백 사용 X
2.
영문자 , 숫자, _ 사용
3.
int, void, return같은 키워드나 예약어는 변수명으로 사용할 수 없음
4.
변수명은 대소문자 구분
5.
변수명은 사용하는 의미를 담고 있는 것이 좋음
6.
변수 선언은 가장 앞쪽에 하는 것이 좋음
7.
(ex) int age = 20; double pi = 3.14;

자료형

정수자료형

C의 자료형은
1.
기본형
2.
유도형
3.
사용자정의형
정수 자료형의 기본 키워드는 'int' = integer의 약자
10, 4096, 313131 등 정수를 저장하는 자료형
(ex) int a = 5000; short a = 20; long c = 3131; long int c = 3131; (두 표현은 같음)
컴퓨터에 따라 int를 16비트로 지정하기도
정수자료형 추가
외울 필요는 없지만 대략적인 범위 알아두기
#include <stdio.h> // 사실 반드시 필요한 부분은 아니다. 널리 활용되는 라이브러리라서 익숙해지도록 사용 int main() // c언어의 main함수부터 실행시작 { char cnum = 128; // 128>127 : overflow int inum = 12345678901; // >2147483647 : overflow long lnum = 12345678901; // > 2147483647 : overflow long long llnum = 12345678901; // <9223372036854775807 : overflow 발생 X printf(cnum, inum, lnum, llnum); return 0; // 반드시 필요한 부분은 아니나 main함수의 끝임을 말한다.보편적인 틀 }
C
복사
overflow : 자료형이 나타낼 수 있는 수의 범위를 벗어나면 발생
변수를 선언만 하고 자료값을 저장하지 않으면 쓰레기값이 저장되고 오류가 발생한다.
Q. 다 long long으로 선언하면 오버플로우 안나지 않나요? A. 큰 메모리를 요구하는 자료형이므로 실제 사용되지 않는 무의미한 메모리가 너무 많이 할당될 수 있습니다(비효율적)

실수자료형(부동소수 및 문자 자료형)

부동소수형은 1.34 같은 실수 표현
flaot 유효자릿수 7
double 또는 long double 유효자릿수 15
(ex) float 형 변수에 값 저장을 위해서는 값 뒤에 F를 붙여 float 형 상수로 저장해야 함
float x = 1.34; // 동작은 하나 warning! 발생 가능 float a = 1.34F; double b = -516.18518; long double c = 3131313131.0;
C
복사

※ char 형 예제

#include <stdio.h> int main() { char c1 = 'a'; // 어떠한 변수가 아닌 문자 a그자체를 넣어준다는걸 말해줘야함 '' 사용 char c2 = 65; // A의 아스키코드값 char c3 = '\142'; // b의 8진수 아스키코드값 char c4 = '\x42'; // B의 16진수 아스키코드값 printf("문자 %c, %c, %c, %c\n", c1, c2, c3, c4); printf("수 %d, %d, %d, %d\n", c1, c2, c3, c4); return 0 }
C
복사
실행결과

전처리기와 입출력

전처리란

printf같은 함수 사용 위해서는 그런 함수들을 정의한 라이브러리를 사용해야함
컴파일 이전에 처리되는 문장 == 전처리문
컴파일러는 사용자가 작성한 코드를 컴파일 하기 전 전처리문에서 정의한 작업들을 먼저 수행함
C언어에서의 전처리문은 맨 앞이 #으로 시작 (ex. #include)
가장 많이 쓰이는 전처리 지시자 : include, define

전처리 지시자 종류

// 자세히 다루지는 않고 알아만 두기 #include // 파일처리 #define #indef // 형태정의 #if #ifdef #ifndef #else #elif #endif // 조건처리 #error // 에러처리 #pragma // 컴파일 옵션처리
C
복사

전처리 지시자 include와 define

include

stdio.h 등의 헤더파일과 같은 외부 파일 포함 시키는 전처리 지시자
디렉토리 포함도 가능
사용법
1.
<> : C 에서 제공하는 표준 헤더파일 포함시 ex. #include <stdio.h>
2.
"" : 사용자가 직접 작성한 헤더 포함시 ex. #include "test.h"

define

상수나 함수를 단순화하거나 특정 상수를 정의하는 전처리 지시자
사용법
1.
상수 정의 : #define PI 1.34
2.
함수 정의 : #define ADD (x) ((x) = (x) + 1 ), #define MAX(m, n) ((m)>(n)?(m):(n))

입출력

출력함수 printf

지시자 #include <stdio.h> 로 stdio.h 헤더파일을 삽입해야 사용 가능
형식 문자열과 출력 목록 두개의 인자로 이루어짐
printf("%d 더하기 %d는 %d 입니다.", a, b, a+b) // ""안이 형식 문자열 뒤의 변수들이 출력 목록
C
복사
형식 문자열 구성
1.
일반문자
2.
이스케이프 문자(탈출문자) : \n, \t등
3.
형식지정자 : 자료형에 따라 %d, %f, %c, %s 등

형식지정자

1.
%d, %i : 10진수
2.
%o : 8진수, 앞부분에 숫자 0 붙이려면 %#o
3.
%x : 16진수 소문자로 (앞에 0x붙이려면 %#x)
4.
%X : 16진수 대문자로 (앞에 0X붙이려면 %#X)
5.
%f, %lf : 실수 출력. 기본적으로 소수점 6자리까지 출력(초과시 그 뒤 숫자는 반올림)이나 지정 가능
printf("%10d\n", 123456); // 폭은 10으로, 오른쪽 정렬
C
복사
printf("%-10d\n", 123456); // 폭은 10으로, 왼쪽 정렬
C
복사
printf("%1.f\n", 1.3); // 소수점 한자리까지 출력
C
복사
printf("%10.1f\n", 1.3); // 폭 10, 오른쪽 정렬, 소수점 한자리까지 출력
C
복사
#include <stdio.h> int main() { int num = 65; float pi = 1.34; printf("%%c = %c\n", num); printf("%%d = %d\n", num); printf("%%i = %i\n", num); printf("%%o = %o\n", num); printf("%%x = %x\n", num); printf("%%X = %X\n\n", num); printf("%%f = %f\n", pi); printf("%%lf = %lf\n", pi); return 0; }
C
복사
#include <stdio.h> int main() { printf("%s\n", "Hello World!"); printf("%20s\n", "Hello World!"); printf("%-20s\n", "Hello World!"); printf("%20.3s\n", "Hello World!"); printf("%-20.3s\n", "Hello World!"); return 0; }
C
복사

입력함수 scanf

대표적인 입력함수
#include <stdio.h>로 stdio.h 헤더파일 삽입해야 함
형식지정자는 printf와 같다
입력 변수 목록은 입력값이 복사 저장되기 위해 입력되고자 하는 변수의 주소를 알아야하기 때문에 주소연산식 &를 붙여준다. 그렇지 않으면 오류 ㅂㅏㄹ생
형식문자열과 입력을 맞춰줘야한다
ex. %d %d %d → 10 20 30
%d ,%d, %d → 10, 20, 30
enter키로 입력 완료
scanf("%d %d %d", &a, &b, &c);
C
복사

getchar과 putchar

#include <stdio.h>로 stdio.h 헤더파일 삽입해야 함
문자 '하나' 입력할 경우 편리하게 사용 가능한 매크로 함수
#define _CRT_SECURE_NO_WARNINGS // scanf 오류 방지 상수이다(vscode환경에서 오류 발생하기도 하기 때문에) #include <stdio.h> int main() { char a = getchar(); // 입력문자를 변수 a에 저장 putchar(a); // 변수 a 출력 return 0; }
C
복사
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int month, day; printf("생일(월,일) 입력하시오 -> "); scanf("%d %d", &month, &day); printf("당신의 생일은 %d월 %d일 입니다.\n", month, day); return 0; }
C
복사