데이터의 표현과 연산 (1) (Chapter 3) Jin-Mo Kim mythsjin@hansung.ac.kr
숫자 데이터의 처리 숫자상수에는 정수 외에도 실수가 있다. 숫자상수를 저장하는 변수의 선언 숫자 데이터의 기본적인 연산과 형변환 실수형 데이터의 입출력
숫자 상수 숫자 데이터를 프로그램 안에서 직접 표현한 것이 숫자상수 정수형 상수의 표현 실수형 상수의 표현 일반적인 정수값 표현방식과 같다. 실수형 상수의 표현 정수값 표현방법에 소수점을 붙인다. 정수형 상수와 실수형 상수는 다른 형태로 번역된다.
정수형 변수와 실수형 변수 상수의 형태에 따라 적절한 자료형의 변수를 사용해야 한다. 정수형 변수는 int, 실수형 변수는 double로 선언한다. 월급의 실 입금액 계산을 위한 변수 선언의 예 int bonbong, bonus, total; // 본봉, 보너스, 총수입액 double tax real income; // 세금 실수입액 bonbong = 150; // 본봉은 150만원 bonus = 60; // 보너스는 60만원 total = bonbong + bonus; // 총수입액은 본봉 + 보너스 tax = total * 0.09; // 세금은 총수입액의 9% real_income = total – tax; // 실수입액은 총수입액 - 세금
기본적인 연산과 연산과정 피연산자는 상수 또는 변수가 된다. 덧셈, 뺄셈, 곱셈 연산자 연산결과는 일단 임시 기억공간에 저장된다.
자동 형변환 연산과정에서 피연산자의 형태는 하나로 통일된다. 정수형과 실수형 값이 연산될 때는 정수형이 실수형으로 자동 형변 환되어 연산되며 그 결과값 또한 실수형이 된다.
실수형 데이터의 입출력 실수형 값을 입출력 할 때는 %lf 변환문자열을 사용한다. 숫자 데이터의 정리 실수형 값의 출력 실수형 값의 입력 숫자 데이터의 정리 double real_income; // 실수형 변수 선언 … // 실 수입액 계산 printf(“실 수입액은 %lf입니다.”, real_income); double tax_rate; // 세율을 저장할 실수형 변수 scanf(“%lf”, &tax_rate); // 키보드로 세율 입력
문자 데이터의 처리 문자상수의 표현법 문자상수의 저장 문자의 입출력
문자상수 문자상수는 문자를 작은따옴표로 묶어서 표현한다. 아스키 코드값으로 번역되므로 실제로는 정수형 상수와 같이 처 리된다. 문자상수의 크기는 1바이트 아스키 코드값으로 번역되므로 실제로는 정수형 상수와 같이 처 리된다. printf(“정수형 상수값 : %d\n”, 65); printf(“문자형 상수값 : %d\n”, ‘A’);
문자변수 문자상수는 1바이트 크기의 char형 변수에 저장한다. char형 변수는 작은 범위의 정수값도 저장할 수 있다. char ch; // ch는 char형 변수명 ch = 123; // char형 변수에 정수값 저장
문자의 입출력 문자를 입출력 할 때는 %c 변환문자열을 사용한다. 혈액형을 입력 받아 그대로 출력하는 코드(AB형 제외) char형 변수라도 정수값을 입출력 할 때는 %d를 사용한다.
문자열 데이터의 처리 문자들을 모아서 문자열을 만든다. char 배열에 문자열을 저장한다. 문자열의 입출력
문자열 상수 문자열상수는 문자열을 큰따옴표로 묶어서 표현한다. 문자열상수는 연속적인 문자상수들의 집합이다. 문자열상수의 마지막에는 널문자가 포함되어 번역된다. 널 문자(null character)는 ‘\0’으로 표현하며 아스키 코드값은 0이다.
문자열의 저장 문자열은 char형 변수들을 모아 놓은 배열에 저장한다. 문자열 상수는 배열의 선언과 동시에 대입해야 한다. 문자열 “Hani”를 저장하기 위한 char 배열 문자열 상수는 배열의 선언과 동시에 대입해야 한다. char string[5] = “Hani”; // 배열의 선언과 동시에 문자열을 저장한다. char string[5]; string = “Hani”;
문자열의 입출력 문자열을 입출력 할 때는 %s 변환문자열을 사용한다. 배열은 입력되는 문자열이 모두 저장될 수 있도록 넉넉하게 선언한 다. 입력할 때 배열명 앞에는 &를 붙이지 않는다. char subway[80]; printf(“역 이름을 입력하세요 : ”); scanf(“%s”, subway); // 배열명 앞에 &가 없다. printf(“이번에 정차할 역은 %s역 입니다.\n”, subway);
문자열의 입출력 문자열을 입력할 때 중간에 빈칸을 두지 않는다. scanf() 함수는 화이트 스페이스(빈칸, 탭, 엔터)를 입력 데이터를 구 분하는 문자로 활용하므로 문자열의 중간에 빈칸이 들어가면 빈칸의 앞 부분만 입력이 된다. 문자 데이터 정리
형변환과 여러 가지 연산자 형변환 규칙 몫 연산자와 나머지 연산자 형변환 연산자
형변환 규칙 서로 다른 형태의 값이 연산될 때는 형태가 하나로 통일된다. 형변환은 데이터의 손실을 최소화하는 방향으로 수행된다. 문자 데이터끼리 연산할 때는 둘 다 정수형으로 변환된다. 대입문에서는 왼쪽 변수의 형태에 따라 변환된다. int result; result = 2.5;
형변환 규칙 연산의 결과값은 피연산자의 형태와 같다. 따라서 두 정수값으로 나눗셈 연산을 수행하면 결과값은 정수가 된다. 연산의 결과값은 피연산자의 형태와 같다. 따라서 두 정수값으로 나눗셈 연산을 수행하면 결과값은 정수가 된다. 나눗셈 결과가 실수값이 되려면 피연산자 중의 하나는 실수값이 어야 한다.
몫 연산자와 나머지 연산자 나눗셈 연산자(/)의 피연산자가 모두 정수형이면 몫을 구한다. 나머지 연산자(%)의 피연산자는 모두 정수형이어야 한다. 몫과 나머지 연산자는 어떤 값을 일정한 단위로 걸러낼 때 유용 하다. 거스름 돈 850원에 필요한 동전의 최소 개수를 구하는 예
[예제3-2] 자판기 잔돈 계산 프로그램 #include <stdio.h> int main() { int input, change; // input은 투입액, change는 잔돈을 저장할 변수 int w500, w100, w50, w10; // 각 동전의 개수를 저장할 변수 printf("돈을 입력하세요 : "); scanf("%d", &input); change = input – 150; // 커피값이 150원일 때 잔돈 계산 w500 = change / 500; // 500원 동전의 개수 change = change % 500; // 아직 지급하지 못한 남은 잔돈 w100 = change / 100; change = change % 100; w50 = change / 50; change = change % 50; w10 = change / 10; printf("500원짜리 동전 %d개\n", w500); printf("100원짜리 동전 %d개\n", w100); printf("50원짜리 동전 %d개\n", w50); printf("10원짜리 동전 %d개\n", w10); return 0; }
형변환 연산자 형변환 연산자는 피연산자의 형태를 명시적으로 변환시킨다. 취업자 수와 졸업생 수를 입력 받아서 취업률을 계산하는 예 int employed, graduation; // 취업자수와 졸업생수를 저장할 변수 double percentage; // 취업률을 저장할 변수 scanf(“%d %d”, &employed, &graduation); //취업자수와 졸업생 수 입력
형변환 연산자 실수를 정수형으로 형변환 하면 정수값만 계산된다. 0.375 시간은 몇 분, 몇 초인가? double time = 0.375; // 단위는 시간 int min; // 분을 저장하기 위한 변수 time = time * 60; // 분 단위로 환산, time은 22.5 min = (int)time; // 정수값 22만 추려서 min에 저장 time = time – min; // time에는 분 단위 값 0.5만 남긴다. printf(“분 : %d\n”, min); // 분 출력 printf(“초 : %d\n”, (int)(time *60)); // 초 단위로 환산한 후에 형변환하여 출력