컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기
chapter 02. Simple C Program 2.7 혼합 연산(mixed operation) 1. 연산 시 수행의 변화 - 연산 에서 서로 다른 자료형을 사용하는 경우, 보통 묵시적인 형변화(implicit type conversion)이 자동으로 이루어 진다. float a; a = ‘A’ + 7; - 문자와 숫자의 연산은 수형이 맞지 않아 수형변화가 이루어 진다. - 낮은 수형이 높은 수형의 데이터 형으로 변환된다. - 우변의 결과식은 정수형이다. 그러나 좌변의 자료형은 우변의 수형보다 그 범위가 크므로 좌변의 형으로 변환되어 저장된다. - 그러므로 결과값은 72.000000의 값을 갖는다. char < short, int, long < float < double
Ex13) int a; char ch; float b; a = 5. 7 + 4. 6;. /. 5. 7 + 4. 6은 10 Ex13) int a; char ch; float b; a = 5.7 + 4.6; /* 5.7 + 4.6은 10.3이다. 정수형에 저장될 때는 소수점 이하는 절삭 */ ch = ‘A’ + 7; /* ‘A’는 정수형으로 바뀌어 연산수행 (65 + 7) */ b = 3 + 8; /* 정수형 11이 b의 형으로 변환되어 저장된다. */ printf(“a = %d, ch = %c, b =%f\n”, a, ch, b); a = 5.7 + 7 / 2; /* 7/2 선행, 정수형/정수형의 결과는 정수형(3) */ /* 부동 소수점형 + 정수형은 부동 소수점형으로 바꾸어 연산(8.7)*/ /* 이를 정수형 변수에 기억시키므로 8 이라는 값만 저장된다. */ printf(“a = %d\n”, a);
2.8 케스트 연산자(cast operator : 형 변환 연산자) 형변환 연산자는 데이터형을 기술하여 강제적으로 형변환하는 방식을 취한다. int a; float b = 7.8; a = (int) b; 선업된(할당된) 기억 장소를 다른 형의 기억 장소로 변경하고자 할 때 사용 ex14) int a = 5, b =3, c, d; float x, y; c = (int) 5.7 + (int) 4.6; d = 5.7 + 4.6; printf(“c = %d, d = %d \n”, c, d); x = a / b; y = (float) a / (float) b; printf(“x = %f, y = %f \n”, x, y);
3.1 2 진수, 8 진수(0으로 시작), 10 진수 , 16 진수(0x로 시작) chapter 03. 데이터 표현 방식의 이해 3.1 2 진수, 8 진수(0으로 시작), 10 진수 , 16 진수(0x로 시작) 2 진수 8 진수 10 진수 16 진수
3.2 데이터 표현 단위 ( bit, byte) - I 2 바이트 1 바이트 1 비트
3.2 데이터 표현 단위 ( bit, byte) – I Ex)
3.3 8진수 10진수 16진수 계산하기 Ex) 0xa7 = 167 0x43 = 67 032 = 26 = 24 032 = 26 = 24 int a = 167; printf(“%d %o %x\n”, a, a, a);
3.4 수의 표현 방식 - I 모든 정수의 가장 왼쪽에 있는 비트는 부호 비트이다. 정수 + 1에 할당된 메모리 공간 데이터 크기 표현 부호비트 : 양수는 0, 음수는 1 ( +, - )
3.4 수의 표현 방식 - II 음수를 표현할 때에는 2의 보수 체계를 기억해야 한다. 정수 + 1에 할당된 메모리 공간 +5 1의 보수 1을 더한다. -5 Ex) 다음을 10진수로 나타내어라. 01001111 11110000
chapter 02. Simple C Program 2.9 논리 연산자 (!:NOT, &&:AND, ||:OR) ! : 참이면 거짓, 거짓이면 참 && : 모두 참 일 때만 참 ||: 둘 중 하나라도 참이면 참 ex15) main() { int a=5, b=0; printf(“참 = %d\n”, a||b); printf(“거짓 =%d\n”, a&&b); }
chapter 02. Simple C Program 2.9 논리 연산자 (!:NOT, &&:AND, ||:OR) ex16) main() { int p, x=3, y=4, z=0; p=x+3 || y-4; printf(“%d\n”, p); p=y-3 || z; printf(“%d\n”, p); p=x>y && y>=0; printf(“%d\n”, p); }
chapter 02. Simple C Program 2.10 비트 논리 연산자 : 2진수로 변환하여 비트 별로 논리 연산을 수행한다. : &연산이 | 연산보다 우선 순위가 더 높다. : !연산이 & 연산보다 우선 순위가 더 높다. : 논리보다 비트 연산이 우선 순위가 더 높다. Ex17) int x = 7, y = 9; x & y = ? x | y = ? x^y = ? ~x = ?
2.11 기타 연산자 : 선택 연산자, 쉬프트 연산자, sizeof 연산자; 1. 선택 연산자 ( 논리식 & 관계식) ? 실행문(1) : 실행문(2) : 논리식 & 관계식이 참이면 실행문(1)을, 거짓이면 실행문(2)를 실행한다. Ex18) int a=6, b =7, max; max = (a>b) ? a : b; printf(“MAX = %d\n”, max);
2. 쉬프트(shift) 연산자 : 정수형 자료에만 사용할 수 있다. : 좌측으로 비트 이동 시 빈자리에 삽입되는 비트는 항상 0 이고, 우측 이동 시 부호 비트와 동일한 비트가 삽입된다. : 좌측 쉬프트는 정수의 곱셈에, 우측 쉬프트는 정소의 나눗셈에 응용된다.
Ex 19) #include <stdio.h> int main(void){ int a = 1, b =-1; a <<=3; printf(“%d\n”, a); b <<=3; printf(“%d\n”, b); b >>=3; return 0; }
- sizeof 연산자는 괄호 안의 인수에 대해 할당하는 기억 장소의 크기를 바이트 단위로 되돌려 준다. 이때 인수로서는 정수형 상수, 변수, 데이터 형 구조체 등이 올 수 있다. 즉, 인수에 대해서 컴파일러가 할당한 기억 장소의 크기를 바이트 단위로 변수 a에 되돌려 준다. a = sizeof(인수); Ex 20) int a; float b; char ch; double c; printf("변수 a의 기억 장소의 크기 : %d\n", sizeof(a)); printf("변수 b의 기억 장소의 크기 : %d\n", sizeof(b)); printf("변수 c의 기억 장소의 크기 : %d\n", sizeof(c)); printf("변수 ch의 기억 장소의 크기 : %d\n", sizeof(ch));
chapter 04. 표준 입출력 함수
4.1printf( )와 scanf( ) 4.1.1 printf(printf formatted) : 데이터를 원하는 형탤로 서식에 맞추어 화면에 출력 1. 형식 : 인수들은 서식 문자열 내의 변환 문자의 형태로 바꾸어 출력 printf(“서식 문자열”, 인수들); ex) printf(“%d, %f, %c, %o, %x”, a, b, cd, c, d); printf(“%d, %f, %c, %o, %x\n”, a, b, cd, c, d);
4.1.2 제어 문자
Ex 22) int a = 10; float b = 3; double c; float d = 65; char ch[6] = "HAPPY"; char ch2[6] ="world"; c = a/b; printf("(1)%3d , %6.3Lf\n", a, c); printf("(2)%7.3f, %6.3f\n", (double)a, c); printf("(3)%9.5f\n", c); printf("(4)%5s\n", ch); printf("(5)\t%s\n", ch); printf("(6) %s\n", ch); printf("(7)%s\r%s\n", ch, ch2); printf("(8)%f, %d\n", d, (int)d); printf("(9)%d\n", 2+3); printf("(10)\n\n"); printf("(11)%f, %f, %.14f\n", (double)a, (double)b, (double)c); printf("(12)%Lf, %Lf, %.18f\n", (long double)a, (long double)b, (long double)c); printf("(13)변수 a의 기억 장소의 크기 : %d\n", sizeof(a)); printf("(14)변수 b의 기억 장소의 크기 : %d\n", sizeof(b)); printf("(15)변수 c의 기억 장소의 크기 : %d\n", sizeof(c)); printf("(16)변수 ch의 기억 장소의 크기 : %d\n", sizeof(ch)); printf("(17)\n\n");
4.1.3 scanf( ) : 키보드로부터 서직에 맞추어 다양한 형태의 데이터를 입력 받는다. 1. 형식 scanf(“ 서식 문자열”, 인수들); ex) scanf(“%d %d”, &a, &b); //옳은 표현 scanf(“입력 = %d %d”, &a, &b); //틀린 표현
Ex 22) int a, b, hap; scanf(“%d %d”, &a, &b); hap = a + b; printf(“ 두 수의 합 = %d\n”, hap); /* 변수와 주소의 이해 */ Ex 23) int a = 200; printf(“a에 저장된 값 = %d\n”, a); printf(“변수 a의 주소 = %u\n”, &a);