まずはヘッダーファイルを作るわけですね。

/* 複素数計算に関するヘッダーファイル complex.h */
#if !defined(HEADER_COMPLEX)
#define HEADER_COMPLEX
/* 複素数を表す構造体 */
typedef struct complex{
double real;
double imaginary;
}complex;
/* 複素数を表示する */
void put_complex(complex x){
printf("%f+%fi",x.real,x.imaginary);
}
/* 複素数を読み込む */
void scan_complex(complex *x){
printf("a+bi:");
scanf("%lf+%lfi",&x->real,&x->imaginary);
}
/* 複素数の実部を返す */
double real(complex x){
return(x.real);
}
/* 複素数の虚部を返す */
double imaginary(complex x){
return(x.imaginary);
}
/* 複素数の実部に実数を代入 */
void set_real(complex *x,double d){
x->real=d;
}
/* 複素数の虚部に実数を代入 */
void set_imaginary(complex *x,double d){
x->imaginary=d;
}
/* 複素数xに-1をかけた値を表示 */
complex negative_complex(complex x){
x.real*=-1;
x.imaginary*=-1;
return(x);
}
/* 複素数同士の和を返す */
complex wa_complex(complex x,complex y){
complex z;
z.real=x.real+y.real;
z.imaginary=x.imaginary+y.imaginary;
return(z);
}
/* 複素数同士の差を返す */
complex sa_complex(complex x,complex y){
return(wa_complex(x,negative_complex(y)));
}
/* 複素数同士の積を返す */
complex seki_complex(complex x,complex y){
complex z;
z.real=x.real*y.real-x.imaginary*y.imaginary;
z.imaginary=x.real*y.imaginary+y.real*x.imaginary;
return(z);
}
/* 複素数同士の商を返す */
complex shou_complex(complex x,complex y){
complex z;
y.imaginary*=-1;
z.real=real(seki_complex(x,y))/(y.real*y.real+y.imaginary*y.imaginary);
z.imaginary=imaginary(seki_complex(x,y))/(y.real*y.real+y.imaginary*y.imaginary);
return(z);
}
#endif
でもって、動作確認のプログラムがこちら

#include<stdio.h>
#include"complex.h"

int main(void){
complex x,y;

scan_complex(&x);
scan_complex(&y);

printf("和:");put_complex(wa_complex(x,y));putchar('\n');
printf("差:");put_complex(sa_complex(x,y));putchar('\n');
printf("積:");put_complex(seki_complex(x,y));putchar('\n');
printf("商:");put_complex(shou_complex(x,y));putchar('\n');

return(0);
}
かなりシンプルに出来上がりました。

ちなみに、

complex x={実部,虚部};

って形式で宣言もできますよ。


質問はコメントへ

専門科目、先生が章末問題をそのまま出すと言ったから、何度かやったら答えを覚えてしまって。その上、先生が時間足りないかなとか言って簡単にしたせいで時間とスペースが余ったので、積分の練習をしたり、素数を求めたりしてました。

全然違う途中式から答えが出てきた感じになりました。

金曜日の朝に起きてから土曜日の24時まで起きているという挑戦をしたので結果を報告します。

まずは、起きていられたので成功したと言えます。また、金曜日に体育があり、土曜日はボランティアでトラックに荷物を積み込んだのに寝なかったせいで、未だに足が痛いです。以上