合計と平均


合計と平均は、集計処理の基本中の基本です。多くのプログラムを作る際に必要になります。

今回は、連続した数や配列の合計・平均を求めてみることにします。

1.連続した数の合計と平均


まず、合計を求めるには、合計結果を格納する変数(例えばsum)を用意して0で初期化します。

そして、ループの中で合計したいデータをsumに足し合わせていくことで、合計が求められます。

平均は、合計であるsumをデータ数で割れば求められますね。

 

下記は「1~10までの整数の合計と平均を求める」プログラムです。


合計・平均(C)

#include <stdio.h>
int main(void){
    int i, sum;
    float avg;

    sum = 0;
    for(i=1; i<=10; i++){
        sum = sum + i;
    }
    avg = sum / 10.0;

    printf("合計:%d  ", sum);
    printf("平均:%.1f\n", avg);
    return 0;
}

合計・平均(Java)

public class SumAvg1 {
    public static void main(String[] args) {
        int sum;
        double avg;

        sum = 0;
        for(int i=1; i<=10; i++){
            sum = sum + i;
        }
        avg = sum / 10.0;

        System.out.print("合計:" + sum + "  ");
        System.out.println("平均:" + avg);
    }
}


実行結果

合計:55  平均:5.5

 

文法的なことですが、平均を計算している部分に注意してください。

CやJavaには明確な変数型があり、整数型同士の計算は整数型になるというルールがあります。

よって、計算結果が平均のような実数になる場合は、数そのものを実数にする(上記のように小数点を付ける)、または、

変数の型変換を行う((float)sum のようにする)ことを忘れないようにしてください。

avg = sum / 10 のようにすると、小数点が切り捨てられ、平均が5になってしまいます。

2.配列の合計と平均


続いて、配列に入ったデータの平均を求めます。

配列は添え字が0から始まるので、カウンタ i の初期値が0になっていることに注意してください。

下記は「長さ10の1次元配列に格納された整数の合計と平均を求める」プログラムです。


配列の合計・平均(C)

#include <stdio.h>
#define NUM 10
int main(void){
    int i, sum;
    int a[] = {5,7,2,1,9,5,3,8,2,3};
    float avg;

    sum = 0;
    for(i=0; i<NUM; i++){
        sum = sum + a[i];
    }
    avg = (float)sum / NUM;

    printf("合計:%d  ", sum);
    printf("平均:%.1f\n", avg);
    return 0;
}

配列の合計・平均(Java)


public class SumAvg2 {
    public static void main(String[] args) {
        int sum;
        int[] a = {5,7,2,1,9,5,3,8,2,3};
        double avg;

        sum = 0;
        for(int i=0; i<a.length; i++){
            sum = sum + a[i];
        }
        avg = (double)sum / a.length;

        System.out.print("合計:" + sum + "  ");
        System.out.println("平均:" + avg);
    }
}


実行結果

合計:45  平均:4.5

 

また文法的なことですが、for分の条件式部分がCとJavaで微妙に違っていますね。

Cのプログラムでは、define構文による定数を用いています。

Javaのプログラムでは、「.lenght」で配列の要素数を取得できるので、それを利用しています。