자료형과 변수
변수란
•
정수, 실수, 문자 등의 자료값을 저장할 공간
•
물리적으로 메모리(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
복사