• ベストアンサー

配列の和を求めるプログラム

キーから入力したデータを配列に入力した後、その和を求めるプログラムを作成したいのですが、プログラミング初心者の私にはさっぱりわかりません。 和を求めたいのに平均値が出てきてしまいます。 どこが間違っているのか教えてください。 #include <stdio.h> float data[5]; float total(int max); void main(void) { int cnt = 0; float d; printf("please input a data: "); scanf("%f", &d); while((cnt < 5) && (d > 0.0)) { data[cnt] = d; cnt++; printf("please input a data: "); scanf("%f", &d); } printf("total data: %5.2f\n", total(cnt)); } float total(int max) { int i; float total = 0.0; for(i = 0; i < max; i++) { total += data[i]; } return total / max; }

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

  • ベストアンサー
  • nikorin
  • ベストアンサー率24% (47/191)
回答No.2

最後の return total / max; で平均値を出してしまっています。ここを return total; とすればいいです。 ついでですが、main関数は void main(void){ .. } ではなく int main(void){ .. return 0; } として、OSに正常終了を知らせたほうがよいです。

その他の回答 (1)

  • 2nd
  • ベストアンサー率30% (19/63)
回答No.1

> return total / max; ここで、total を max で割っているから、平均値になるのでは? 素直に、 return total; でいいと思います。

