質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

5921閲覧

C言語 配列の要素の総和・平均について

Ryo-chan

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/07/26 03:04

n 個の要素で構成される int 型の配列を引数として受け取り,配列内の全要素の総和と平均値を求める関数を作成してください. また,コマンドライン入力に最大10個の整数値を入力すると,作成した関数を使用して,入力した整数値の総和と平均値を求め,結果を以下の実行例の通り出力するプログラムを作成してください.

このプログラムを作成する際は,以下の要件を満たすように作成してください:

【関数】

配列内の全要素の総和,平均値を求める関数は,以下の仕様とする:
関数名:total_ave
引数:対象の配列 - int 型の配列,配列の要素数 - int 型,総和 - int 型へのポインタ,平均値 - double 型へのポインタ
戻り値:なし
内容:
引数として受け取った配列のすべての要素の総和と平均値を計算する.
計算した総和を,引数として受け取った,総和を表すポインタの指す先に格納する.
計算した平均値を,引数として受け取った,平均値を表すポインタの指す先に格納する.

【入力】
整数値のデータは,コマンドライン入力に入力する. その際,各整数値は,半角スペースで区切る.
入力するデータ数は,最大10個とする.
【出力】
標準出力への出力は,総和,平均値の順で,1行に1つずつ出力する.
総和は左詰めで,平均値は全体を左詰めで小数点以下2桁まで出力する.
行の先頭には空白を入れず,行の左端から出力する.

実行例

作成したプログラムを実行した際,入力したデータに対して以下の実行例のような出力結果が表示されるようにしてください

【実行例1】
「コマンドライン入力」
55 87 70 48 63
「出力結果」
323
64.60
【実行例2】
「コマンドライン入力」
11 22 33 44 55 66 77 88 99 110
「出力結果」
605
60.50
【実行例3】
「コマンドライン入力」
50 76 83
「出力結果」
209
69.67
【実行例4】
「コマンドライン入力」
40
「出力結果」
40
40.00

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/07/26 03:13

しつもんはなんですか?
guest

回答2

0

残念ながら、課題の回答依頼や、コード作成依頼は受け付けていません

まずはあなたなりにコードを書いて、できないところ、不明なところを聞くようにしてください

投稿2021/07/26 05:25

y_waiwai

総合スコア87782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/07/27 00:46

"回答"とは言い難いと感じる。 「質問への追記・修正依頼」に書けばいいことではなかろうか。
guest

0

ベストアンサー

何もしてないみたいなので,物事の進め方について記す.

配列内の全要素の総和,平均値を求める関数は,以下の仕様とする:

関数名:total_ave
引数:対象の配列 - int 型の配列,配列の要素数 - int 型,総和 - int 型へのポインタ,平均値 - double 型へのポインタ
戻り値:なし
内容:
引数として受け取った配列のすべての要素の総和と平均値を計算する.
計算した総和を,引数として受け取った,総和を表すポインタの指す先に格納する.
計算した平均値を,引数として受け取った,平均値を表すポインタの指す先に格納する.

こういうことを指定されている場合,まずは指定の通りに書くことから始めてみてはどうでしょうか.

{関数名,引数,戻り値}の指定から,とりあえず

C

1void total_ave( //戻り値なし,関数名は指定のもの 2 int *Array, //「int型の配列」という指定の文言は微妙だが… とりあえずこんな話かと. 3 int n, //配列の要素数 4 int *sum, //総和 5 double *ave //平均値 6) 7{ /*中身はまだない*/ }

という形くらいは書けるハズ.

この関数の「内容」に関しては,例えばとりあえず効率とかを度外視してやること2種類(総和と平均)をそれぞれ個別の関数に分けて実装するものとすれば,以下のように書くこともできよう.

C

1void total_ave( int *Array, int n, int *sum, double *ave ) 2{ 3 *sum = Sum( Array, n ); //関数Sumは総和を計算して返してくる 4 *ave = Ave( Array, n ); //関数Aveは平均値を計算して返してくる 5}

これで,関数 total_ave のコードは完成した.
よかった.
後は作業関数 Sum, Ave をそれぞれ実装すればよかろう.

これらの関数の実装は,最初は{処理効率, コードの短さ,etc}を考えずにとりあえず動くものを用意すればよい.
例えば以下に示すような長ったらしいコードでも,とりあえず答えが返って来さえすればよい.
(何らかの意味で「より良いコード」に修正する作業は,一旦動くコードを作った後でいくらでも思う存分満足いくまでやればいい)

C

1//(これは Sum が使う作業関数) 2int ObjFunc( int a, int *Array, int n ) 3{ 4 for( int i=0; i<n; ++i ){ a -= Array[i]; } 5 return a; 6} 7 8//総和計算 9int Sum( int *Array, int n ) 10{ 11 int S = Array[0]; 12 int L = Array[0]; 13 for( int i=1; i<n; ++i ) 14 { 15 if( S>Array[i] )S = Array[i]; 16 if( L<Array[i] )L = Array[i]; 17 } 18 19 S *= n; 20 L *= n; 21 int Fs = ObjFunc( S, Array, n ); 22 int Fl = ObjFunc( L, Array, n ); 23 24 while( 1 ) 25 { 26 if( Fs==0 )return S; 27 if( Fl==0 )return L; 28 int C = (S+L)/2; 29 int Fc = ObjFunc( C, Array, n ); 30 if( Fl * Fc > 0 ) 31 { 32 L = C; 33 Fl = Fc; 34 } 35 else 36 { 37 S = C; 38 Fs = Fc; 39 } 40 } 41} 42 43//平均値計算 44double Ave( int *Array, int n ) 45{ 46 double ave = 0; 47 for( int i=0; i<n; ++i ){ ave += ( Array[i] - ave ) / (i+1); } 48 return ave; 49}

入力や出力の話については,上記の演算部分とは全く独立に検討できるだろうから,同様に指定に従って作る.
で,最終的に全てをくっつければ完了.

投稿2021/07/26 06:39

fana

総合スコア11660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryo-chan

2021/08/05 02:08

ご丁寧にご説明頂きありがとうございます。 結果的に以下のプログラムにて完結致しましたのでご報告いたします。 ``` #include <stdio.h> #include <stdlib.h> void total_ave(int *a,int n,int *sum,double *ave){ *sum=0; for(int i=0;i<n;i++){ *sum += a[i]; } *ave = (double)*sum/n; } int main(int argc, const char * argv[]) { int i,sum; double ave; int d[10]; if(argc<2){ puts("command error!!"); return 1; } if(argc>11)argc=11; for(i=1;i<argc;i++){ d[i-1]=atoi(argv[i]); } total_ave(d,argc-1,&sum,&ave); printf("%d\n%.2lf\n",sum,ave); return 0; } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問