200 likes | 564 Views
3. 자료형 [ 정수형 , 실수형 , 문자형 ] 변수 활용 프로그램. 문제내용 자료형 변수를 정의하고 프로그램내에서 자료형 변수를 사용하여 결과를 출력 학습내용 자료형 변수에 저장할 있는 값의 범위를 이해하고 학습 자료형의 크기 정수형 ( int ) 변수. 3. 자료형 [ 정수형 , 실수형 , 문자형 ] 변수 활용 프로그램. 정수 자료형의 크기별 표현할 수 있는 범위 하나의 비트는 0 과 1 의 2 가지 수 를 표현
E N D
3. 자료형[정수형,실수형, 문자형] 변수활용 프로그램 • 문제내용 • 자료형 변수를 정의하고 프로그램내에서자료형 변수를 사용하여 결과를 출력 • 학습내용 • 자료형 변수에 저장할 있는 값의 범위를 이해하고 학습 • 자료형의 크기 • 정수형(int) 변수
3. 자료형[정수형,실수형, 문자형] 변수활용 프로그램 • 정수 자료형의크기별 표현할 수 있는 범위 • 하나의 비트는 0과 1의 2가지 수를 표현 • 따라서 n비트의 메모리공간은 2n개의 수를 표현할 수 있음 • 1바이트(8비트)인 char은 28인 256가지의 숫자를 표현할 수 있으며, • 4바이트(4*8=32비트)인 int는232개의 숫자를 표현할 수 있다. 두 개의 비트 세 개의 비트 한 개의 비트 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 1 1 1 0 0 0 2 2*2*2 =23= 8 2*2 = 22 =4 0 1 1 1 1 1 1 1
3. 자료형[정수형,실수형, 문자형] 변수활용 프로그램 #include <stdio.h> main() { char ch = 200; unsigned char j = 200; char k = 'a'; inti = 2000000000; unsigned ui = 4000000000; intik = 'b'; float d = 3.141592; double d1 = 1234567890; double d2 = 'c'; printf( "문자형 변수 ch의 값은 %d \n", ch ); printf( "문자형 변수 j의 값은 %u \n", j ); printf( "문자형 변수 k의 값은 %d \n\n", k ); printf( "정수형 변수 i의 값은 %d \n", i ); printf( "정수형 변수 ui의 값은 %u \n", ui ); printf( "정수형 변수 ik의 값은 %d \n\n", ik ); printf( "실수형 변수 d의 값은 %E \n", d ); printf( "실수형 변수 d1의 값은 %E \n", d1 ); printf( "실수형 변수 d2의 값은 %E \n\n", d2 ); } • 실수형(float) 변수 • 문자형(char)변수 • 참조 프로그램(11, 12, 13) 200 -56 /* 사용하는 내 컴퓨터의 각자료형의 크기[ sizeof(자료형) ]를 알아본다 */ #include <stdio.h> main( ) { printf("Type int size : %d bytes.\n", sizeof(int)); printf("Type char size : %d bytes.\n", sizeof(char)); printf("Type long size : %d bytes.\n", sizeof(long)); printf("Type double size : %d bytes.\n", sizeof(double)); } 129 -128 -127
4. 자료형[정수형,실수형, 문자형] 상수활용 프로그램 #include <stdio.h> #define HUNDRED_THOUSAND 100000 constint j = 200000; #define PI 3.141592 const double k = 1.23456789; #define HUNDRED 100 const char m = 10; main() { // main( ) 안에서 //HUNDRED_THOUSAND = 100000; 라고 선언하면 에러발생 //j = 200000; 라고 선언하면 에러 발생 printf("정수형 상수 HUNDRED_THOUSAND의 값은 "); printf("%d \n", HUNDRED_THOUSAND); printf("정수형 상수 j의 값은 %d \n\n", j); //main()안에서 PI = 3.141592; 라고 선언하면에러 발생 //k = 1.23456789; 라고 선언하면 에러 발생 printf("실수형 상수 PI의 값은 %f \n", PI); printf("실수형 상수 k의 값은 %f \n\n", k); //main()안에서 HUNDRED = 200; 라고 선언하면 에러 발생 // m = 200; 이라고 선언하면 에러 발생 printf("문자형 상수 HUNDRED의 값은 %d \n", HUNDRED); printf("문자형 상수 m의 값은 %d \n\n", m); } • 문제내용 • 자료형 상수들을 정의하고 프로그램 내에서 자료형 상수를 사용하여 출력 • 학습내용 • 자료형 상수의 의미와 이를 어떻게 사용하는지를 이해 • 참조 프로그램(17, 18, 16)
참고1. ASCII코드 • ASCII 코드 • American Standard Code for Information Interchange • 미국표준협회(ANSI)에서 제정한 정보교환용 미국표준부호 • 문자, 숫자, 특수문자에 수치 값(numeric Value)을 부여한 부호체계 • C언어에서 문자 및 특수문자 표현에 사용됨
참고1. ASCII코드 • ASCII 코드 • C언어에서는 문자 표현 시, 내부적으로 메모리에 수치 값으로 저장 • 프로그램 내에서 주어진 10진수, 16진수, 8진수 수치 값으로 문자에 접근 및 사용 가능 • 마찬가지로, 프로그램 내에서 문자를 숫자처럼 사용 가능하며, 이 때 문자 간 연산(ex> 사칙연산) 또한 가능 10진수 16진수 8진수 문자
참고1. ASCII코드 • ASCII 코드 • char 형의 표현 범위 • ASCII 코드는 0~126까지 총 127 문자로 이루어짐
참고2. 자료형 별 표현 범위와 오버플로&언더플로 • 자료형 별 표현 범위 • 오버플로(overflow): 자료형별 기억공간에 할당할 수 있는 최대값(_MAX)보다 큰값이 입력되는 상황. • 언더플로(underflow):자료형별 기억공간에 할당할 수 있는 최소값(_MIN)보다 작은값이 입력되는 상황
참고2. 자료형 별 표현 범위와 오버플로&언더플로 • 자료형 별 표현 범위 #include <stdio.h> #include <limits.h> #include <float.h> main(){ printf("char 범위 : %d ~ %d \n", CHAR_MIN, CHAR_MAX); printf("unsigned char 범위 : %d ~ %d \n\n", 0, UCHAR_MAX); printf("int범위 : %d ~ %d \n", INT_MIN, INT_MAX); printf("unsigned short 범위 : %d ~ %d \n\n", 0, USHRT_MAX); printf("float 범위 : %.10e ~ %.10e \n", FLT_MIN, FLT_MAX); printf("double 범위 : %.10e ~ %.10e \n\n", DBL_MIN, DBL_MAX); }
참고2. 자료형 별 표현 범위와 오버플로&언더플로 • 문자 자료형 별 표현 범위 #include <stdio.h> int main() { char cNumber; cNumber = 128; printf("%d\n\n", cNumber); cNumber = cNumber + 1; printf("%d\n\n", cNumber); cNumber = cNumber - 2; printf("%d\n\n", cNumber); return 0; } 128 64 32 16 8 4 2 1 200 -128 -56 -127 127 129 -127 -128
참고2. char 자료형 표현 범위와 오버플로&언더플로 • 오버플로& 언더플로 • 데이터가 자료형의 표현 범위를 벗어날 경우 발생하는 오류를 뜻함 • 배열의 인덱스를 벗어나는 등의 오류 상황도 포함 #include <stdio.h> #include <limits.h> main(){ char s = CHAR_MAX; // s = 127; inti, fact=CHAR_MAX; // fact = 127; printf("Char 최소값: %d\n", CHAR_MIN); printf("Char 최대값: %d\n\n", CHAR_MAX); printf("Char의최대값이들어있는변수의값이1씩증가할때\n"); for(i=0;i<5;i++) printf("저장된값= %-15d실제값= %d\n", s++, fact++); s = CHAR_MAX*2-1; // s = -3; fact = CHAR_MAX*2-1; // fact = 253; printf("\n지속적으로증가하던값이0을통과하면\n"); for(i=0;i<5;i++) printf("저장된값= %-15d실제값= %d\n", s++, fact++); } 200 200 -56 -56 Short형실제 값 127은 char 형의 최대 표현 범위를 127을 초과하게 되어 오버 플로가 발생함(저장된 값은 음수) 129 129 -127 -127 Short형 실제 값이 계속 증가되어 증가 값이 Char형의 최소값 0을 통과하면 언더프로 발생함(저장된 값은 양수로 됨)
참고2. short int자료형 표현 범위와 오버플로&언더플로 • 오버플로& 언더플로 • 데이터가 자료형의 표현 범위를 벗어날 경우 발생하는 오류를 뜻함 • 배열의 인덱스를 벗어나는 등의 오류 상황도 포함 #include <stdio.h> #include <limits.h> main(){ short s = SHRT_MAX; // s = 32767; fact=32767; inti, fact = SHRT_MAX; // short 값의오버플로나언더플로 범위를 저장 printf("short 최소값 : %d\n", SHRT_MIN); printf("short 최대값 : %d\n\n", SHRT_MAX); printf("short int자료형의 최대값이 들어있는 변수의 값이 1씩 증가할 때\n"); for(i=0; i<5; i++) printf("저장된 값 = %-15d 실제값= %d\n", s++, fact++); s = SHRT_MAX*2; fact = SHRT_MAX*2; // s= -2; fact = 65534; printf("\n지속적으로 1씩 증가하던 값이 0을 통과하면\n"); for(i=0;i<5;i++) printf("저장된 값 = %-15d 실제 값 = %d\n",s++,fact++); } • Short 정수범위 (-32,768(-) ~ 0 ~ 32,767(-1) ) • 0 -1- 2 ---------32767 32768-----------65534-65535 • 0 1 2 -32768 -2 -1 • * 청색(양수), 적색(음수) 정수형실제 값 32768은 short형의 최대 표현범위를 32767을 초과하게 되어 오버플로가 발생함(저장된값 음수) 정수형 실제 값이 계속 증가되어 증가 값이 short형의 최소표현범위 0을 통과하면 언더플로 발생(저장된 값은 양수)
참고3. 10진수(13)를 2진수(1101)로 표현 • 정수 13을 2진수로 표현하기 • 2로 나눈 나머지를 배열에 차례대로 저장 • 더 이상 나누어지지 않을 때 까지 반복 • 마지막 1을 배열에 저장 • 배열에 저장된 내용을 역순으로 뒤집기 십진 정수13을 2진수로 초간단 계산하기(1101 ?) ??8 + 4 + 1 = 13
참고3. 10진수를 2진수로 표현 • 정수 13을 2진수로 표현하기[참고용 프로그램]
참고3. 2진수를 10진수로 표현 • 2진수 1101을 10진수13으로 계산 및 표현하기 이진수 1101을 십진정수 13 간단 계산하기 1에대응된 8 + 4 + 1 = 13 15
팁(TiP) • 2, 8, 10, 16진수 변환 1 0 0 3 4 2 1 4 2 1 4 2 1 4 2 1 8 4 2 1 8 4 2 1 8 4 21 0 3 4
실습 • 3-1. ASCII 코드와 반복문(for, while)을 활용, 다음 결과와 같이 출력해보세요. • ASCII 코드에서 문자를 수치 값으로 사용할 수 있음을 기억하세요 • 메모리에 저장되는 방식이 동일하다면 초기화 시에도 사용할 수 있지 않을까? • 반복문 선택은 자유롭게 하되, 필히 사용하세요 반복문의 종류 3가지 1. for문 for(초기식; 조건식; 증감식) {반복할 내용} 2.while 문 초기식; while(조건식) {반복할 내용 증감식;} 3.do –while문 초기식; do{ 반복할 내용 증감식; }while(조건식) HINT !!! ASCII 코드에서 문자는 수치 값으로 사용할 수 있다. (ex. A =65) 반복문은3가지 중 한가지를 자유롭게 사용 해야 함
실습 • 3-2. char 과 short int자료형의언더플로(1씩 감소할때) 를 확인할 수 있는 프로그램을 작성하세요. • 10, 11 페이지 오버플로 관련 프로그램을 참고하세요 • 결과 화면은 위와 같이 나오도록 작성하세요
실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 입력을 총 2번 할 수 있도록 처리 • 무한루프를 이용하여 메뉴를 계속 선택할 수 있도록 함 • 메뉴 선택에 따라 입력과 출력을 하되 입력은 총 2번 할 수 있도록 함 Chapter1 프로그램 Chapter2 프로그램 Chapter3 프로그램 변수 선언 변수 선언 입력 메뉴선택 변수 선언 및 초기화 입력 처리 (average 부분) 출력 출력 출력
실습 • 프로그래밍 실습 - 석차 연명부 • 다음의 결과와 같도록 프로그램 작성 • 각 변수형을 2차원 배열로 작성 • 입력할 개수를 지정하는 변수 선언 • 메뉴는 switch나 if문을 이용하여 작성 HINT !!! 기존 char Name[255]; char Major[255]; 변화 char Name[1][255]; Char Major[1][255]; HINT !!! intisInput = 0; … scanf("%s",Name[isInput]); for(inti=0; i<isInput; i++) printf(“…%s …”,…,Name[i]);