복소수 두 개가 a1 + ib1과 a2 + ib2 형태로 주어졌을 때, 이 두 수를 더하는 것이 과제입니다.
복소수란 'a + ib' 형태로 표현할 수 있는 수를 말합니다. 여기서 'a'와 'b'는 실수이고, 'i'는 허수 단위로 식 x² = −1의 해입니다. 실제로는 어떤 실수도 이 방정식을 만족하지 않기 때문에 'i'를 허수(imaginary number)라고 부릅니다.
입력 및 출력 예시
예시 1
입력
a1 = 3, b1 = 8 a2 = 5, b2 = 2
출력
복소수 1: 3 + i8 복소수 2: 5 + i2 두 복소수의 합: 8 + i10
설명
(3+i8) + (5+i2) = (3+5) + i(8+2) = 8 + i10
예시 2
입력
a1 = 5, b1 = 3 a2 = 2, b2 = 2
출력
복소수 1: 5 + i3 복소수 2: 2 + i2 두 복소수의 합: 7 + i5
설명
(5+i3) + (2+i2) = (5+2) + i(3+2) = 7 + i5
문제 해결 접근 방식
- 복소수의 실수부와 허수부를 저장할 구조체(struct)를 선언합니다.
- 입력을 받은 뒤, 각 복소수의 실수부끼리, 허수부끼리 각각 더합니다.
복소수의 덧셈은 다음 규칙을 따릅니다.
(a1 + ib1) + (a2 + ib2) = (a1 + a2) + i(b1 + b2)
즉, 실수부는 실수부끼리, 허수부는 허수부끼리 더하면 됩니다.
알고리즘
Start
declare struct complexnum with following elements
1. real
2. img
In function complexnum sumcomplex(complexnum a, complexnum b)
Step 1→ Declare a signature struct complexnum c
Step 2→ Set c.real as a.real + b.real
Step 3→ Set c.img as a.img + b.img
Step 4→ Return c
In function int main()
Step 1→ Declare and initialize complexnum a = {1, 2} and b = {4, 5}
Step 2→ Declare and set complexnum c as sumcomplex(a, b)
Step 3→ Print the first complex number
Step 4→ Print the second complex number
Step 5→ Print the sum of both in c.real, c.img
StopC 코드 예제
#include <stdio.h>
//복소수의 실수부와 허수부를 저장하기 위한 구조체
struct complexnum{
int real, img;
};
complexnum sumcomplex(complexnum a, complexnum b){
struct complexnum c;
//두 복소수를 더함
c.real = a.real + b.real;
c.img = a.img + b.img;
return c;
}
int main(){
struct complexnum a = {1, 2};
struct complexnum b = {4, 5};
struct complexnum c = sumcomplex(a, b);
printf("복소수 1: %d + i%d\n", a.real, a.img);
printf("복소수 2: %d + i%d\n", b.real, b.img);
printf("두 복소수의 합: %d + i%d\n", c.real, c.img);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
복소수 1: 1 + i2 복소수 2: 4 + i5 두 복소수의 합: 5 + i7
코드 설명
위 프로그램은 크게 세 부분으로 구성됩니다.
- 구조체 정의:
complexnum구조체는 복소수의 실수부(real)와 허수부(img)를 정수형 멤버 변수로 가집니다. - 덧셈 함수:
sumcomplex()함수는 두 복소수를 매개변수로 받아, 실수부와 허수부를 각각 더한 새로운 복소수 구조체를 반환합니다. - main 함수: 두 개의 복소수를 초기화하고, 덧셈 함수를 호출한 뒤 결과를 화면에 출력합니다.
이처럼 C 언어에서는 구조체를 활용하면 복소수처럼 여러 값을 하나의 단위로 다루어야 하는 자료형을 손쉽게 표현할 수 있습니다. 참고로 C99 표준부터는 <complex.h> 헤더를 통해 복소수 자료형을 기본적으로 지원하므로, 실무에서는 이를 활용하는 것도 좋은 방법입니다.