• 締切済み

販売金額の合計などを求める問題

koko_u_uの回答

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.6

>%.0lfとすることで小数点以下第1位を四捨五入して出力されるので大丈夫かと思っていたのですが、 > 何か考え方が間違っているのでしょうか。 多分、C の規格上は小数点以下を「丸める」としか定めておらず、 必ずしも四捨五入した結果が得られるとは言い切れないと思います。 自前でコードを書いた方が処理の意図が明確になって良いと思いますよ。

maryu1112
質問者

お礼

回答ありがとうございます。 そうだったんですか。 今後気をつけようと思います。

関連するQ&A

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • 答えがおかしい

    配列と関数を使って教科ごとの平均点を求めるC言語のプログラムを 作りました。しかし、結果がおかしくいろいろ考えてみたのですが、 よくわからないので質問に出すことにしました。 作ったものは以下です。どうすればよいでしょうか? #include <stdio.h> #define NUMBER 3 /*--- 要素数noの配列の平均値を求める ---*/ double ave_of(int vb[], int no) { int i, sum, ave; for (i=1;i<no; i++) sum+=vb[i]; ave=(double)sum/NUMBER; return(ave); } int main(void) { int i; int a[NUMBER]; int b[NUMBER]; int c[NUMBER]; double ave_a, ave_b, ave_c; printf("%d人の点数を入力してください。\n",NUMBER); for(i=0;i<NUMBER; i++){ printf("[%d番]理科:",i+1); scanf("%d",&a[i]); printf("   数学:"); scanf("%d",&b[i]); printf("   社会:"); scanf("%d",&c[i]); } ave_a=ave_of(a, NUMBER); ave_b=ave_of(b, NUMBER); ave_c=ave_of(c, NUMBER); printf("【理科】平均点:%.1f\n", ave_a); printf("【数学】平均点:%.1f\n", ave_b); printf("【社会】平均点:%.1f\n", ave_c); return(0); } 結果は例えば45.2 というような感じで出したいです。

  • プログラム作成が出来ません

    プログラム作成の課題でエラーが出て進めません (1)~(3)までだけなら作成できるのですがどうしても(4) を表示させることができません^^; (1)3~99までの奇数を7*7の2次元配列に読み込み表示 (2)(1)の配列の行と列を入れ替えたものを表示 (3)全要素の平均 (4)要素の中から9の倍数を選び出し表示 添削よろしくお願いします。 #include <stdio.h> main() { int a[7][7]; int i,j,ave,sum; int c; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { a[i][j] =3+(j*2)+(i*14); } } for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { for(c=0; c<49; ++c) { if((3+(j*2)+(i*14))%9==0) { c=3+(j*2)+(i*14); } } } } sum=0; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { sum=sum+a[i][j]; } } ave=sum/7/7; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[i][j] ); } printf( "\n" ); } printf("\n"); for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[j][i] ); } printf( "\n" ); } printf("\n"); printf("average=%d\n",ave); printf("\n"); for(c=0; c<49; ++c) { printf("%d",c); } } 長々と失礼しました・・・

  • c++について

    以下のプログラムをコンパイルしてみたのですが、うまく作動しません。 どこかに欠陥があるのでしょうか? 分かる方、よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <math.h> #pragma warning(disable : 4996) #define N 3 typedef struct Shop { char name[10]; int sale; } Shop; void pp(Shop*a) { int i; printf("\n"); for(i=0; i<N; i++,a++) printf("Name , Sale = %s ,\t%d\n",a->name,a->sale); printf("\n"); } int main(void) { double sum; //売上高合計 double ave; //売上高平均 double hensa1; /* double hensa2; */ /* double sd; //標準偏差 */ Shop*data,*t; int i,j; data=t=malloc(sizeof(Shop)*N); for(i=0; i<N; i++,t++) { printf("店舗名を入力してください\n"); scanf("%s", &t->name); printf("売上高を入力してください。\n"); scanf("%d", &t->sale); sum += t->sale; } ave = sum/N; for(i=0; i<N; i++,t++) hensa1 += (pow(ave-t->sale, 2)); t=malloc(sizeof(Shop)); for(i=0; i<N-1; i++) { for(j=i+1; j<N; j++) { if(data[i].sale > data[j].sale) { t[0]=data[i]; data[i]=data[j]; data[j]=t[0]; } } } printf("\n"); printf("%g\t:Sum\n%g\t:Average\n%g\t:Standard deviation\n", sum,ave,sqrt(hensa1)/N); pp(data); return 0; }

  • 100x100行列の平均値を求めたい

    const int SIZE=100; for(int i=0; i< SIZE; i++){ for(int j=0; j< SIZE; j++){ fin >> array[i][j]; } } double sum=0.0; double ave=0.0; int J =3; for(int i=0; i< SIZE; i++){ sum += array[i][J]; } ave = sum / SIZE; cout << sum << endl; cout << ave << endl; 100x100行のファイルを読み込んで、すべての行の足し算および平均値を求めたいと思います。上のようある列(または行)を固定して求めることは出来るのですが、一度に0~99までの足し算および平均値を求めるやり方はどのようにしたらよろしいのでしょうか?たぶんfor文を使えば、できるのかなとは思うのですが、なかなか思うように行きません。 アドバイスよろしくお願いいたします。

  • C言語でmからnまでの合計を求めるプログラム

    これで動かないのですが、何が違っているのか、教えていただけますか。 #include <stdio.h> int main(void) { int m, n, sum, i, w ; printf("mからnまでの合計を求めます\n\n"); printf("m >> "); scanf(" %d", &m); printf("n >> "); scanf(" %d", &n); sum=0; if(m>n){ w=m; m=n; n=w; } sum=0; i=m; while(i<=n){ sum=sum+i; i=i+1; } printf("%d から %d の合計 = %d\n",m,n,sum); return 0; }

  • c言語

    n人の名前、と国数英の点数を読み込み各人の平均点、標準偏差を求め見やすく出力するぷろぐらむです osはlinuxでコンパイラはgccです。 変数が多くなってしまいよくわかりません。 もっと簡単になりますか? #include<stdio.h> #include<math.h> #define N 50 main() { int eng[N], jap[N], math[N], n=0, i=0; char name[N][12]; double sum[N], SUM, sum1, sum2, sum3, ave1, ave2, ave3, vari, s_devi; printf("名前 合計点"); while(scanf("%s %d %d %d",&name[n],&eng[n],&jap[n],&math[n]) != EOF) { sum[i] = eng[n]+jap[n]+math[n]; sum1 += eng[n]; sum2 += jap[n]; sum3 += math[n]; printf("%-12s%4d",name[n], sum[i]); n++; i++; } ave1 = sum1/n; ave2 = sum2/n; ave3 = sum3/n; for(i=0; i<n; i++) { SUM += (eng[i]-ave1)*(eng[i]-ave1); } vari = SUM/n; s_devi = sqrt(vari); printf("English\n average = %f\nstandard deviation = %f\n\n",ave1,s_devi); for(i=0; i<n; i++) { SUM += (jap[i]-ave2)*(jap[i]-ave2); } vari = SUM/n; s_devi = sqrt(vari); printf("japanese\n average = %f\nstandard deviation = %f\n\n",ave2,s_devi); for(i=0; i<n; i++) { SUM += (math[i]-ave3)*(math[i]-ave3); } vari = SUM/n; s_devi = sqrt(vari); printf("math\n average = %f\n standard deviation = %f\n\n",ave3,s_devi); }

  • 平均の問題(2)

    間違って前回の質問を締め切ってしまったので、もう一度お願いします。 申し訳ありません。 C言語の問題です。 1つの整数n(最大20)をキーボードから入力する。 続いてn人分の身長をキーボードから入力する。 平均身長、それぞれの身長、その身長と平均身長との差を1行ずつ出力せよ。 #include < stdio.h > int main(void) { int i, n; int s[20]; int sum; sum=0; scanf("%d", &n); for(i=0; i<n; i++){ if(n<=20){ scanf("%d", &s[i]); sum += s[i]; } } printf("平均:%f\n", (double)sum/n); for(i=0; i<n; i++){ printf("%d\n", s[i] ); printf("%f\n", s[i]-(double)sum/n); } return(0); } という風に考えたのですが、これだと結果が1行で表示されません・・・。 1行で表示するにはどうしたら良いのでしょうか? 初歩的な質問ですみません。 回答よろしくお願いします。

  • c言語で3人分の合計と平均を出を出したいのですが・・・

    #include <stdio.h> void main (void) { int i; int sum = 0; int count[3]; char ss[3][30]; for (i = 0; i < 3; i++){ printf("氏名: "); gets(ss[i]); printf("得点: "); scanf("%d" , &count[i]); } for (i = 0; i < 3; i++){ sum = sum + count[i]; } printf("\n\n"); printf("合計 :%d point\n" ,sum); printf("平均点:%f point\n" ,(double)sum/i); } このようなものを作ったのですが、実行すると1人分を入力したあと2人目の入力部分の表示が「氏名:得点:」となってしまい、氏名入力を飛ばし得点入力になります。 どのようにすれば2人目の氏名入力を飛ばさずに進行するのか教えてください。

  • javaでのプログラミング

    javaで平均と分散を求めるプログラムを作っているのですが、 分散の出力がうまくいきません。(出力が0になってしまいます) プログラミングとしておかしいところがあれば、教えていただけませんでしょうか 以下プログラムソースです。 public class test{ public static void main(String[] args){ int i,rand; double ave=0 double bun=0 double sum1=0 double sum2=0; int [] data = new int[10]; rand=(int)(Math.random()*100+0.5); for(i=0;i<10;i++){ data[i]=rand; } for(i=0;i<10;i++){ sum1+=data[i]; sum2+=data[i]*data[i]; } ave=sum1/10; bun=(sum2/10) - (ave*ave); System.out.println(ave); System.out.println(bun); } }

    • ベストアンサー
    • Java