点の回転 (基礎プロくん:課題2)
平面上の点をあらわす構造体 struct point
(教科書 p.262)を対象として,
これを原点のまわりに反時計回りに90度回転させる操作を考えよう.
数学的には, 点(x, y)は点(-y, x)に移動する.
この処理を行う関数 rotate90 は,
引数として「構造体へのポインタ」をうけとり,
そのポインタを通じて構造体の本物(呼出し側がもっているもの)の
メンバを操作して回転の処理を行う.
関数の定義部分を埋めて, プログラムが動作するようにせよ.
#include <stdio.h>
#include <stdlib.h>
struct point {
double x, y;
};
void rotate90(struct point *p){
/* ここを埋める */
}
int main(void){
struct point pt;
char buffer[256];
gets(buffer);
pt.x = atof(buffer);
printf("%f\n", pt.x);
gets(buffer);
pt.y = atof(buffer);
printf("%f\n", pt.y);
rotate90(&pt);
printf("%f\n", pt.x);
printf("%f\n", pt.y);
return 0;
}
たとえば入力が
2.0
1.0
であれば, 出力は
2.000000
1.000000
-1.000000
2.000000
となる. 出力のはじめの2行は入力データそのままで,
あとの2行が回転の結果である.
(%f での出力なので, 小数点以下6桁表示されている)