多次元配列

  ここでは,50 行 3 列の 2 次元配列を利用しています.
/****************************/
/* 多次元配列               */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
			// 人数の読み込みと配列の定義
	int n, m = 0, x[50][3];
	double sum1 = 0.0, sum2 = 0.0;
	printf("人数は? ");
	scanf("%d", &n);
	if (n <= 0 || n > 50)
		printf("   ***人数が多すぎます\n");
	else {
			// データの読み込みと点数の和の計算
		int i1;
		for (i1 = 0; i1 < n; i1++) {
			printf("学籍番号,英語の点,数学の点は? ");
			scanf("%d %d %d", &x[i1][0], &x[i1][1], &x[i1][2]);
			sum1 += x[i1][1];
			sum2 += x[i1][2];
		}
			// 平均点の計算と平均点以下の人
		if (n <= 0)
			printf("データが存在しません!\n");
		else {
			double mean1 = sum1 / n;
			double mean2 = sum2 / n;
			printf("英語平均 %f 数学平均 %f\n", mean1, mean2);
			printf("いずれかの科目が平均点以下の人の学籍番号\n");
			for (i1 = 0; i1 < n; i1++) {
				if (x[i1][1] <= mean1 || x[i1][2] <= mean2) {
					printf("    %d\n", x[i1][0]);
					m++;
				}
			}
			printf("該当学生数 %d 人\n", m);
		}
	}

	return 0;
}
		

  次のプログラムでは,new 演算子を使用して,領域を動的に確保しています.そのため,人数に対する制限はありません.

/****************************/
/* 多次元配列               */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
			// 人数の読み込みと配列の定義
	int n, m = 0;
	double sum1 = 0.0, sum2 = 0.0;
	printf("人数は? ");
	scanf("%d", &n);
	int **x = new int *[n];
	for (int i1 = 0; i1 < 3; i1++)
		x[i1] = new int [3];
			// データの読み込みと点数の和の計算
	for (int i1 = 0; i1 < n; i1++) {
		printf("学籍番号,英語の点,数学の点は? ");
		scanf("%d %d %d", &x[i1][0], &x[i1][1], &x[i1][2]);
		sum1 += x[i1][1];
		sum2 += x[i1][2];
	}
			// 平均点の計算と平均点以下の人
	if (n <= 0)
		printf("データが存在しません!\n");
	else {
		double mean1 = sum1 / n;
		double mean2 = sum2 / n;
		printf("英語平均 %f 数学平均 %f\n", mean1, mean2);
		printf("いずれかの科目が平均点以下の人の学籍番号\n");
		for (int i1 = 0; i1 < n; i1++) {
			if (x[i1][1] <= mean1 || x[i1][2] <= mean2) {
				printf("    %d\n", x[i1][0]);
				m++;
			}
		}
		printf("該当学生数 %d 人\n", m);
	}

	return 0;
}