はじめまして。大学で週一でC言語を習っている全くの初心者です。
過去ログを確認したのですがなかったようなので質問させていただきます。
タイトルの通りなのですが「入力される実数が負の数の場合」に四捨五入するプログラムを作れ!とのことなんですが・・・。
正の数の四捨五入のプログラムは作りましたが、逆がわかりません。
-------------------------------------------------------------
//入力された正の実数を四捨五入して整数にするプログラム
#include <stdio.h>
int main(void)
{
int seisu;
double jissu;
printf("実数=");
scanf("%lf" ,&jissu);
seisu =jissu + 0.5;
printf(" %lf の四捨五入は %d です。\n",jissu,seisu );
}
------------------------------------------------------------
ちょこっと変えればいいのかなぁ・・・とは思うのですが・・・。
ご教授お願いします。
ちなみにOSはXP、使っているコンパイラはbcc32というやつです。
No.6ベストアンサー
- 回答日時:
小学生で教わる形式なら、
seisu =jissu + 0.5;
でOKです。数直線上で考えれば負数だったとしても四捨五入はいつもこうなります。そのままのプログラムで問題ありません。
(-1.3なら-1に、-2.5なら-2に、-0.5なら0に丸めます。真ん中の場合は必ず大きいほうに丸められます。)
ただし、JISやISOなんかでは、定義が変わります。
ちなみに、JISやISOの定義だと
(1) 一番近い丸め結果候補が1つだけなら,その数に丸める,
(2) 一番近い丸め結果候補が2つある場合は,末尾が偶数のものに丸める,
(3) 丸め処理は1段階で行なわなければならない.
(引用: http://www.okada.jp.org/RWiki/index.php?JIS%2CIS … )
となっています。
また、特殊な例としては、負数の場合は小さいほうに丸めるという方法をとる場合もあります。
if(jissu < 0){/*負数の場合*/
seisu =jissu - 0.5;
}else{/*正数の場合*/
seisu =jissu + 0.5;
}
これがその丸め方になると思います。(これは四捨五入と呼べるか怪しいので、参考にしないほうが良いと思います)
極めて細かいところまで精度を求めるようなものでない限り、小学生方式の四捨五入で問題ないと思います。
>決まった教場でしかプログラムが実行できないために確かめようがない
bcc32はBorlandからフリーでダウンロードできるコンパイラです。あなたでも環境を整えることはできると思われますので、やろうと思えば確かめることはできるはずですよ。↓
http://www.borland.com/jp/products/cbuilder/free …
ぜひ試してみると良いと思います。
回答ありがとうございます。
昨日提出だったのですが結局
seisu =jissu - 0.5;
にしてしまいました。
seisu =jissu + 0.5;の場合に-1.1の四捨五入が0になってしまうというものの解決方法がわからなかったので・・・。
実はBorlandのコンパイラは入れてみたのですが簡単には動いてくれなかったので大学でなんとかやってみました。
if文を使って作ってくださったものは今後他の方の参考になると思います。
コンパイラの紹介等含め、親切な回答をありがとうございます!
No.7
- 回答日時:
#6で紹介されている方法は、通常「JIS丸め」と呼ばれるもので、標準Cライブラリの多くの実装では、四捨五入を必要としている箇所では、この方式を用いている場合が多いと思います。
以下は、JIS丸めを実現するためのコードです。ほとんど反則に近いですが、一応参考までに書いておきます。
sprintf(buf, "%.0f", jissu);
sscanf(buf, "%d", &seisuu);
今後四捨五入で悩む方がいらっしゃったら非常に参考になる回答だと思います。ちょっと自分ではまだ理解できなくて残念なんですが・・・。
親切に回答ありがとうございます。
No.5
- 回答日時:
「負の数の四捨五入」の定義を出題者に確認してください。
あとはそれに従って
seisu =jissu + 0.5;
の部分を変えるだけです。
単純に考えると、正負によってifで分岐させる必要があるかもしれません。
「負の数の四捨五入」の定義ですが、問題を出された時点で濁されたのでそこは自分で考えろ、ということだと思うのですが・・・。
あくまで負の数を入力した場合だけですので分岐等は必要ないのですが、実際にはそういったやり方が四捨五入のプログラムとしては正しいですよね。
親切な回答ありがとうございます。
No.4
- 回答日時:
負数の四捨五入については2通りの考えがあるので
-1.5の四捨五入を-1とするか-2とするかで違ってきます
五入を繰り上がりと定義すると-1 > -1.5 > -2ですので繰り上がりは-1になります。
2通りのプログラムを作っておいたほうがいいかもしれませんね
やはり負の数になると2通り考えていいのでしょうか?
昨日提出だったのですが結局迷ったあげく
-1.5 → -2.0
のほうにしてしまいました・・・。
親切な回答ありがとうございます。
No.3
- 回答日時:
fabs は、絶対値を求める関数です。
私の言ってる方法だと、例えばこんな感じかな。
特にやり方にはこだわらずに色々やってみればいいかと思います。
----------------------------------------------------------------
#include <stdio.h>
#include <math.h>
int round_aux(double num){
//正の実数を四捨五入する
return (int)(num + 0.5);
}
int main(void){
int seisu;
double jissu;
printf("実数=");
scanf("%lf" ,&jissu);
//正の実数の四捨五入したものに符号を付ける
seisu = round_aux(fabs(jissu))*(jissu<0 ? -1 : 1);
printf(" %lf の四捨五入は %d です。\n",jissu,seisu );
return 0;
}
わわ!わざわざ新たに作っていただいてありがとうございます!
しかし講義で習っていないような命令も出てきているので、せっかく書いていただいたのに活かせなくて残念です。
最初の質問にも書いたとおり、初歩の初歩ですので少しの変更でできるとは思っているのですが・・・もう少し考えてみます。ありがとうございました。
No.1
- 回答日時:
例えば正の数のとき、以下のようになるはずですね。
--
1.0→1
1.4→1
1.5→2
1.9→2
2.0→2
--
では負の数のときはどうなるべきでしょうか。
それを、正の数のときと比べてみれば、やるべきことが見えてくるはずです。
#ヒント:四捨五入と切り捨て、或いは整数化の違いに注意
この回答への補足
回答ありがとうございます。
正の数のときは確かにそうなりました。
負の数 -1.5の場合は-2.0でしょうか?
となると
seisu =jissu + 0.5; を
↓
seisu =jissu - 0.5;
にすればいいのかな・・・。
実は大学の決まった教場でしかプログラムが実行できないために確かめようがないのです。
整数化の違いに注意ということはまだ変える部分があるのでしょうか?
よろしければお付き合いお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
負の整数における小数点以下の切り上げと切り捨て方法
数学
-
「#undef」と「#define」の使い方について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
5%割引の際の、小数点以下の扱...
-
今投稿して解決したのですが 更...
-
エクセルでの小数点以下切り捨...
-
なぜ消費税10%は×1.1なのですか...
-
時給制の業務委託時、請求書の...
-
電卓で指数計算できますか?
-
建築業者の自宅建築について
-
確定申告 収支内訳書(不動産)...
-
1個あたりの製産時間を算出した...
-
3980円の税込はいくらですか? ...
-
ニンテンドープリペイドカード...
-
手間代請求の際の消費税の扱い...
-
日当賃金からの「消費税」とい...
-
食材の原価って消費税は含まれる?
-
上代の算出方法を教えて!
-
イートインスペースでコンビニ...
-
480円の税込は何円ですか? 急...
-
アホな質問なのですが、30分を0...
-
法人税・消費税修正申告納付の仕訳
-
増税計画 吸血鬼と 区別が付き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
5%割引の際の、小数点以下の扱...
-
今投稿して解決したのですが 更...
-
駐車場賃料の日割り計算について
-
切り捨てて百の位までのがい数...
-
Access 1000以下を切り捨てる関数
-
Excel有効数字の丸め方「0捨1入」
-
数字の下二桁を削除したい
-
端数処理における「小数以下」...
-
COBOLの計算方法
-
負の数の四捨五入の方法
-
エクセルでの小数点以下切り捨...
-
50銭以下切り捨て51銭以上切...
-
勤務の稼働時間の計算がわかり...
-
雇用保険料の計算式について(E...
-
「未満と以上」使う範囲。
-
INT関数について
-
ACCESSの切り上げ
-
ADOで算術型のRound関数を使いたい
-
切捨てする関数はありますか?
-
小数点 第n位 を切り上げ,切り捨て
おすすめ情報