03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C
변수와 자료 유형 변수 (variables) 프로그램에서 자료 값을 임시로 기억할 수 있는 저장 공간 변수 (Variables) 는 컴퓨터의 메모리인 RAM(Random Access Memory) 에 저장 물건을 담는 박스라고 생각한다면 박스의 크기에 따라 담을 물건 이 제한됨 자료유형 이 변수에 저장되는 값의 종류를 자료 유형 (data types) 또는 간단 히 자료형이라고도 함 C 언어에는 자료형을 크게 기본 자료형 (basic type) 과 유도 자료 형 (derived type) 으로 구분 기본 자료형 : 정수형, 문자형, 부동 소수형 유도 자료형 : 배열, 구조체, 공용체 등
자료유형의 종류와 크기 적당한 자료유형
자료유형의 종류 모두 12 가지 변수가 가질 값의 종류가 자료형 변수의 자료형에 따라 변수가 저장될 공간의 크기와 내부 저장 방식이 결정 괄호는 생략 가능하다는 것을 의미 문장 char c; 는 변수 이름 c 를 자료형 char 로 선언하는 문장 자료형 변수이름 ; char c;
입출력 보충 : 데이터의 표현과 연산 기본자료형
예제 소스 : Overflow (C_03-1.c) 여기서 day 변수의 상수 값으로 “32768” 을 입력하게 되면 그 결과는 어떻게 될 것인가 ? 1) ) ) Error
입력함수 이해하기 #1
scanf 함수 제대로 사용하기 함수 scanf() – 간단한 정수의 입력 –& 은 주소를 의미하는 연산자
scanf 함수의 첫번째 전달인자는 변환문자열이며 두 번째 전달인 자부터 입력 받을 변수를 차례로 나열한다. scanf 함수 제대로 사용하기 scanf 함수의 변환문자열에는 불필요한 문자를 사용하지 않는다. scanf( “ %d %c\n ”, &age, &blood_type); 불필요한 문자 !!
입력에 사용되는 변환문자열은 기본적으로 printf 함수와 같다. ▶ scanf 함수의 기본적인 사용법 구분변환문자열 입력 형태 입력되는 변수의 자료형 정수형 %d, %u 10 진수 char, short, int, long 형 변수 %o 8 진수 %x 16 진수 실수형 %lf, %le 소수점 또는 지수형 double 형 변수 문자형 %c 하나의 문자 char 형 변수 문자열 %s 하나의 문자열 char 배열 scanf 함수는 값을 저장할 변수의 위치를 알아야 하므로 변수명에 ‘ & ’ 를 붙여 야 한다 ( 단, 배열명에는 붙이지 않는다 ).
scanf 함수는 입력 데이터의 구분을 화이트스페이스 ( 스페이스, 엔터, 탭 ) 으로 한다 (%d, %lf, %s 변환문자열 ). ▶ scanf 함수는 변환문자열을 정확히 사용해야 한다. scanf( “ %d%d ”, &a, &b); ( 엔터 ) 공백으로 데이터를 구분 %c 변환문자열은 화이트스페이스도 하나의 데이터로 입력 받는다. scanf( “ %c%c ”, &a, &b); x y ( 엔터 ) 공백을 데이터로 입력 화이트스페이스를 구분문자로 사용하기 위해서는 %c 변환문자열 앞에 공백을 사용한다. scanf( “ %c %c ”, &a, &b); 공백을 사용하면 b 에 y 를 입력 받게 된다.
예제소스 (C_03-2.c) 생년월일과 혈액형을 입력 받아 그 결과를 출력 하는 문 장을 완성해 보시오.
예제소스 (C_03-2.c)
출력함수 이해하기 #2
상수의 형태에 따라 적절한 자료형의 변수를 사용해야 한다. 정수형 변수는 int, 실수형 변수는 double 로 선언한다. ▶ 정수형 변수와 실수형 변수 월급의 실 입금액 계산을 위한 변수 선언의 예 int bonbong, bonus, total; double tax, real_income; bonbong = 150; bonus = 60; total = bonbong + bonus; tax = total * 0.09; real_income = total – tax; // 본봉, 보너스, 총수입액 // 세금, 실수입액 // 본봉은 150 만원 // 보너스는 60 만원 // 총수입액은 본봉 + 보너스 // 세금은 총수입액의 9% // 실수입액은 총수입액 - 세금
출력하려는 정수 값의 필드 폭 (width) 지정 –%d 사이에 폭을 나타내는 정수를 기술 정수형 변수의 출력
실수형 값을 입출력 할 때는 %lf 변환문자열을 사용한다. - 실수형 값의 출력 ▶ 실수형 데이터의 입출력 - 실수형 값의 입력 double tax_rate; scanf( “ %lf ”, &tax_rate); // 세율을 저장할 실수형 변수 // 키보드로 세율 입력 double real_income;... printf( “ 실 수입액은 %lf 입니다. ”, real_income); // 실수형 변수 선언 // 실 수입액 계산 숫자 데이터 정리 데이터형상수의 표현법변수의 자료형데이터의 크기입출력 변환문자열 정수형 10int4 바이트 %d 실수형 10.0double8 바이트 %lf
실수형 변수의 입출력 부동소수형을 출력하는 경우 – 변환명세에서 필드 폭 (width) 을 지정하려면 %f 사이에 폭을 기술
문자상수는 문자를 작은따옴표로 묶어서 표현한다. ▶ 문자상수 - 문자상수의 크기는 1 바이트이다. - 아스키코드값으로 번역되므로 실제로는 정수형 상수와 같이 처리된다. printf(“ 정수형 상수값 : %d\n”, 65); printf(“ 문자형 상수값 : %d\n”, ‘A’); 정수형 상수값 : 65 문자형 상수값 : 65 전체 4 바이트
문자상수는 1 바이트 크기의 char 형 변수에 저장한다. ▶ 문자변수 char A; A = ‘ A ’ ; // A 는 char 형 변수명 // 변수 A 에 문자상수 ‘ A ’ 를 저장 char 형 변수는 작은 범위의 정수값도 저장할 수 있다. - 문자상수 자체가 정수값으로 번역되므로 char 형 변수도 당연히 정수값을 저장할 수 있다. 단, 크기가 1 바이트이므로 값의 범위가 제한적이다. char ch; ch = 123; // ch 는 char 형 변수명 // char 형 변수에 정수값 저장
▶ 문자의 입출력 문자를 입출력 할 때는 %c 변환문자열을 사용한다. 혈액형을 입력 받아 그대로 출력하는 코드 (AB 형 제외 ) char blood_type; printf( “ 혈액형을 입력하세요 : ” ); scanf( “ %c ”, &blood_type); printf( “ 당신의 혈액형은 %c 형입니다.\n ”, blood_type); // 문자 변수의 선언 // 입력 안내 메시지 출력 // 혈액형 입력 // 혈액형 출력 혈액형을 입력하세요 : B ( 엔터 ) 당신의 혈액형은 B 형입니다. char 형 변수라도 정수값을 입출력 할 때는 %d 를 사용한다.
문자열상수는 문자열을 큰따옴표로 묶어서 표현한다. 문자열상수는 연속적인 문자상수들의 집합이다. 문자열상수의 마지막에는 널문자가 포함되어 번역된다. ▶ 문자열상수 널문자 (null character) 는 ‘ \0 ’ 으로 표현하며 아스키코드값은 0 이다.
문자열은 char 형 변수들을 모아 놓은 배열에 저장한다. - 널문자를 포함한 문자열의 길이에 맞게 char 배열을 선언한다. - 문자열 “ Hani ” 를 저장하기 위한 char 배열 ▶ 문자열의 저장 char string[5] = “ Hani ” ; // 배열의 선언과 동시에 문자열을 저장한다. 문자열상수는 배열의 선언과 동시에 대입해야 한다. char string[5]; string = “ Hani ” ; 컴파일 에러 !
문자열을 입출력 할 때는 %s 변환문자열을 사용한다. - 배열은 입력되는 문자열이 모두 저장될 수 있도록 넉넉하게 선언한다. - 입력할 때 배열명 앞에는 & 를 붙이지 않는다. ▶ 문자열의 입출력 - 지하철 역 이름을 입력 받아 출력하는 코드 char subway[80]; printf( “ 역 이름을 입력하세요 : ” ); scanf( “ %s ”, subway); printf( “ 이번에 정차할 역은 %s 역입니다.\n ”, subway); // 배열명 앞에 & 가 없다 !!
예제소스 (C_03-5.c) 지하철역을 입력 받아 그 결과를 출력 하는 문장을 완성 해 보시오.
문자열을 입력할 때 중간에 빈칸을 두지 않는다. - scanf 함수는 “ 화이트 스페이스 ( 빈칸, 탭, 엔터 ) ” 를 입력 데이터를 구분 하는 문자로 활용하므로 문자열의 중간에 빈칸이 들어가면 빈칸의 앞 부분만 입력이 된다. ▶ 문자열의 입출력 역 이름을 입력하세요 : 을지로 3 가 ( 엔터 ) 이번에 정차할 역은 을지로입니다. // 문자열 중간에 빈칸 입력 // 을지로만 출력된다. 문자 데이터 정리 데이터형상수의 표현법변수의 자료형데이터의 크기입출력 변환문자열 문자형 ‘A’‘A’ char1 바이트 %c 문자열 “ Hani ” char 배열가변적임 %s
자료형에 따른 변환문자열의 사용은 다음과 같다. ▶ 변환문자열 정리 구분변환문자열 출력 형태 대상 자료형 정수형 %d 부호 있는 10 진수 signed 형의 정수형 변수, 상수 %u 부호 없는 10 진수 unsigned 형의 정수형 변수, 상수 %o 부호 없는 8 진수 signed, unsigned 구분 없이 정수형 데이터를 각 진법에 맞게 출력 %x 부호 없는 16 진수 실수형 %lf 부호 있는 소수점 형태실수형 변수, 상수 %le 부호 있는 지수 형태실수형 변수, 상수 문자형 %c 하나의 문자 char 형 변수, 문자상수 문자열 %s 문자열 char 형 배열의 이름, 문자열상수
▶ 정리하기 : 다양한 변환문자열을 사용한 예제 : 예제소스 (C_03-4.c) #include int main() { char ch='A'; char name[80]=" 황금박쥐 "; int in=10; float ft=210; double db=16.8; printf(" 정수형 상수의 출력 : %d\n", -10); printf(" 정수형 변수의 출력 : %d\n", in); printf(" 정수형 수식의 출력 : %d\n", in/3); printf(" 정수형 -> 실수형 변환식의 출력 : %3.1f\n", (float)in/3); printf(" 실수형 수식을 소수점 형태로 출력 : %3.1lf\n", ft/4); printf(" 실수형 상수를 소수점 형태로 출력 : %lf\n", 2.5); printf(" 실수형 변수를 지수 형태로 출력 : %le\n", db); printf(" 실수형 수식을 소수점 형태로 출력 : %lf\n", db/4); printf(" 문자상수의 출력 : %c\n", 'F'); printf(" 문자변수의 출력 : %c\n", ch); printf(" 문자 배열의 출력 : %s\n", name); printf(" 문자열상수의 출력 : %s\n", " 날아라 태극호 "); return 0; } 출력 형태
금주의 실습 과제 #3 다음과 같은 문장을 출력하는 프로그램을 작성하여 레포트제출 전용 사이트에 파일을 올리기 바랍니다. 제목과 파일명은 반드시 “ 학번 _3.zip” (ex) “090203_3.zip” 로 업로드 하기 바랍니다. 프로그램 목적 – 변수 선언과 “ 표현식의 출력 ” 을 이해한다. 파일 구성 – 프로그램 저장 장소 : c(d):\ 자신의개인폴더 – 프로젝트 이름 : 학번 _3 ex) _3 – 소스 파일 이름 : 학번 _3.c ex) _3.c – 업로드할 파일명 : 학번 _3.zip ex) “090203_3.zip”
실행 결과 : 예제소스 (C_03-3.c)
금주의 홈 과제 #3 여러 개의 소스코드가 있습니다. => 이중 한 문제만 선택해서 코딩후 실행해 보면 됩니다. 레포트제출 전용사이트에 다음주 수업 전까지 완료 후 업로드 바람 Visual Studio download ( 강의 사이트에서 다운로드 가능 ) : 업로드할 파일명 : 학번 _ 홍길동.zip ex) “123456_ 홍길동.zip”