以下のソースコードを改造し、複素数型 (dcomplex) に複素値を代入する関数 dcplxSet を実装せよ。この例ではz に 1.0 + 2.5 i を代入している。
/* Drill 11-1 */
#include<stdio.h>
/* 構造体の宣言 */
typedef struct{
double re;
double im;
} dcomplex;
/* 関数のプロトタイプ宣言 */
int dcplxPrint(dcomplex z);
/* ここに dcplxSet のプロトタイプ宣言を追加 */
/*---------------------*
Main
*---------------------*/
int main(void){
dcomplex z;
z = dcplxSet(1.0, -2.5); /* ここで使っている関数を定義する */
dcplxPrint(z);
printf("\n");
}
/* 以下 関数の定義 */
int dcplxPrint(dcomplex z){
printf("%.2f + i(%.2f)",z.re, z.im);
return(0);
}
/* ここに dcplxSet の定義を追加 */
以下のプログラム元に、複素数の掛け算を行う関数 dcplxMultiplex を定義することで以下の複素計算を行え。
(1.5 + 3.4i) x (2.4 - 8.0i)
ちなみに、答えは 30.8 - 3.84i です。
また、課題1 で使用している関数 dcplxSet を使用して良い。
/* Drill 13-2 */
#include<stdio.h>
/* 構造体の定義 */
typedef struct{
double re;
double im;
} dcomplex;
/* プロトタイプ宣言 */
int dcplxPrint(dcomplex z);
dcomplex dcplxSet(double real, double imag);
/* ここで dcplxMultiplex のプロトタイプ宣言 */
/*---------------------*
Main
*---------------------*/
int main(void){
dcomplex x, y, z;
x = dcplxSet(1.5, 3.4); /* <- 課題 13-1 で定義した関数ね */
y = dcplxSet(2.4, -8.0);
z = dcplxMultiplex(x,y); /* <- ここで使っている関数を定義する */
printf("(");
dcplxPrint(x);
printf(") x (");
dcplxPrint(y);
printf(") = ");
dcplxPrint(z);
printf("\n");
return(0);
}
int dcplxPrint(dcomplex z){
printf("%.2f + i(%.2f)",z.re, z.im);
return(0);
}
dcomplex dcplxSet(double real, double imag){
dcomplex z;
z.re = real;
z.im = imag;
return(z);
}
/* ここに dcplxMultiplex の定義 */
課題3
(教科書 演習 12-3 (p. 318))
int 型と long 型と double 型の値をキーボードから読み込んで、その値をメンバとしてもつ xyz 構造体の値を返却する関数を作成せよ。
struct xyz scan_xyz() {
/* ..... */
}
課題4 (チャレンジ課題)
(この課題は「チャレンジ課題」として、提出しなくても減点はありません。構造体に対する理解も必要ですが、三点の座標から三角形のアルゴリズムを求めるアルゴリズムをどのように作るか、というところも面白いと思います。)
1. まず、二次元座標(x, y) を表現する double 型の構造体 Xypoint を定義せよ。
2. 次に、三つのXypoint型の構造体の変数を受け取り、それらを頂点とする三角形の面積を計算し、戻り値として戻す関数 double triangle_area(Xypoint xy1, Xypoint xy2, Xypoint xy3){...} を定義せよ。
3. さらに、main 関数の中で (x, y)座標の点を三つ受け取り、triangle_area を用いてそれらを頂点とする三角形の面積を計算し表示せよ。
さらにオプション課題
これも提出なし、採点対象外です。
興味のあるひとは挑戦してみてください。結構難しい。構造体以外にも、いままでやってきたことの復習にもなます。
テキスト p. 320 演習12-4
テキスト p. 325 演習12-5
解答例 (パスワード)