• ベストアンサー

C言語もしくは算数の問題

aに消費税、bに税抜価格で 税込価格を小数点切り捨てで出力しなさいという問題で 以下のようにしたのですが不合格でした a=8, b=126 の答えは136と正解になるのですが、他の検証でバツが出てしまいます どこが間違ってるのか解りません よろしくおねがいします #include <stdio.h> int main() { float a, b; scanf("%f %f", &a, &b); printf("%.f\n", b*(a/100+1)); return 0; }

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

  • ベストアンサー
  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.4

%.0fは四捨五入とは限りません。 この処理でC言語自体に規定はなかったはずで、ieee754ルールで処理している事例が多いだけという状況だったはずです。 浮動小数点の小数点以下切り捨てはfloor関数を使って下さい。 四捨五入はround関数、切り上げはceil関数です。 切り捨て手段として整数型に変換するのはやりがちな手段ですが、指定の整数型が持てる値の範囲がコンパイルターゲットやコンパイラに依存するという別の問題を抱える事になるので、目的が整数型に変換するのでない限りお勧めしません。

sus-sus
質問者

お礼

ありがとうございました

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

> どうすれば切り捨てになりますか? intにキャストして、整数化するといいでしょう。

sus-sus
質問者

お礼

さようなら

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

切り捨てでなく、四捨五入して表示しています。 例えば、 8 99 だと、税額7円で106円になるべきところ、107円になってしまう。

sus-sus
質問者

お礼

どうすれば切り捨てになりますか? %.0fだと切り捨てだと思ってたのですが四捨五入なんですね

  • hahaha8635
  • ベストアンサー率22% (800/3609)
回答No.1

>>税込価格を小数点切り捨てで出力しなさいという問題 切り捨ててないから

sus-sus
質問者

お礼

つまりどういうことですか? 出力したものは切り捨てになってるように見えるのですが その辺の説明をお願いします