関連するQ&A

  • C言語 素数の和

    任意の数から任意の数までの素数の和算出するプログラムが大体できましたがうまく動きません。どこを追加・削除すればいいのでしょうか? 実行例1 数1:10 数2:2 素数の和:17 実行例2: 数1:900 数2:1000 素数の和:13330 参考 2+3+5+7=17 907+911+919+929+937+941+947+953+967+971+977+983+991+997=13330 任意の数から任意の数までの素数の和算出するプログラムがどうしても分かりません。どう作成すればいいのでしょうか? 実行例1 数1:10 数2:2 素数の和:17 実行例2: 数1:900 数2:1000 素数の和:13330 参考 2+3+5+7=17 907+911+919+929+937+941+947+953+967+971+977+983+991+997=13330 #include <stdio.h> #include <math.h> int main(void) { int i, j, k, tmp; int number1, number2, total; printf("数1:"); scanf("%d", &number1); printf("数2:"); scanf("%d", &number2); total = 0; if (number1 > number2) { tmp = number1; number1 = number2; number2 = tmp; } if (number1 == 2) { number1++; total = 2; } if (number1 % 2 == 0) { number1++; } for (i=number1; i<=number2; i+=2) { k=0; for (j=3; j<=sqrt(i); j+=2) { if (i%j==0) { k=1; break; } } if (k==0) { total += i; } } printf("素数の和:%d\n", total); return 0;

  • 二次配列

    3×2 行列の要素(float)をキーボードから入力し,画面表示するプログラムを作成したいのですが 配列名をmatrixとして #include <stdio.h> int main(void){ int i, j; float matrix[3][2]; for ( i = 0; i < 3; i++ ){ printf("列入力:"); scanf("%f",matrix[i]); } for ( j = 0; j < 2; j++ ){ printf("行入力:"); scanf("%f",matrix[i]); }   for( i = 0; i < 3; i++ ){ for(j = 0; j < 2; j++ ){ printf("matrix[%d][%d] = %f\n",i+1,j+1,matrix[j][i]); } } getchar(); getchar(); return(0); } としたのですが・・・・・・一部が正しく表示されません。 さらにビジュアルスタジオ.net2003でコンパイルすると。実行結果の最後にエンターキーを押すとエラーが発生してしまうのですが・・・・。 どのようにすればいいのでしょうか?

  • プログラムについて(C言語)

    #include<stdio.h> int main() { int i,n,total; for(;;){ /* 無限ループ*/ printf("整数n?"); /* nの値の表示 */ scanf("%d",&n); /* ifとbreakを使った終了判定 */ if(n<0)break; total=1; for(i=1;i<=n;i++){ printf("i=%d ",i); total*=i; /* total←total*i(階乗の計算) */ } printf("total=%d\n",total); /* totalの値(結果)の表示 */ } printf("Thanks\n"); /* 終了メッセージの表示 */ return(0); } これは階乗を求めるプログラムなのですが、i++ではなくi--をつかって求める場合 どのように変更すればよいでしょうか? for(i=1;i<=n;i++){ あたりをいろいろ弄ってみたのですが、求めてる結果は得られませんでした

  • C言語 プログラム問題

     すいません、C言語初心者です。以下のプログラムがわからないので、よければ教えてください。 #include<stdio.h> int f(int a); int g(int *a); main(){ int i, j, na =10; int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; printf("a = "); for (i=0; i<na; i++); printf("%d ",a[i]); j = f(a[2]); j = f(a[3]); j = g(a+4); j = g(a+5); printf("\na = "); for (i=0;i<na;i++) printf("%d ",a[i]); printf("\nj = %d\n",j); } int f(int a) { static int total=0; total = total + a; a = a+50r; return total; } int g(int *a) { static int total=0; total = total+(*a); (*a) = (*a) +50; return total; } <結果> a = 1 2 3 4 5 6 7 8 9 10 a = 1 2 3 4 55 66 7 8 9 10 j = 11    まず、結果がなぜ下の段に55 56があるのか、そして関数f,gの機能、最後にj=11の意味です。j=5+6 =11とは聞きましたがどこから出ているのかがわかりません。  よろしくお願いします。

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • ベキ級数の和

    実数xと整数nを与えて下のベキ級数の和を求める関数を作りたいのですが…。 n Σ(x^i/i!) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + … + (x^n/n!) i=0 #include <stdio.h> #include <math.h> { float x; int n; printf("x->>"); scanf("%f",&x); printf("n->>"); scanf("%d",&n); のあとどのようなプログラムになるのでしょうか?よろしくおねがいします。

  • C言語のポインタ配列について

    ポインタ配列を使って、各組(横一列が1組)の最高点と平均点、学年平均を表示するプログラムを考え中です。 各組の最高点を求める部分をどのように書けばいいのか迷ってます。 下記のプログラムでマズイ部分などありましたら教えていだたきたいです。 #include <stdio.h> int main(void) {   int ten1[] = { 52, 38, 79, 89, 57, 71, 90, -999};   int ten2[] = { 67, 89, 56, 45, 91, -999};   int ten3[] = { 89, 34, 67, 65, 67, 55, -999};   int* p[3];   int k;   int i;   int sum;   int total;   float ave;   int nin = 18;      p[0] = ten1;   p[1] = ten2;   p[2] = ten3;      total = 0;   for (k = 0; k < 3; k++)   {     i = 0;     sum = 0;     while (p[k][i] != -1)     {       sum += p[k][i];       i++;     }     ave = ave = (float)total / 3;     total += sum;     printf("平均点%3.1f\n", ave);   }   ave = (float)total / nin;   printf("学年平均点:%3.1f\n",ave);      return 0; }

  • プログラミング(C言語)についての質問です

    3つの整数の入力を受け付け、最大と最小を求める関数を作成し得られた結果を表示するプログラミングを作成したつもりなのですが、うまく作動しません。(コンパイルはできますが、結果が無茶苦茶になります。) ご教授宜しくお願いします。 それと、課題文にはポインタを使って最大値と最小値を同時に求めるようにと書いてあったのですが、それもよくわからないです。 今回初めてポインタと配列の受け渡しについて習ったのでよくわかっていない部分も多いと思うのですが、何卒宜しくお願いします。 ちなみに関数の形自体は void minmax(int data[],int *min,int *max){} で決まっています。 #include <stdio.h> void minmax(int data[],int *min,int *max){ int i; *min=*max=data[0]; printf("1st intenger:"); scanf("%d",&data[0]); printf("2st intenger:"); scanf("%d",&data[1]); printf("3st intenger:"); scanf("%d",&data[2]); for(i=1;i<3;i++){ if(*max<data[i]){ *max=data[i]; } if(*min>data[i]){ *min=data[i]; } } } int main(void){ int data[3],min,max; minmax(data,&min,&max); printf("最小値は%dで最大値は%dです",min,max); return 0; }

  • ネイピア数(e)のプログラム

    テイラー展開によってネイピア数の近似値を求める プログラミングが全くわかりません。 e = 2.71828 18284 59045 23536 02874 71352 … を計算したいのですが。 #include <stdio.h> #include <math.h> int kaijou(int p) { int cnt; int val=1; for(cnt=1 ; cnt<=p ; cnt++){ val=val*cnt; } return(val); } double napier(int p) { printf("eを計算します。E = (1+(1/k))^k\n"); printf("k=いくつまで計算しますか ?\n"); scanf("%d", &n); double E[n]; E[1] = 1; for (j = 1; j <= n; j++){ E[j] = E[j] + 1; } for (k = 1; k <= n; k++) { K = K + 1; A = 1 / K; // printf("A = %e, ",A); B = 1 + A; // printf("B = %e\n",B); for ( i = 1; i<=k; i++){ E[k] = E[k] * B; // printf("E[%3d]= %e\n",k,E[k]); } void main(void) { int n; int cnt; double answer; printf("計算する最大の項nを入力してください:"); scanf("%d",&n); for(cnt=1 ; cnt<=n ; cnt++){ answer=napier(cnt); printf("第%d項までの近似値:%f 真値:%f 差:%f\n",cnt,answer,exp(1),answer-exp(1)); } }

  • C言語のプログラムについて。

    C言語のプログラミングについて質問です。 入力されたデータの配列とデータ数を渡すと配列に格納された値を逆順にして、格納し直す関数reverse関数を書き結果を出力せよ、というものなのですが下のように書いたのですが、うまく作動しません。どこがいけないのでしょうか...?教えていただきたいです。 #include <stdio.h> void reverse(int *data[], int n); #define MAX 100 int main() { int data[MAX]; int n, i; scanf("%d", &n); if (n >= MAX) n = MAX; for (i = 0; i < n; i ++){ scanf("%d", &data[i]); } reverse(data, n); for (i = 0; i < n; i ++) { printf("%d\n", data[i]); } return 0; } void reverse(int *data[], int n) { int c, i; for (i = 0; i < n; i ++) { c = *data[i]; *data[i] = *data[n - (i + 1)]; *data[n - (i + 1)] = c; } }

専門家に質問してみよう