• 締切済み

C言語で2.5で割った余りを求めるには?

C言語で、xを2.5で割り切れる数値に直すプログラムを作成したいです。つまり5.3なら5、8.1なら7.5というように。これ、結構簡単かなと思ったのですが、floorは2.5だと使えないし、いまいち型宣言も理解していないので、うまくいきません。また%を使う方法もなぜかうまくいきませんでした。どなたか、正しいプログラムを教えてください。もちろん型宣言も含んでいると助かります。

  • yos4
  • お礼率82% (634/771)

みんなの回答

  • furlong
  • ベストアンサー率50% (17/34)
回答No.6

4です。 計算誤差の観点から普通は4に記した式を使いますが、誤差を気にする必要がない場合は、以下の式の方が直感的で理解しやすいかもしれません。 double z = floor (x / y) * y; 切り上げ double zz = ceil (x / y) * y; 切り捨て 他に、コンパイラーによっては、ズバリ、切り捨て、切り上げという関数を備えているものもありますが、移殖性が無いので避けるのが無難です。

yos4
質問者

お礼

回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5

float x; x = 5.3 x = ((x * 10) / (2.5*10)) * 2.5; とか、 x = (int)(x / 2.5) * 2.5; とか、 x = ((x * 10) - (x * 10) % (2.5 * 10)) / 10 他にもあるんでは?

yos4
質問者

お礼

回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

  • furlong
  • ベストアンサー率50% (17/34)
回答No.4

#include <math.h> double x = 5.3; double y = 2.5; double z = x - fmod (x, y); 切り捨て double zz = x == z ? x : x + y; 切り上げ コンパイル方法 cc source.c -lm 蛇足ですが、実数を扱う場合には、負数や無限大の取り扱いについて、個別に慎重に検討しなければなりません。(xかyが負の場合に切り捨てたいのか切り上げたいのか/xとyが両方ともゼロのときは何をしたいのか/無限大の場合は何をしたいのか)

yos4
質問者

お礼

回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.3

こんな方法もあるのでは? x = (x * 10 % 25) * 25 / 10; あるいは x = (x * 10 % 25) * 2.5; どちらも未検証、自信なしです。

yos4
質問者

お礼

回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

2.5*4=10 なので、元の数を4倍して10の倍数に丸めてから4で割るといい感じでは? また、% 演算子は整数の剰余を求めるはずだったと… float a; float b; printf("n="); scanf("%f",&a); b=(int)((a*4)/10.0)*10.0/4.0; printf("\n%f -> %f\n",a,b);

yos4
質問者

お礼

回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

>floorは2.5だと使えないし flootのことですか? 2.5は使えますよ。 int型に宣言した変数に答えを入れてやればいいかと思うんですが。 int i,jとかにしておいて float x,zにし i=x/2.5を計算して z=2.5*i としてやればいいかと。

yos4
質問者

お礼

VIsial C++のリファレンスを見たところ、floorは存在します。逆にflootは存在しませんでした。 種類が違うものをご使用されているのかもしれません。  回答ありがとうございました。ただ、質問翌日、配置換えになりまして、皆様の回答を試すことができなくなりました。本当に感謝しております。申し訳ありません。

関連するQ&A

  • C言語

    今、C言語の勉強をしています。しかし、構文は、理解しているのですが、なかなかプログラムを作成できません。どうすれば、プログラムを作成できますか?是非教えてください。

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • 余りを求める問題

    初めての質問なのでカテゴリが違うかもしれませんが すみません。 a^b を 10^c で割った余りを求めるプログラムを作成したいのですが、 以下の条件を満たしながら解く方法が分かりません。 どなたかご教授下さい。 解き方さえ分かれば言語は不問です。 1≦a≦999999999 1≦b≦999999999 1≦c≦4 宣言した変数は11桁以上の値は保持できない。

  • C++言語について

    ファイルから数値を読み込み、ベクトルの内積を計算するということに挑戦しています c0~c3の4つのベクトルから、いくつかを選びたし合わせたxを考える そのxをパターンベクトルに分解するプログラムを作成 R=x・c0 を全てのc0~c3まで行い、xがどのパターンベクトルからできているかを調べる と言う問題です どなたか分かる方がいたら、教えてください

  • 四次方程式をC言語を用い解きたいです.

    C言語は一応一通りのことは理解できます. 四次方程式を数値解析もしくは解の公式を用いた解法をプログラムに起こしたいです. 過去の質問も見てみましたがしっくりくるものがありませんでした. みなさんにオススメプログラムがございましたら, 教えていただきたいです. よろしくおねがいします. 四次方程式ではなくn次元でも結構です. 言語はCでお願いします.

  • c言語で変数の型の有効範囲を調べたい

    c言語で、変数の型が扱える数値の範囲を調べる方法や計算式などありますか?回答よろしくお願いします。

  • C言語の文法(変数宣言)について

    C言語の文法の質問をさせていただきます。 int hoge; などと宣言しますが、このintというのは型指定子というものでしょうか。 int *piyo; という宣言のintも型指定子でしょうか。 この場合、* はなんと呼ばれるのでしょうか。(アスタリスクという記号です、という回答は期待していません。(^_^;)) ポインタ宣言子、でいいのでしょうか。これは「演算子」ではないんですよね? char c[10]; という宣言の[ ]やその中に入っている10はなんと呼ばれるのでしょうか。 いま、手元に「新ANSI C言語辞典」という本があるのですが、説明を読んでもよくわかりません。

  • c言語 関数宣言

    c言語で書かれたプログラムを見ていると、ちょっとわからない関数宣言がでてきました。 関数宣言をしているのだと思うのですが、これはいったいどういうことなのでしょうか。 grad_pf(x, a, yfit, dyda, ma) float x; float a[]; float *yfit; float dyda[]; int ma; {            処理・・・・・・・・ } 中括弧の前で宣言された変数はどういったものなのでしょうか。 よろしくお願いいたします。

  • C言語の学習法について

    こんにちは。私は大学二年生で今授業でC言語を学んでいます。 内容は数値計算を行っております。(二分法とかガウス消去法とか) 授業体系としては、プログラムの作成をするというものなのですが、私はプログラムを作るのが苦手です。 なので、自己学習をしようと思うのですが、効果のある勉強法とはどういったものなのでしょうか? プログラムについては自分で手を動かした数だけ上達していくといわれているのでなにか作成しようと思っています。 そこでなのですが 数値計算でアルゴリズムが頭に浮かんでこないというのは、もともとの知識不足なのだからゲーム(じゃんけん)などのプログラムを作る参考書をやるべきだ。 数値計算という内容に慣れていないのが原因だから数値計算に特化した参考書をすすめていくべきだ。 この二つの考えがあります。どちらにするべきでしょうか? プログラムを見ればアルゴリズムが理解できるのですが、 その逆、 つまり、問題からどういったアルゴリズムを作成し、それをどうプログラムとして作るのか。ができません。 まとまりのつかない文章で申し訳ございません。どんな些細なことでもいいのでなにかありましたら是非ともアドバイスよろしくお願いします。

  • C言語プログラミングで困っています。助けて下さい。

    C言語プログラミングで困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示       部分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という問題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。C言語でお願いします

専門家に質問してみよう