関連するQ&A

  • C言語の問題

    最近プログラミングの勉強を始めました。 キーボードから入力する整数を「商品の税抜き価格」とする。 税率を5%とし「税込価格(整数)」、「税金(整数)」を計算し画面に表示せよ。(端数は切り捨て) という問題なんですが #include <stdio.h> int main(void) { int data, result, a; data = scanf("%d", &data); result = data * 1.05; a = result - data; printf("%d %d\n", a, result); return (0); } このように考えたのですが、全くうまくいきません。 どこが間違っているかなど、ご指導をお願いしたいと思います。 また、上のものを実数(浮動小数)を読み込み、それを2倍した結果を表示するようにしたいのですが、これに関するアドバイスもいただけると嬉しいです。 初歩的な質問になってしまいますが、回答よろしくお願いします。

  • C言語の問題

    最近プログラミングの勉強を始めました。 キーボードから入力する整数を「商品の税抜き価格」とする。 税率を5%とし「税込価格(整数)」、「税金(整数)」を計算し画面に表示せよ。(端数は切り捨て) という問題なんですが #include <stdio.h> int main(void) { int data, result, a; data = scanf(\"%d\", &data); result = data * 1.05; a = result - data; printf(\"%d %d\\n\", a, result); return (0); } このように考えたのですが、全くうまくいきません。 どこが間違っているかなど、ご指導をお願いしたいと思います。 また、上のものを実数(浮動小数)を読み込み、それを2倍した結果を表示するようにしたいのですが、これに関するアドバイスもいただけると嬉しいです。 初歩的な質問になってしまいますが、回答よろしくお願いします。

  • c言語で

    c言語で /*a==bのとき商と余を求めるそれ以外は積を求める*/ # include<stdio.h> main () { int a,b,seki,sho,joyo; printf("aとbを入力してください\n"); scanf("%d %d", &a,&b); if(a==b) printf("sho=%d\n",(a/b)); printf("joyo=%d\n",(a%b)); else printf("seki=%d\n",(a*b)); return(0); } はどこがおかしいでしょうか? あと /*小数点*/ # include<stdio,h> main () { float a,b,seki,sho,joyo; printf("%f %f",&a,&b); if(a>b) printf("sho=%f4.3\n",(a/b)); printf("joyo=%f4.3\n",(a%b)); else printf("seki=%f4.3\n",(a*b)); return (0) にいたってはエラーの嵐なのですがどうすればいいでしょうか

  • C言語について

    「キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。」という問題で私は、 #include <stdio.h> void main(void) { float A; float a,b,c,d,e,f,g,h,i,j; printf("実数を入力してください:"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&d); scanf("%f",&e); scanf("%f",&f); scanf("%f",&g); scanf("%f",&h); scanf("%f",&i); scanf("%f",&j); A=(a+b+c+d+e+f+g+h+i+j)/10; printf("平均は%fです.\n",A); } と考えたのですが、もっとすっきりとしたプログラムはないのでしょうか?もっとシンプルにしたいのです。教えて下さい。よろしくお願いします。

  • C言語のプログラムが出来ず困っています(初心者)

    C言語で税抜価格を5件入力してこれらの合計金額に加算される消費税率8%と税込売上総額を表示するプログラムをやっているのですが、ビルドすると「error C4700: 初期化されていないローカル変数 '' が使用されます」とエラーになり前へ進めないです。 一応作ってみたものが↓ ↓ #include <stdio.h> main() { float a, b, c, d, e, zeiritu, zeikomigoukei, zeikin; /*5件の税抜き価格a,b,c,d,e・税率・合計金額*/ printf("商品価格(税抜)を5件入力する"); scanf_s("%f", &a, b, c, d, e); /*5件の税抜き金額を入力*/ printf("税率を入力する"); scanf_s("%f", &zeiritu); zeikomigoukei = (a + b + c + d + e)*(100 + zeiritu) / zeiritu; /*税込合計=5件の値段×(100+税率)÷税率*/ zeikin = zeikomigoukei - (a + b + c + d + e); /*加算される消費税額=税込合計-税抜合計金額*/ printf("加算される消費税額は%f.です\n,zeikin"); printf("総売上額は%f.です\n,goukei"); } です。C言語が全く分からない者がやったものでうまく作れないです。 どなたかこのプログラムのやり方わかる方いますでしょうか。色々調べまくったのですがそろそろ限界です。最後の手段としてOKWaveで投稿させていただきました。 どうかよろしくお願いします。

  • C言語で・・

    実数データを入力し、小数点以下四捨五入したときの値を表示せよ。 自分では、以下のように作りました。 #include<stdio.h> int main(void) { float f_a,s; int i_a; printf("実数データを入力してください"); scanf("%f",&f_a); i_a=(int)f_a; s=f_a-i_a; if(s>=0.5){ i_a=i_a+1; } printf("%fを四捨五入すると%dです",f_a,i_a); return 0; } 他の作りかたがあれば、教えていただきたいのですが。IF文などの範囲でお願いします。

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

  • C言語の基本的な質問ですが・・

    #include<stdio.h> #include<math.h> int main() { double a,b; b=2; a=b; printf("%f",a); return(0); } このプログラムで、a=b;のbには 2.000000が入ってると考えればよいでしょうか? それとも2が入っていると考えるべきでしょうか? bはfloat型なんで、前者だと思ったのですが。 よろしく願いします。

  • C言語について

    C言語についてなのですが、error C4700: 初期化されていないローカル変数 'dright' が使用されますという表示がでてしまいます。今地下鉄の環状線の距離を計算して求めるというプログラミングを作っています。どうすれば直るのでしょうか。また、おかしいと思われる場所があれば教えていただきたいです。下がぼくが書いたソースです。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> float d[15] = { 0.0, 0.0, 1.6, 3.0, 4.3, 5.4, 8.2, 8.9, 9.7, 14.1, 15.1, 17.2, 20.7, 22.2, 23.4 }; float dright(int a, int b)//右回りのときの計算 { if (d[a]<d[b]) { return d[b] - d[a]; } else { return d[a] - d[b]; } } int main(void) { int a, b; float dright, dleft; printf("出発駅番号の入力"); scanf("%d", &a); printf("到着駅番号の入力"); scanf("%d", &b); if (a = b)//出発駅と到着駅が同じ場合 { printf("出発駅と到着駅が同じです。もう一回やり直してください。"); } else { dleft = 26.4 - dright;//左回りの計算 if (dleft > dright)//左回りのほうの距離が長い場合 { printf("%f", dright);//右回りの距離を表示 } else { printf("%f", dleft); } } return 0; } どなたかお願いします。

  • c言語についての質問です。

    #include<stdio.h> int main(void){ double a,b; int c; printf("Type two numbers\n"); scanf("%lf",&a); scanf("%lf",&b); printf("Select 1)addition, 2) subtraction, 3)multiplication or 4)division\n"); scanf("%d",&c); switch(c){ case1: printf("%.6f + %.6f = %.6f",a,b,a+b); break; case2: printf("%.6f - %.6f = %.6f",a,b,a-b); break; case3: printf("%.6f * %.6f = %.6f",a,b,a*b); break; case4: printf("%.6f / %.6f = %.6f",a,b,a/b); break; default: printf("Error! Select 1, 2, 3 or 4\n"); break; } return 0; このプログラムをコンパイルして実行しても 正しく動きません。なぜですか?

専門家に質問してみよう