* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제2장 데이터형, 선언 및 출력 *
이 장의 강의 내용… 데이터 형 산술 연산자 수치 결과 출력 변수와 선언
시작하기 전에 #include <stdio.h> int main() { int year ; year = 2001; 기본용어 함수(Function)와 인자(Argument) 변수(Variable)와 데이터형(Data Type) 문장(Statement) 선행처리기(Preprocessor)와 헤더 파일(Header File) #include <stdio.h> int main() { int year ; year = 2001; printf(“Welcome to CNU,”); printf(“Chungbuk National University %d.\n”, year); return 0; } 실행 결과 ?
시작하기 전에 [해설] #include <stdio.h> /* 선행처리기가 stdio.h 화일을 포함시킴 */ int main() /* 실행은 항상 main 함수에서 시작*/ { /* main 함수의 정의(Definition) 시작 */ int year; /* 정수형 변수의 선언문 */ year = 2001; /* 정수형 변수에 대한 할당문(Assignment) */ printf(“Welcome to ICC,” ); /* 출력문 */ printf(“Information Culture Center %d.\n”, year); /* 출력문*/ return 0; /* main 함수의 반환문 */ } /* main 함수의 정의 끝 */
제 1 절. 기본 개념 상수 ( Constant ) 예) #define PI 3.14 변수 (Variable) 제 1 절. 기본 개념 상수 ( Constant ) 프로그램이 수행되기 전에 값이 결정된다. 프로그램이 수행되는 동안 값이 변하지 않고 유지된다. #define문으로 정의하며 선행처리기에 의해 확장된다. 가능하면 의미 있는 이름을 사용하도록 한다. 관습적으로 대문자를 사용한다. 예) #define PI 3.14 변수 (Variable) 프로그램의 수행 도중 새로운 값을 저장할 수 있다. 모든 변수는 사용하기 전에 적절한 데이터 형으로 선언되어야 한다. 관습적으로 소문자를 사용한다. 예) int sum; sum = 0;
데이터 형 C의 기본 데이터 형 문자형, 정수형, 실수형 (부동 소수점형, 배 정밀도형) char(1byte) 문자형 * 07/16/96 데이터 형 C의 기본 데이터 형 문자형, 정수형, 실수형 (부동 소수점형, 배 정밀도형) char(1byte) unsigned char(1byte) short int(2byte) unsigned char(2byte) int(4byte) unsigned int(4byte) long int(4byte) unsigned long int(4byte) float(4byte) double(8byte) 기본 데이터형 문자형 실수형 정수형 *
데이터 형 정수형(Integer Types) 예) 2, -23, 2456,…. 일반적으로 사용중인 컴퓨터의 워드(Word) 크기이다. 예) IBM PC의 경우 2 bytes(16 bits) -215 ~ +215 - 1 (즉, -32768 ~ +32767) 변수의 선언과 초기화 예) int sum; int rows, columns; 예) int sum = 0; int rows = 3, columns = 4; 비트(Bit), 바이트(Byte), 워드(Word) 비트(Bit) 바이트(Byte) : 1 byte = 8bit 워드(Word) : 8bit, 16bit, 32bit, …
데이터 형 정수형(Integer Types) 정수형 데이타의 출력 printf() 문 내에 형식 표시자(Format Specifier) 사용 %d 정수형 데이타를 10진수(Decimal)로 출력 %o 정수형 데이타를 8 진수(Octal)로 출력 %x 정수형 데이터를 16진수(Hexadecimal)로 출력 #include <stdio.h> int main() { int num = 23; printf(“Dec = %d, Oct = %o, Hex = %x\n”, num, num, num); return 0; } [실행결과] Dec = 23, Dct = 27, Hex = 17
데이터 형 정수형(Integer Types) 그 외의 정수형 short, long, unsigned와 같은 키워드를 int 앞에 붙임 short int 또는 short long int 또는 long unsigned int 또는 unsigned 부호를 무시함으로써 양수의 범위로 2배로 사용 예) 2-byte 정수형에서 unsigned int : 0 ~ 65535 short <= int <= long (2 bytes) (2 or 4 bytes) (4 bytes) 여러 가지 기종에서의 정수형 데이터의 크기 (단위 : 바이트) 데이터형 DEC VAX Macintosh (Think C) IBM PC (MSC, BC,VC) ANSI C Minimum short 2 int 4 2(4) long
데이터 형 정수 한정자 정수 한정자 long, short, unsigned : int 선언문 앞에 붙여 표현할 수 있는 정수 숫자의 크기를 정하는 것 2Bytes Data Type Storage Number Range Integer Unsigned -32768 to 32767 (a total of 65,536 numbers) 0 to 65,535
데이터 형 정수 한정자 저장 크기 알아내는 방법 : sizeof() 연산자 예제 #include <stdio.h> 데이터 형 정수 한정자 저장 크기 알아내는 방법 : sizeof() 연산자 예제 #include <stdio.h> void main(void) { long num0; int num1; printf(“Bytes of storage used by a long integer : %d”, sizeof(num0) ); printf(“\nBytes of storage used by an integer : %d”, sizeof(num1) ); }
데이터 형 오버플로우 에러 오버플로우 에러(Overflow Error) 데이터 형 오버플로우 에러 오버플로우 에러(Overflow Error) 프로그램 수행 시, 데이터 형이 허용하는 범위를 넘으면 발생 충분한 범위를 허용하는 데이터 형으로 선언해야 함 long 데이터 형은 큰 수를 저장할 수 있으나, 그만큼 많은 메모리 영역을 차지하므로, 사용할 데이터 형의 허용 범위와 메모리 공간이 효율성을 고려하여 데이터 형을 결정해야 함 [예제 ] 오버플로우 에러 #include <stdio.h> int main() { short i = 32767; printf(“%hd %hd %hd\n”, i, i+1, i+2); /* %hd : short int 형으로 출력 */ } [실행결과] 32767 -32768 -32767
데이터 형 오버플로우 에러 (예) 32767: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -32768: 1 -32767: 1 1 각 비트별 가중치 : -215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 7: -8: -7: 예) 1 1 1 = -23*0 + 22*1 + 21*1 + 20*1 = 4+2+1= 7 1 = -23*1 + 22*0 + 21*0 + 20*0 = -8 1 1 = -23*1 + 22*0 + 21*0 + 20*1 = -8+1= -7 -23 22 21 20
데이터 형 문자형(Character type) 문자를 저장하는데 사용 표준 ASCII 코드 : 0 ~ 127 알파벳 0에서 9까지 10개의 숫자 + $ . , - !와 같은 특수기호 문자상수 : 단일 따옴표 안에 포함된 문자나 숫자, 특수기호 (예) ‘A’ ‘$’ 1byte 크기 : ASCII 코드를 저장하는데 충분
데이터 형 문자형(Character type) 문자형의 선언과 할당 예) char c; char ch = ‘A’; 예) char grade; grade = 65; 옳음(‘A’의 ASCII 값이 65) grade = ‘A’; 옳음 grade = A; 틀림(A는 변수) grade = “A”; 틀림(A는 스트링)
데이터 형 문자형(Character type) 문자형의 출력 %c 문자로 출력 (%d 를 사용하면 ASCII 값을 출력) [예제] #include <stdio.h> int main() { char ch; printf(“Please enter a character.\n”); scanf(“%c”, &ch); printf(“ASCII code for %c is %d.\n”, ch, ch); return 0; } [실행결과 ] Please enter a character. A ASCII code for A is 65.
데이터 형 문자형(Character type) [예제 ] 각 문자의 아스키 코드 값을 출력하는 프로그램 #include <stdio.h> int main() { int ch; for (ch=0; ch < 128; ch++) printf(“ASCII code for %c is %d.\n”, ch, ch); return 0; } [실행결과]
데이터 형 문자형(Character type) 예외 문자 (Escape Sequence) 역슬래쉬, ’\’와 몇몇 문자들이 조합되어 특별한 의미를 가지는 문자를 표현 Sequence Meaning \n newline or line feed \t tab \b backspace \r carriage return \f form feed \\ backspace(\) itself \’ single quote(‘) \” double quote(“) \ ooo Octal value(o is an octal digit) \xhh Hexadec. Value(h is a hexadec. digit) [예제 ] 부분 프로그램 printf(“He said, \” a \\ is a backslach.\”\n”); [실행결과] He said, ” a \ is a backslash.”
데이터 형 부동소수점 및 배정밀도 수 지수 표현 소수점(.)이 있는 양수 또는 음수 +, - 부호를 포함할 수 있음 쉼표(,), 달러($) 표시와 같은 특수한 기호는 사용 불가 최대값과 최소값이 제한되어 있음 컴파일러가 확보하는 저장공간의 크기에 따라 다름 일반적으로 배정밀도 수의 크기는 부동소수점의 두 배 예 : +10.625, 5., -6.2, 3251.92, 0.0, -6.67, +2. 지수 표현 부동소수점 수와 배정밀도 수로 매우 큰 수나 매우 작은 수를 표현할 때 간결한 형태로 표현할 수 있도록 함 십진표현 지수표현 1625. 1.625e3 63421. 6.3421e4 .00731 7.31e-3 .000625 6.25e-4
데이터 형 부동소수점 형 데이타의 선언 부동소수점 형 데이타의 출력 float average = 0.0; double sdev = 0.0; 부동소수점 형 데이타의 출력 % f decimal notation 형태로 출력 % e exponential notation 형태로 출력 [예제] #include <stdio.h> main() { float average = 32000.0; printf(“%f can be written %e\n”, average, average); return 0; } [실행결과] 32000.00000 can be written 3.200000e+004
산술 연산자 덧셈, 뺄셈, 곱셈, 나눗셈에 사용되는 연산자 산술연산자는 두 개의 연산 항(operand)을 필요로 하는 이항 연산자 혼합형 수식 : 연산 항의 데이터 형이 다른 수식 혼합형 수식일 경우 결과 값의 데이터 형 모든 연산 항이 정수이면 정수 연산 항 중 어느 것이라도 부동소수점 또는 배정밀도 값이면 배정밀도 수 기 능 연산자 덧 셈 + 뺄 셈 - 곱 셈 * 나눗셈 /
산술 연산자 정수 나눗셈 모듈러(나머지) 연산자 : % 단항연산자 : - 정수와 정수의 나눗셈 연산 결과 값은 정수 결과 값이 정수이기 때문에 소수 부분은 버림 예) 15/2 = 7 17/5 = 3 모듈러(나머지) 연산자 : % 두 정수를 나눈 나머지를 구하는 산술 연산자 모듈러 연산자는 정수에서만 사용 9 % 4 = 1 17 % 3 = 2 1 % 2 = 1 단항연산자 : - 수치 연산 항 앞에 붙어 그 수의 반대 부호로 바꿈
산술 연산자 산술 연산자를 포함하는 식을 쓸 때 규칙 연산자 우선 순위 및 결합성 두 개 이상의 이항 산술 연산자 기호는 결코 이웃 하여 놓일 수 없음 괄호는 그룹을 형성하기 위해 사용되며, 괄호 안의 모든 식들이 먼저 계산됨 괄호는 곱셈을 대신할 수 없음. 예) 3(4+5) 3*(4+5) 연산자 우선 순위 및 결합성 예 8 + 5 * 7 % 2 * 4 8 + 35 % 2 * 4 8 + 1 * 4 8 + 4 = 12 Operator Associativity unary - right to left * / % left to right + - left to right 계산순서
수치 결과 출력 산술 연산을 계산하고 그 결과를 출력하는 방법 예제 printf()함수를 사용 제어 문자열 : 어디에 어떤 결과가 출력되도록 할 것인가를 함수에게 알려 줌 값 : 출력되기를 원하는 값 예제 printf(“6과 15의 합은 %d입니다.”, 6+15); 결과 : 6과 15의 합은 21입니다. printf(“%f와 %f의 합은 %f입니다.”, 12.2, 15.754, 12.2 + 15.754); 결과 : 12.200000와 15.754000의 합은 27.954000입니다. printf(“알파벳의 첫 번째 글자는 %c입니다.”, ‘a’); 결과 : 알파벳의 첫 번째 글자는 a입니다.
수치 결과 출력 프로그램 #include <stdio.h> void main(void) { printf(“%f plus %f equals %f\n”, 15.0, 2.0, 15.0 + 2.0); printf(“%f minus %f equals %f\n”, 15.0, 2.0, 15.0 - 2.0); printf(“%f times %f equals %f\n”, 15.0, 2.0, 15.0 * 2.0); printf(“%f divided by %f equals %f\n”, 15.0, 2.0, 15.0 / 2.0); }
수치 결과 출력 형식출력 : 필드 폭 변경자 프로그램 1 프로그램 2 #include <stdio.h> void main(void) { printf(“\n%d”, 6); printf(“\n%d”, 18); printf(“\n%d”, 124); printf(“\n-----”); printf(“\n%d”, 6+18+124); } 프로그램 2 #include <stdio.h> void main(void) { printf(“\n%3d”, 6); printf(“\n%3d”, 18); printf(“\n%3d”, 124); printf(“\n-----”); printf(“\n%3d”, 6+18+124); } 6 18 124 ----- 148 6 18 124 ----- 148 [결과] [결과]
변수와 선언 컴퓨터에서 데이터를 사용하는 방법 변수의 정의 단순히 프로그래머가 컴퓨터 저장 공간에 지어준 이름 메모리 주소 대신 기호 이름이 사용되며, 이 기호 이름을 변수라고 함 1321 1322 Address : Storage for one integer 2649 2650 1321 1322 Address : Storage for one integer 2649 2650 45 46 result num1 num2
변수와 선언 변수의 이름을 정하는 규칙 반드시 문자나 밑줄로 시작해야 하며, 문자나 밑줄, 숫자들을 포함할 수 있음 키워드를 사용해서는 안됨 길이가 31개의 문자를 넘어서는 안됨
변수와 선언 선언문 정의문으로 사용되는 선언문의 예 int distance = 26; 각 변수에 저장될 수 있는 데이터형을 정의하고 이름을 붙이는 것 함수 내에 있는 선언문은 함수의 시작을 알리는 중괄호 바로 다음에 나타나며 세미콜론으로 끝나야 함 선언문의 일반적인 형태 function name() { int distance; float firstnum; other statements; } 정의문으로 사용되는 선언문의 예 int distance = 26;
변수와 선언 프로그램 #include <stdio.h> void main(void) { float grage1; float grade2; float total; float average; grade1 = 85.5; grade2 = 97.0; total = grade1 + grade2; average = total/2.0; printf(“The average grade is %f\n”, average); }
변수와 선언 프로그램 #include <stdio.h> void main(void) { char ch; printf(“\nThe character stored in ch is %c.”, ch); ch = ‘m’; printf(“\nThe character now stored in ch is %c.”, ch); }
일반적인 프로그래밍 오류 프로그램에서 사용되는 모든 변수를 선언하는 것을 잊는 경우 선언된 것과 다른 형태의 데이터 형을 저장하는 경우 int i = 1.5; 변수에 값을 대입하기 전에 변수를 사용하는 경우 정수 값을 잘못 나누는 경우 i = 5/0; 동일한 수식에서 만들어 낼 효과를 완전히 이해하지 못한 채 여러 데이터 형을 섞어 사용하는 경우 printf()함수내의 제어문자열을 쉼표 앞에서 이중 따옴표로 닫지 않는 경우 printf(“Hello %d, j); printf()함수내의 인자들을 쉼표로 구분하는 것을 잊는 경우 printf(“%d %d”, i j);
요약 C의 기본 데이터 형(정수형, 부동소수점형, 배정밀도형, 문자형) printf()함수를 이용한 데이터 출력 변수의 선언 선언문의 역할 sizeof 연산자의 역할