• 締切済み

有理数の演算についてなんですが。。

#include <stdio.h> typedef struct{ int bunshi; int bunbo; }rat; rat rat_num(int x,int y){ rat r; r.bunshi=x; r.bunbo=y; return(r); } void rat_print(rat x){ printf("%d/%d,"x.bunshi,x.bunbo); } int gcd(int n, int m) { int res; res = n % m; if (res == 0) return m; return gcd(m, res); } rat rat_normalize(rat x){//ここです** } rat rat_plus(rat x, rat y){ //足し算 } int main() { rat x={1,3}; rat y={3,4}; rat z; z=rat_plus(x,y); printf("1/3+3/4= ");rat_print(z);printf("\n"); } 分数の足し算のプログラムをつくりたくてだいたいのそと枠はできたのですが int gcd(int n, int m)のところではnとmの最大公約数を求めるものでたぶんここはできていると思うのですが、rat rat_normalize(rat x)のところでxを約分して返す。(x.bunshiとx.bunboをそれらの最大公約数で割る)っていうことをしたいんですけど、構造体を勉強しはじめたばかりでどのように書いたらよいかわかりません。教えてください。 rat rat_plus(rat x, rat y){ //足し算 }のところはそこがわかればできそうなので大丈夫です!! お願いします><

みんなの回答

回答No.2

関数gcd(a,b)が正しくaとbの最大公約数を返すと仮定して、 rat rat_normalize(rat x){ rat z; int d; d=gcd(x.bunshi,x.bunbo); z.bunshi/=d; z.bunbo/=d; return z; } で、どうですか。

u_f_o_pech
質問者

お礼

大変分かりやすい解答をありがとうございました>< 勉強になりました。 ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「割り算ができる」ことと「構造体のメンバーにアクセスできる」ことの 2つができていればできる. 構造体のメンバーを普通の変数だと思えばいい.