C 기초특강 변수, 타입, 정수, 실수
상수 상수 (constant) #define MAX_FLOOR 100 프로그램헤더나앞부분에존재 변수의이름 ( 식별자 ) 와같은규칙을따르지만, 일반적으로대문자와 _ 로만구성 프로그램가독성을높이고, 일관된수정을위해사용 프로그램중간에갑자기등장하는임의의숫자는이해도를떨어뜨림 -> 반드시의미있는상수를이용해야함 Preprocessor 가해당단어를값으로모두대체하고컴파일 프로그램실행중값을바꿀수없음 C 언어에서문자상수는존재하지않음 (C++ 에서는존재 ) a 는정수 (int) 값 문자열상수 예 : hello, World! a 와 a 의차이
변수 변수의 3 요소 이름 ( 식별자 ), 주소, 공간 3 요소로구성 변수 (variable) 사용 int no_of_person ; 50000 no_of_person 100 4bytes no_of_guests = 100; no_of_guests = no_of_guests + 1; 이름 ( 식별자 ) 영문자또는밑줄이반드시나오고, 영문자, 숫자또는밑줄이임의로반복될수있음 ( 길이의제한은없으나 ANSI C의경우 31개까지만구별 ) 사용가능 : k, abc, no_of_person, _sysid 불가능 : 3rd_person, #ofperson, abc-plus, 사람수 _ 로시작하는변수의경우시스템에서특별한목적으로사용하는경우가많으므로일반프로그래머는사용하지않는것이바람직 일관된규칙에따라작명하는것이바람직 예 : noofperson, no_of_person 공간의크기는타입 (char, int, long, float, double, struct, union 등 ) 에따라달라짐 변수의선언과초기화 lvalue와 rvalue 할당문 (=) 왼쪽과오른쪽에위치할때의미가다름 오른쪽의경우값의의미 왼쪽의경우공간의의미전역변수나 static의경우 0으로초기화를해주지만, 지역변수의경우자동으로초기화해주지않음 ( 프로그래머의책임 ) 프로그램실행중필요에의해값을바꿀수있음 변수의범위 (scope)
변수관련실험 (1) 실행결과예측 프로그램작성 / 컴파일 / 실행 다양하게프로그램수정하면서결과확인 3 번째줄문장을 19 번째줄로옮기면어떻게되는가? 오류메시지확인 code(text) data stack f1 main main f1 main
변수관련실험 (2) 실행결과예측 프로그램작성 / 컴파일 / 실행 다양하게프로그램수정하면서결과확인 오류메시지확인
정수연산 (1) 정수형기본연산 +, -, * / 와 % 프로그램작성시실수를많이하는부분이므로특히주의
정수연산 (2) 배정문 (assign) = +=, -=, *=, /=, %= result = result + a; result += a; 오른쪽에있는식 (expr) 을계산하여왼쪽변수 ( 공간 ) 에저장 연산자가여러개있는경우우측부터처리 a = b = c = 100;
정수연산 (3) 증가연산자 (++) 와감소연산자 (--) a = a + 1; a++; ++a; 전위연산자와후위연산자의차이 하나의문장에서변수당최대한번만이용할것 두번이상사용하는경우기계마다동일한결과를보장할수없음 연산자우선순위 ( 부분 ) ( ), ++( 후위 ), --( 후위 ) +( 단항 ), -( 단항 ), ++( 전위 ), --( 전위 ) *, /, % +, - =, +=, -=, *=, /= a = a + 1; a += 1; ++a; a++;
scanf 사용 printf 와유사하지만입력을위해사용 scanf( %d, &no); & ( 주소연산자 ) scanf 함수에게변환문자와변수의주소를넘겨주면서사용자의키보드입력을변환하여변수에저장하도록요청 변환문자 c : 단일문자 d : 십진정수 f : 부동소수점숫자 (float) lf 또는 LF : 부동소수점숫자 (double) s : 문자열 다양하게프로그램수정하면서결과 ( 오류 ) 확인 %d 앞또는뒤에빈칸을추가하는경우어떤현상이벌어지는가? 숫자대신문자를입력하면어떻게되는가? & 를빼먹은경우는?
기본자료형 기본자료형 : 완전한형태 char signed char unsigned char signed short int signed int signed long int unsigned short int unsigned int unsigned long int float double long double 정수계열 실수계열 기본자료형 ( 일반 ) char signed char unsigned char short int long unsigned short unsigned unsigned long float double long double char 은 signed char 또는 unsigned char 와같음 (compiler 의선택 )
문자와 char 타입 C 언어에서 a, + 는정수형상수라는점에주의 char 형변수는 1byte 공간을차지 ASCII 코드표확인 특수문자와표현방법 ( 부분 ) 경고 (\a) 역슬래시 (\\) 백스페이스 (\b) 캐리지리턴 (\r) 수직탭 (\v)
int 타입 int 가저장할수있는값의범위는시스템에종속적 4 Byte Word Computer -2 31 : -2145483648 ( 약 -20 억 ) 2 31-1 : 2145483647 ( 약 +20 억 ) 2 Byte Word Computer -2 16 : -32768 2 16-1 : 32767 반드시시스템이표현할수있는값의범위확인 sizeof 이용 헤더파일 Overflow 정수형변수로 20 억 + 20 억을하는경우결과값은? signed 와 unsigned 차이 10 진수, 8 진수와 16 진수 예 : 70, 070, 0x70 실습 기본자료형의크기를출력하는프로그램작성 자료형이표현할수있는값을넘어서서오류값을보이는프로그램작성
변환과캐스트 정수적승격 char ch = A ; printf( %c\n, c); 일반적산술변환 정수형 + 실수형 -> 실수형으로변환 피연산자중더큰타입으로변환 배정문에서의변환 int i; double d; i = 3.5; d = i; i = d; Cast( 캐스트 ) (double) i 자동변환예 char c; short s; int i; long l; unsigned u; unsigned long ul; float f; double d; long double ld; c s / i int u * 7 - i unsigned u * 2.0-1 double f * 7 - i float c + 3 int 7 * s * ul c + 5.0 double ld + c d + s double u - ul 2 * i / l long u - l unsigned long long double unsigned long system dependent
과제 printf(scanf) 변환문자정리 정수출력 ( 십진수, 8 진수, 16 진수 ) 폭설정 ( 전체자릿수, 소수점아래자릿수 ) 과정렬 ( 왼쪽, 오른쪽 ) 온도변환프로그램 섭씨 (C) 온도와화씨 (F) 온도는다음식의관계를가지고있다. F = 9/5 C + 32 C = 5/9 (F 32) 섭씨온도를받아화씨로변환하는프로그램작성화씨온도를받아섭씨로변환하는프로그램작성 삼각형의면적계산프로그램 사용자로부터밑변과높이를입력받아삼각형의면적을구해서출력하는프로그램을작성하시오. 원둘레와면적계산프로그램 사용자로부터반지름을입력받아원둘레와면적을계산해서출력하는프로그램을작성하시오. 예산집행프로그램 2014년예산총액은 309조 6천 925억이고, 그중 40% 를 1분기에, 25.4% 를 2분기에, 21.3% 를 3분기에, 나머지를 4분기에집행할예정이다. 각분기별집행할예산금액을계산하여표형식으로출력하라. 예산총액, 분기별집행비율을사용자로부터입력받아분기별집행할금액을계산하여표형식으로출력하라.