はじめまして。大学で週一で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杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
負の整数における小数点以下の切り上げと切り捨て方法
数学
-
C言語での引数の省略方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
5%割引の際の、小数点以下の扱...
-
COBOLの計算方法
-
端数処理における「小数以下」...
-
切捨てする関数はありますか?
-
Access 1000以下を切り捨てる関数
-
ADOで算術型のRound関数を使いたい
-
エクセルでの小数点以下切り捨...
-
小数点 第n位 を切り上げ,切り捨て
-
負の数の四捨五入の方法
-
切り捨てて百の位までのがい数...
-
今投稿して解決したのですが 更...
-
なぜ消費税10%は×1.1なのですか...
-
法人税・消費税修正申告納付の仕訳
-
時給制の業務委託時、請求書の...
-
高速料金を請求する場合の消費...
-
残りの97円はなんでしょうか?
-
1個あたりの製産時間を算出した...
-
電卓で指数計算できますか?
-
何が矛盾しているのかわからない
-
国が実施する入札が税抜きなの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
5%割引の際の、小数点以下の扱...
-
今投稿して解決したのですが 更...
-
駐車場賃料の日割り計算について
-
切り捨てて百の位までのがい数...
-
Excel有効数字の丸め方「0捨1入」
-
勤務の稼働時間の計算がわかり...
-
エクセルでの小数点以下切り捨...
-
Access 1000以下を切り捨てる関数
-
負の数の四捨五入の方法
-
50銭以下切り捨て51銭以上切...
-
COBOLの計算方法
-
小数点 第n位 を切り上げ,切り捨て
-
端数処理における「小数以下」...
-
数字の下二桁を削除したい
-
雇用保険料の計算式について(E...
-
ADOで算術型のRound関数を使いたい
-
BCの長さを四捨五入して小数点...
-
数字の double 型 を int型...
-
ACCESSの切り上げ
-
四捨五入できますか?
おすすめ情報