Part 03 상수, 변수, 자료형 1
이장의내용 자료형이란무엇인가? 상수와변수 정수형 부동소수형 문자형 2
3.1 자료형이란무엇인가? 3
자료형이란무엇인가? 자료형 (data type) 프로그램에서표현혹은저장하는데이터의종류혹은유형 C 언어의자료형 C 언어는 1 개의문자형, 4 개의정수형, 3 개의부동소수형을제공 4
3.2 변수 /3.3 상수 5
변수 변수 (variable) 데이터를저장하는데사용되는기억장소의이름이다. 사용전변수선언 변수이름과저장할데이터값의유형 ( 자료형 ) 을지정해야한다. 자료형변수이름 ; char c; short sum; 6
상수 상수 (constant) 프로그램이실행되는동안값이변하지않는데이터 정수형상수, 문자형상수, 부동소수형상수로구분할수있다. 예 'A', 'x' 는문자형상수 -10, 0, 55는정수형상수 3.14, 300.25는부동소수형상수 7
식별자 식별자 변수, 상수, 함수등에대한이름 문자와숫자로구성되며첫번째글자는반드시문자 밑줄문자 _ 도하나의문자로사용될수있음 대소문자를구별 8
변수의초기화 변수를선언하면서그초기값을정할수도있다 변수초기화는반드시해야하는것은아니고선택사항 int sum = 0; 9
변수의초기화 10
대입문을이용한변수값변경 대입문 (assignment statement) 변수에새로운값을저장함으로써기존값을변경한다. 대입연산자 (=) 의오른쪽식이계산되고, 그결과값이왼쪽변수에저장된다. sum = 10; 11
score.c 12
변수값변경과정 13
변수값증가 대입문오른쪽과왼쪽에나타난변수는다른의미 대입문오른쪽변수는그변수로부터읽어온값을의미 대입문왼쪽변수는그변수에저장 ( 쓰기 ) 의미 sum = sum + 1; 변수에접근 ( 읽기 ) 은그값을변경시키지않음. 변수에대입 ( 쓰기 ) 은이전데이터를새로운데이터로대체 14
15
이름상수 이름상수 (named constant) 상수에이름이부여되어있는것. 이름상수에는식별자가부여되어있으므로이름상수는변수와유사하지만상수이므로값을변경할수없다. 예약어 const const int MAX_STUDENT = 20000; 16
3.4 자료형 17
정수형 크게 4 개의정수형 char, short, int, long 18
정수표현 8 비트를이용한양수와음수표현예 첫번째비트는부호비트로서, 0은양수 1은음수를나타낸다. 나머지 7개의비트들은수의크기를나타낸다. 음수표현 연산의효율성을위해수의크기를 2 의보수형태로나타낸다. 19
변수에기억공간할당 기억공간할당 정수형종류에따라해당변수에다른크기로할당 sizeof() 연산자 자료형의크기를나타내는연산자 20
21
정수형오버플로우 정수형오버플로우 정수형에서저장할수있는수보다더큰수나더작은수를저장 예 32 비트 int 가장큰수 (2 31-1 = 2,147,483,647) 에 1 을더하면어떻게될까? 질문 long budget = 237000000000000L; 22
unsigned 정수형 0 과양의정수만을나타낼수있는 unsigned 정수형 음수를표현할수없는대신에나타낼수있는양의정수가두배 23
부동소수형 C 언어의 3 개의부동소수형 float, double, long double 부동소수점 (floating-point) 이란? 부동소수점에서점 (point) 은소수점을말하며, 이소수점이수의어느위치에도올수있으므로부동소수점이라고한다. 24
문자형 각문자에고유번호를부여한코드를사용하여표현한다. C 에서는 ASCII 코드를사용한다. ASCII(American Standard Code for Information Interchange) 128 개의문자를 7 비트를사용하여표현 (8 비트로확장됨 ) 대문자 (A, B, C 등등 ) 소문자 (a, b, c 등등 ) 구두점 (punctuation)( 마침표, 세미콜론, 쉼표등등 ) 숫자 (digit)(0 에서 9 까지 ) 공백문자 ( ) 특수문자 (&,, \ 등 ) 제어문자 열복귀 (carriage return), 널 (null), 문서 - 끝 - 표시자 (end-of-text) 액센트 (accent) 가있는문자 25
ASCII 코드표 표 3.1) ASCII 코드표 26
27
28
문자형관련입출력함수 문자형관련입출력함수 getchar() putchar() int getchar() 매개변수가없으며한문자를읽어그문자의 ASCII 값을반환한다. 파일끝에도달하면 EOF 를반환한다. <stdio.h> 파일을 #include 해야한다. int putchar(int c) 한글자를받아화면에출력하고출력한문자의 ASCII 값을반환한다. 오류시에는 EOF 를반환한다. <stdio.h> 파일을 #include 해야한다. 다음예제프로그램 char.c 1 키보드로부터한개문자읽기 2 문자로출력 3 ASCII 값을보기위해정수로출력 29
char.c 30
getchar, putchar: 문자입출력 표준입력 a... 문자 getchar 'a' 대문자로변환하는함수 toupper() 문자 'A' putchar...a 표준출력 31
32
이스케이프시퀀스 이스케이프시퀀스 (escape sequence) 백슬래쉬문자 (\) 로시작하고, 다음문자는특별한방식으로해석 예를들어이중인용부호문자 (") 출력 : \" 33
34
4.2 표준입출력 35
표준입출력 표준입출력 (standard input/output) 거의모든컴퓨터가기본적으로수행하는입출력 입출력모두문자열로구성되어있다고간주함 표준입력은통상키보드, 표준출력은통상모니터를나타냄 표준입출력라이브러리 C 언어는표준입출력을다루는명령어를제공하지않고함수를제공하고있음 함수의인터페이스 (interface) 를표준에서정의하고있을뿐, 함수를구현하는방법은시스템마다다를수있음 이러한표준입출력함수는라이브러리로제공됨 36
표준라이브러리 라이브러리 (library) 미리작성해둔프로그램 표준라이브러리 (standard library) 컴퓨터시스템이달라도같은기능 (same functionality) 을같은방식 (same interface) 으로사용할수있도록작성해둔라이브러리 표준입출력라이브러리 (standard input/output library) 표준입출력을다루는프로그램 ( 함수 ) 집합 37
printf: 형식에맞는출력 printf 포맷스트링은데이터변환을지시함 정수 i 2 %d 문자열 "2" 3.14 실수 f %f 문자열 "3.140000" 문자 c '5' %c 문자열 "5" 38
printf 포맷스트링 자료형변환규칙을규정하는문자열 printf 의첫번째인수로사용됨 39
printf 출력폭지정 포맷스트링에서 % 다음에양의정수를기입하여출력폭지정 실행결과 : i = 2 f = 3.141593 c = 5 10 칸 40
printf 정밀도지정 포맷스트링에서 % 와 f 사이에 ( 출력폭이지정된경우, 출력폭다음에 ) ". 양수 " 형태로정밀도지정 실행결과 : pi = 3.141593 pi = 3.14 pi = 3.141592653590 10 칸 41
scanf: 형식에맞는입력 주소연산자 & 를사용한점에주의! scanf 포맷스트링은문자열을데이터로변환함 문자열 "27" 정수 n %d 27 42
scanf 에서주의할점 주소연산자 (address-of operator) & 다음 scanf 에서두번째인수에주의 scanf("%d", &n); 표준입력에서변환한값을저장할장소를알아야하기때문에변수 n 의주소 (&n) 을두번째인수로사용함 주소연산자를누락시키면실행시간오류 포맷스트링 %c 의특이함 포맷스트링 %c 는공백을건너뛰지않음 포맷스트링에공백이하나라도있으면여러공백문자에대응함 scanf("%d%c", ) scanf("%d %c", ) 포맷스트링 %c 를제외하고는모두공백을건너뜀 scanf("%d%d", ) scanf("%d %d", ) 43
scanf: 프롬프트를사용한버전 바로이것이프롬프트! 입력할내용을설명해준다. 44
scanf 포맷스트링 TIP: double 타입으로입력받아야할경우에는 %f 대신 %lf 를사용한다. 45
gets, puts: 줄단위입출력 C99 에서는 const int 로배열크기선언이가능함 실행결과 : 사용자가입력한 \n puts 가출력한 \n line 에는여기까지만저장됨 (\n 은제외됨 ) 46
gets, puts 주의점 줄바꿈문자처리 gets 는 \n 을떼고 \0 을붙여준다. puts 는 \n 을문자열출력끝에자동으로붙여준다. 주의 : fgets, fputs 는다르게동작한다. 이전예에서 gets 처리후 line[256] 상황 버퍼오버런 (buffer overrun) 버퍼 ( 임시저장소 ) 의범위를넘어섬 gets 와 puts 는버퍼오버런의위험이있음 fgets, fputs 를 사용하는것이권장됨. 47
프로그래밍실습 48
프로그래밍실습 2 2. 5 의배수를순서대로계산하여프린트하고그합을계산하여프린트한다. (1) int 변수 i 를선언하고 0 으로초기화한다. 이변수를 5 씩증가하면서 50 까지의 5 의배수를프린트하는프로그램을작성하라. int main( ) { int i; } (2) 실습 1 의프로그램을확장하여 0 부터 50 사이의 5 의배수들의합을계산하여프린트하는프로그램을작성하라. 49