- 締切済み
有理数の演算についてなんですが。。
#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){ //足し算 }のところはそこがわかればできそうなので大丈夫です!! お願いします><
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- akayoroshi
- ベストアンサー率50% (46/91)
関数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; } で、どうですか。
- Tacosan
- ベストアンサー率23% (3656/15482)
「割り算ができる」ことと「構造体のメンバーにアクセスできる」ことの 2つができていればできる. 構造体のメンバーを普通の変数だと思えばいい.
お礼
大変分かりやすい解答をありがとうございました>< 勉強になりました。 ありがとうございます。