Notice
Recent Posts
Recent Comments
Link
관리 메뉴

great minds think alike

[C] Study : 수식과 연산자 - (2) 산술 연산자 본문

2023/C 언어

[C] Study : 수식과 연산자 - (2) 산술 연산자

gapsoo 2023. 8. 21. 10:21

 

 

 

 


산술 연산자는 기본적인 산술 연산인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 실행하는 연산자이다.

 

산술 연산자의 종류

 

 

사용자에게서 2개의 정수를 받아서 여러 가지 연산을 한 후에 결과를 출력하는 프로그램을 살펴보자.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int x, y, result;
    
	printf("두개의 정수를 입력하시오: ");
	scanf("%d %d", &x, &y);
    
	result = x + y;
	printf("%d + %d = %d\n", x, y, result);
    
	result = x - y; // 뺄셈
	printf("%d - %d = %d\n", x, y, result);
    
	result = x * y; // 곱셈
	printf("%d + %d = %d\n", x, y, result);
    
	result = x / y; // 나눗셈
	printf("%d / %d = %d\n", x, y, result);
    
	result = x % y; // 나머지
	printf("%d %% %d = %d\n", x, y, result);
    
	return 0;
}

 

 

 

프로그램 설명

line 9: 두 개의 정수를 scanf()를 호출해서 한 번에 입력받을 수 있다. 이때에는 형식 지정자 %d를 두 번 써주면 된다.
line 11: 덧셈 연산을 해서 그 결괏값을 result 변수에 저장한다.
line 20: 정수를 정수로 나누면 계산 결과에서 소수점 이하는 버려진다. 즉 7을 4로 나눈 몫인 1이 result에 대입된다.
line 22: 7을 4로 나눈 나머지 3이 result에 대입된다.

 

여기서 나눗셈 연산에 대하여 주의하여야 한다.

 

• 사람한테 7/4를 계산해보라고 하면 답이 1.75라고 한다.

 

• 하지만 컴퓨터에서 정수 계산과 실수 계산은 완전히 다르다. 

 

• 정수끼리의 연산은 정수 하드웨어를 사용하기 때문에 결과도 반드시 정수로 나오게 된다.

 

• 예를 들어서 7을 4로 나누면 1.75가 아니라 1이 되고 소수점 이하는 버려진다.

 

수식의 예

 

• 만약 피연산자 중에서 하나가 실수이면, 실수 하드웨어를 사용하여 계산을 하기 때문에 나눗셈 연산의 겨로가도 실수가 된다.

 

• 즉, 7.0을 4.0으로 나누면 1.75가 된다. 

 

• 이번에는 사용자로부터 2개의 실수를 받아서 여러 가지 연산을 한 후에 결과를 출력하는 프로그램을 살펴보자.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	double x, y, result;
    
	printf("두개의 실수를 입력하시오: ");
	scanf("%lf %lf", &x, &y);
    
	result = x + y;// 덧셈 연산을 하여서 결과를 result에 대입
	printf("%f + %f = %f\n", x, y, result);
    
	result = x - y; // 뺄셈
	printf("%f - %f = %f\n", x, y, result);
    
	result = x * y; // 곱셈
	printf("%f * %f = %f\n", x, y, result);
    
	result = x / y;// 나눗셈 연산을 하여서 결과를 result에 대입
	printf("%f / %f = %f\n", x, y, result);
    
	return 0;
}

 

 

 

 


나머지 연산자

 

나머지 연산자 %는 생각보다 많이 사용되는 중요한 연산자이다.

 

x%y는 x를 y로 나누어서 남은 나머지를 반환한다.

 

예를 들어 10%3은 1이다.

 

10을 3으로 나누면 몫은 3이고 나머지는 1이된다.

 

나머지 연산자를 이용하는 짝수와 홀수를 쉽게 구분할 수 있다. 즉, 어떤 수를 2로 나누어서 나머지가 0이면 짝수이다. (x % 2가 0이면 짝수)

 

• 나머지 연산자를 이용하여 5의 배수를 판단할 수도 있다. (x % 5가 0이면 5의 배수)

 

