• ベストアンサー

C++言語の非常に初歩的な質問(数表)

今、C++言語を勉強中です。 そこで数表を作るみたいな例題があるのですがどうしても思ったとおりになってくれません。 いろんなことを考えましたが自分の力ではどうにもなりません・・・・。 そこで間違いがあれば指摘していただけたらと思い質問させていただきます。 以下がそのプログラム?です。よろしくお願いします。 #include<iostream.h> #include<math.h> #include<iomanip.h> main() { int n ; double n3 , n5; cout << setw(5) << "n" << setw(10) << "1/n" << setw(10) << "n^1/3" << "\n"; cout << setiosflags(ios::fixed); for(n=1 ; n<=25 ; ++n) { n3=1/n ; n5=pow(n,1/3) ; cout << setw(5) << n << setw(10) << setprecision(5) << n3 << setw(10) << setprecision(5) << n5 << "\n" ; } return 0 ; }

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.1

整数型のせいで桁落ちしているとか。 n3、n5の計算式をdoubleでキャストしてみてはどうでしょう。 n5=pow((double)n,(double)1/3) ;

その他の回答 (1)

  • ginkgo
  • ベストアンサー率57% (4/7)
回答No.2

doubleを使う場合はたとえ整数でもすべて小数点付きにしてください。 #include<iostream.h> #include<math.h> #include<iomanip.h> main() { double n, n3 , n5; cout << setw(5) << "n" << setw(10) << "1/n" << setw(10) << "n^1/3" << "\n"; cout << setiosflags(ios::fixed); for(n=1.0 ; n<=25.0 ; ++n) { n3=1.0/n ; n5=pow(n,1.0/3.0) ; cout << setw(5) << n << setw(10) << setprecision(5) << n3 << setw(10) << setprecision(5) << n5 << "\n" ; } return 0 ; } 結果はこんな風です。 n 1/n n^1/3 1.000000 1.00000 1.00000 2.00000 0.50000 1.25992 3.00000 0.33333 1.44225 4.00000 0.25000 1.58740 5.00000 0.20000 1.70998 6.00000 0.16667 1.81712 7.00000 0.14286 1.91293 8.00000 0.12500 2.00000 9.00000 0.11111 2.08008 10.00000 0.10000 2.15443 11.00000 0.09091 2.22398 12.00000 0.08333 2.28943 13.00000 0.07692 2.35133 14.00000 0.07143 2.41014 15.00000 0.06667 2.46621 16.00000 0.06250 2.51984 17.00000 0.05882 2.57128 18.00000 0.05556 2.62074 19.00000 0.05263 2.66840 20.00000 0.05000 2.71442 21.00000 0.04762 2.75892 22.00000 0.04545 2.80204 23.00000 0.04348 2.84387 24.00000 0.04167 2.88450 25.00000 0.04000 2.92402 Press any key to continue

twings
質問者

お礼

お二方にまとめてお礼申し上げます。 どちらの方法でもうまくいきました。 これからもがんばっていきたいと思います。 ポイントは回答してくださった順番につけたいと思います。 本当にありがとうございました。

関連するQ&A