great minds think alike
[C] Study : 수식과 연산자 - (2) 산술 연산자 본문
• 산술 연산자는 기본적인 산술 연산인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 실행하는 연산자이다.
• 사용자에게서 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;
}
'2023 > C 언어' 카테고리의 다른 글
[C] Study : 수식과 연산자 - (4) 관계 연산자 (0) | 2023.08.21 |
---|---|
[C] Study : 수식과 연산자 - (3) 대입 연산자 (0) | 2023.08.21 |
[C] Study : 수식과 연산자 - (1) 수식과 연산자의 개념 (0) | 2023.08.21 |
[C] Study: 동적 메모리 - (3) 구조체의 동적 생성을 해보자 (0) | 2023.08.19 |
[C] Study: 동적 메모리 - (2) malloc()과 free() (0) | 2023.08.19 |