나머지 연산자를 이용한 예제: 사용자로부터 초 단위의 시간을 받아서 몇 분, 몇 초인지를 계산하기

 

1000초가 몇 분, 몇 초에 해당하는지를 계산할 수 있다. (1000/60)하면 몇 분인지를 알 수 있고, (1000%60)하면 몇 초가 남는지를 계산할 수 있다.

 

 

 

#define _CRT_SECURE_NO_WARNINGS
// 나머지 연산자 프로그램
#include <stdio.h>
#define SEC_PER_MINUTE 60 // 1분은 60초

int main(void)
{
	int input, minute, second;

	printf("초단위의 시간을 입력하시오 (32억초이하): ");
	scanf("%d", &input); // 초단위의 시간을 읽는다.

	minute = input / SEC_PER_MINUTE; // 몇 분
	second = input % SEC_PER_MINUTE; // 몇 초

	printf("%d초는 %d분 %d초입니다. \n", input, minute, second);
	return 0;
}

 

 

프로그램 설명

line 4: #define문을 이용하여 SEC_PER_MINUTE이라는 기호상수를 정의한다. SEC_PER_MINUTE;이라는 기호는 전처리기에 의하여 60으로 대체된다.
line 11: 사용자로부터 초 단위의 시간을 받아서 변수 input에 저장한다.
line 13: 초 단위의 시간이 몇 분에 해당하는지를 알기 위하여 입력받은 초 단위의 입력 시간을 SEC_PER_MINUTE으로 나눈다.
line 14: 입력받은 시간이 몇 초인지를 알기 위해서는 먼저 입력 값에서 분에 해당하는 것들을 제거하고 남은 나머지를 알아야 한다. 따라서 입력받은 시간을 SEC_PER_MINUTE으로 나눠서 나온 나머지가 초에 해당한다.

 

 

 


증감 연산자

 

 증감 연산자는 ++ 기호나 -- 기호를 사용하여 변수의 값을 1만큼 증가시키거나 감소시키는 연산자이다.

 

 ++ 연산자는 변수의 값을 1만큼 증가시킨다.

 

-- 연산자는 변수의 값을 1만큼 감소시킨다.

 

++ 연산자는 다음과 같이 바꾸어서 쓸 수 있다. 다음의 두 문장은 같은 의미이다.

x++;
x = x + 1;

 

  -- 연산자는 다음과 같이 바꾸어서 쓸 수 있다. 다음의 두 문장은 같은 의미이다.

x--;
x = x - 1;

 

증감 연산자는 피연산자의 앞이나 뒤에 올 수 있다. 증감 연산자가 앞에 오는지 뒤에 오는지에 따라 수식의 값이 달라진다.

 

증감 연산자의 종류

 

 

주의할 점: ++x와 x++의 차이점

 

만약 변수 x를 증가시킬 목적으로만 증감 연산자를 사용한다면 x++나 ++x는 동일하다.

 

 그러나 증감 연산자를 적용한 후에 그 수식의 값을 사용할 목적이라면 두 가지를 구분하여야 한다.

 

++x는 문장에서 x의 값을 증가시킨 후에 수식의 값을 계산한다. 수식 ++x의 값을 증가된 x의 값이다.

 

x++는 수식의 값을 계산한 후에 x의 값을 증가시키게 된다. 수식 x++의 값은 증가되기 전의 x값이다.

 

x = 1;
y = 1;
nextx = ++x;  // x의 값이 증가된 후에 사용된다. nextx는 2가 된다.
nexty = y++;  // y의 값이 사용된 후에 증가된다. nexty는 1이 된다.

 

 

여기서 nextx는 2이고 nexty는 1이 된다. 증감 연산자를 사용하는 다음 코드에서 x와 y의 값을 예측해보자.

 

#include <stdio.h>

int main(void)
{
	int x, y; // 변수 x, y를 선언한다.
    
	x = 1; // x는 1이다.
	y = ++x; // x는 2이고 y는 2이다.
	printf("x=%d y=%d \n", x, y);
    
	y = x++; // x는 3이고 y는 2이다.
	printf("x=%d y=%d \n", x, y);
    
	return 0;
}