演習問題6解答例

問1 ベクトルの絶対値
問2 ベクトルの和
問3 内積
問4 データの入れ替え
問5 平均点と人数
問6 平面上の点の原点からの距離と点の数
問7 成分の割合(ファイル)
問8 グラフの出力
問9 グラフの出力
問10 売り上げの集計
問11 末尾の数のチェックとその割合
問12 クラス毎の平均
問13 平面上の点間の距離と最大
問14 上位 m 人の平均
問15 成分の割合(ファイル,メモリの動的確保)
問16 n クラス(各クラス: m 人)の中の平均値と人数(メモリの動的確保)

[問1]n (入力)次元のベクトル a の各要素を配列変数の各要素に入力した後,その大きさ( | a | )を出力するプログラムを書け.
/***************************/
/* ベクトルの大きさの計算  */
/*      code by Y.Suganuma */
/***************************/
#include <stdio.h>
#include <math.h>

int main()
{
	double s, x[10];
	int i1, max, n;
/*
          初期設定
*/
	max = 10;
	s   = 0.;
/*
          データの入力
*/
	printf("ベクトルの次元は? ");
	scanf("%d", &n);
	if (n > max)
		printf("次元が大きすぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("%d 番目の要素は? ", i1+1);
			scanf("%lf", &x[i1]);
		}
/*
          計算
*/
		for (i1 = 0; i1 < n; i1 = i1+1)
			s += x[i1] * x[i1];
		s = sqrt(s);
/*
          出力
*/
		printf("結果は=%f\n", s);
	}

	return 0;
}
		
[問2]n (入力)次元のベクトル ab の各要素を配列変数の各要素に入力した後,ベクトル ab の和( c = a + b )を出力するプログラムを書け.
/****************************/
/* ベクトルの和の計算       */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int i1, max, n;
	double a[10], b[10], c[10];
/*
          初期設定
*/
	max = 10;
/*
          入力
*/
	printf("ベクトルの次元は? ");
	scanf("%d", &n);
	if (n > max)
		printf("次元が大きすぎます");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("ベクトルa,bの %d 番目の要素は? ",i1+1);
			scanf("%lf %lf", &a[i1], &b[i1]);
		}
/*
          実行
*/
		printf("和は\n");
		for (i1 = 0; i1 < n; i1++) {
			c[i1] = a[i1] + b[i1];
			printf(" %f", c[i1]);
		}
		printf("\n");
	}

	return 0;
}
		
[問3]n 次元のベクトル ab の内積を計算し出力するプログラムを書け.なお,n,および,各ベクトルの要素の値はキーボードから入力するものとする(ベクトルに対しては,配列変数を利用するものとする).また,ベクトル ab の内積 x の定義は以下の通りである.
  x = a1b1 + a2b2 + ・・・ + anbn
/****************************/
/* 内積の計算               */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	double x, a[10], b[10];
	int max, n, i1;
/*
          初期設定
*/
	max = 10;
	x   = 0.0;
/*
          データの入力
*/
	printf("次元は? ");
	scanf("%d", &n);
	if (n > max)
		printf("次元が大きすぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("   ベクトルaの %d 番目の要素は? ",i1+1);
			scanf("%lf", &(a[i1]));
		}
		for (i1 = 0; i1 < n; i1++) {
			printf("   ベクトルbの %d 番目の要素は? ",i1+1);
			scanf("%lf", &(b[i1]));
		}
/*
          計算
*/
		for (i1 = 0; i1 < n; i1++)
			x += a[i1] * b[i1];
/*
          出力
*/
		printf("内積=%f\n", x);
	}

	return 0;
}
		
[問4]配列 a に n (入力)個のデータ,また,配列 b に n 個のデータを入力した後,もし,a[i] が b[i] より大きければ,a[i] と b[i] を入れ換える操作を行うプログラムを書け.このとき,この操作を行った回数,及び,入れ換えを行った a[i],b[i] の値を出力するものとする.
/****************************/
/* データの交換             */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int a[10], b[10], c[10], d[10], i1, k, max, n, x1;
/*
          初期設定
*/
	k   = 0;
	max = 10;
/*
          入力
*/
	printf("データの数は? ");
	scanf("%d", &n);
	if (n > max)
		printf("データが多すぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("a,bの %d 番目のデータは? ",i1+1);
			scanf("%d %d", &a[i1], &b[i1]);
		}
/*
          実行
*/
		for (i1 = 0; i1 < n; i1++) {
			if (a[i1] > b[i1]) {
				c[k]  = a[i1];
				d[k]  = b[i1];
				x1    = a[i1];
				a[i1] = b[i1];
				b[i1] = x1;
				k++;
			}
		}
/*
          出力
*/
		printf("操作回数=%d\n", k);
		for (i1 = 0; i1 < k; i1++)
			printf("   a,b %d %d\n", c[i1], d[i1]);
	}

	return 0;
}
		
[問5]n (入力)人の英語,及び,数学の点を入力し,各科目の平均点を計算した後(平均点も出力),どちらかの科目が平均点以下の人の数を出力するプログラムを書け.
/************************************/
/* 平均値の計算(平均点以下の出力) */
/*      coded by Y.Suganuma         */
/************************************/
#include <stdio.h>

int main()
{
	double mean1, mean2, sum1, sum2, x[50], y[50];
	int max, n, i1, kazu;
/*
         初期設定
*/
	sum1 = 0.0;
	sum2 = 0.0;
	max  = 50;
	kazu = 0;
/*
         データの数の読み込み
*/
	printf("人数は? ");
	scanf("%d", &n);
	if (n > max)
		printf("人数が多すぎます\n");
/*
         データの読み込み
*/
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("%d 番目の人の英語と数学の点は? ", i1+1);
			scanf("%lf %lf", &(x[i1]), &(y[i1]));
			sum1 += x[i1];
			sum2 += y[i1];
		}
/*
         結果の計算と出力
*/
		if (n <= 0)
			printf("データがない!\n");
		else {
			mean1 = sum1 / n;
			mean2 = sum2 / n;
			printf("   英語=%f 数学=%f\n", mean1, mean2);
			for (i1 = 0; i1 < n; i1++) {
				if (x[i1] <= mean1 || y[i1] <= mean2)
					kazu++;
			}
			printf("      平均点以下の人数は %d 人\n", kazu);
		}
	}

	return 0;
}
		
[問6]平面上の n 個の点の座標 ( xi, yi ) を読み込み,原点 ( 0, 0 ) からの平均距離を計算した後,平均距離,原点から平均距離以上離れたすべての点の座標,及び,その数を出力するプログラムを書け.
/****************************/
/* 原点までの距離の計算     */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>

int main()
{
	double mean, sum, x1, x[50], y[50], r[50];
	int i1, k, max, n;
/*
         初期設定
*/
	max = 50;
	sum = 0.0;
	k   = 0;
/*
         データの入力と距離の計算
*/
	printf("点の数は? ");
	scanf("%d", &n);
	if (n > max)
		printf("点の数が多すぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("%d 番目の点の座標は? ", i1+1);
			scanf("%lf %lf", &x[i1], &y[i1]);
			x1     = x[i1] * x[i1] + y[i1] * y[i1];
			r[i1]  = sqrt(x1);
			sum   += r[i1];
		}
/*
         計算
*/
		if (n <= 0)
			printf("データがありません!\n");
		else {
			mean = sum / n;
			printf("平均距離は %f\n点の座標は\n", mean);
			for (i1 = 0; i1 < n; i1++) {
				if (r[i1] >= mean) {
					k++;
					printf("%f %f\n", x[i1], y[i1]);
				}
			}
			printf("   点の数=%d\n", k);
		}
	}

	return 0;
}
		
[問7]今,ある物質を構成する n (未知数)個の成分の各質量がファイルに保存されていたとする.これらの成分を入力した後,各成分の全体に対する%を別のファイルへ出力するプログラムを書け.
/****************************/
/* 成分の%の計算           */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	double data, sum, x[10], y[10];
	int max, n, i1;
	FILE *in, *out;
/*
         初期設定
*/
	max = 10;
	sum = 0.0;
	n   = 0;
	in  = fopen("input", "r");
/*
         データの読み込み
*/
	while (EOF != fscanf(in, "%lf", &data)) {
		if (n >= max) {
			printf("データが多すぎます!\n");
			exit(1);
		}
		else {
			x[n]  = data;
			sum  += data;
			n++;
		}
	}

	fclose(in);
/*
          %の計算
*/
	for (i1 = 0; i1 < n; i1++)
		y[i1] = x[i1] / sum * 100.0;
/*
          出力
*/
	out = fopen("output", "w");

	for (i1 = 0; i1 < n; i1++)
		fprintf(out,"%d 番目の成分 %6.2f %\n", i1+1, y[i1]);

	fclose(out);

	return 0;
}
		
[問8]n (入力)人のテストの点を入力し,0 ~ 10 点,11 ~ 20 点,・・・,91 ~ 100 点の範囲に入る人数を計算した後,下に示すようなグラフを出力するプログラムを書け(「*」の数は人数と同じとする).
RANGE    NUM
0- 10    2   **
11- 20    5   *****
	・・・・
91-100    3   ***		
/****************************/
/* グラフの出力(1)       */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int i1, i2, k, r1, r2, m, n, num[10];
/*
          初期設定
*/
	r1 = 1;
	r2 = 10;
	for (i1 = 0; i1 < 10; i1=i1+1)
		num[i1] = 0;
/*
          入力
*/
	printf("人数は? ");
	scanf("%d", &n);
	for (i1 = 0; i1 < n; i1++) {
		printf("%d 番目の人の点は? ", i1+1);
		scanf("%d", &m);
		k = (m - 1) / 10;
		if (k < 0)
			k = 0;
		num[k] += 1;
	}
/*
          出力
*/
	printf(" RANGE    NUM\n");
	for (i1 = 0; i1 < 10; i1++) {
		if (i1 == 0)
			printf("%3d-%3d%5d  ", 0, r2, num[i1]);
		else
			printf("%3d-%3d%5d  ", r1, r2, num[i1]);
		for (i2 = 0; i2 < num[i1]; i2++)
			printf("*");
		printf("\n");
		r1 += 10;
		r2 += 10;
	}

	return 0;
}
		
[問9]各月の売り上げ( 0 ~ 9,整数)を入力し,以下のようなグラフを出力するプログラムを書け.
      *
      *                        *
  *   *         ・・・・・       *  *
  *   *   *                 *  *
--------------  ・・・・・  ---------
  1   2   3     ・・・・・      11 12		
/****************************/
/* グラフの出力(2)       */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int i1, i2, m[12];
/*
          入力
*/
	for (i1 = 0; i1 < 12; i1++) {
		printf("%d 月の売り上げは(0~9)? ", i1+1);
		scanf("%d", &m[i1]);
	}
/*
          出力
*/
	printf("\n");
	for (i1 = 9; i1 > 0; i1--) {
		for (i2 = 0; i2 < 12; i2++) {
			if (m[i2] >= i1)
				printf("  *");
			else
				printf("   ");
		}
		printf("\n");
	}
	printf("------------------------------------\n");
	for (i1 = 0; i1 < 12; i1++)
		printf("%3d",i1+1);
	printf("\n");

	return 0;
}
		
[問10]ある店舗の毎日の売上の記録 xi ( i = 1 ~ 30 )がある(入力データとして読み込む).ある与えられた日(入力データ)を基準にした前後 7 日間(例えば,5 日が与えられたときは,2 日から 8 日)の売上高の平均を計算し,出力するプログラムを書け.ただし,前後の日にちが 0 以下になったり 31 以上になった場合は,1 または 30 までの平均を計算する(例えば,2 日が与えられたときは,1 日から 5 日までの平均を計算)ものとする.また,0 以下または 31 以上の日にちが入力されたときは,再入力をうながすものとする( goto 文は使用しない).
/****************************/
/* 売上の計算               */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int i1, k1, k2, m, mean, n, x[30];
/*
          初期設定
*/
	mean = 0;
	m    = 0;
/*
          データの入力
*/
	for (i1 = 0; i1 < 30; i1++) {
		printf("   %d 日の売上は? ", i1+1);
		scanf("%d", &x[i1]);
	}
	while (m < 1 || m > 30) {
		printf("基準日(1から30)は? ");
		scanf("%d", &m);
	}
/*
          計算
*/
	k1 = m - 3;
	if (k1 < 1)
		k1 = 1;
	k2 = m + 3;
	if (k2 > 30)
		k2 = 30;
	n = k2 - k1 + 1;
	for (i1 = k1-1; i1 < k2; i1++)
		mean += x[i1];
	mean /= n;
/*
          出力
*/
	printf("   平均=%d\n", mean);

	return 0;
}
		
[問11]n (入力)個の正の整数値を入力し,末尾の桁が 0,1,・・・,9 のものの個数とその割合(%)を出力するプログラムを書け.
/****************************/
/* 0、1、...              */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	int i1, n, m, k1, kk[10];
/*
          初期設定
*/
	for (i1 = 0; i1 < 10; i1++)
		kk[i1] = 0;
/*
          入力
*/
	printf("データの数は? ");
	scanf("%d", &n);
	for (i1 = 0; i1 < n; i1++) {
		printf("   正の整数? ");
		scanf("%d", &m);
		k1 = m % 10;
		kk[k1]++;
	}
/*
          出力
*/
	for (i1 = 0; i1 < 10; i1++) {
		k1 = kk[i1] * 100 / n;
		printf("%d  %d 個  %d %\n", i1, kk[i1], k1);
	}

	return 0;
}
		
[問12]ある学年に n (入力)クラスあり,各クラスには m 人(入力,クラス毎に異なる)の生徒がいるものとする.全員に対しある試験を実施したとき( 2 次元の配列に読み込む),全体における最高点,全体の平均点,及び,その平均点以上の各クラスにおける人数を出力するプログラムを書け.
/************************************/
/* 平均点と平均点以上の人数         */
/*      coded by Y.Suganuma         */
/************************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i1, i2, max, mean, n, m[5], n_m, m_m, nin, ten[5][50], num[5];
/*
          初期設定
*/
	n_m  = 5;
	m_m  = 50;
	mean = 0;
	nin  = 0;
	max  = 0;
/*
          データの入力と平均点の計算
*/
	printf("クラスの数は? ");
	scanf("%d", &n);
	if (n > n_m)
		printf("クラスの数が多すぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("%d 番目のクラスの人数は ", i1+1);
			scanf("%d", &m[i1]);
			if (m[i1] > m_m) {
				printf("人数が多すぎます!\n");
				exit(1);
			}
			else {
				nin += m[i1];
				for (i2 = 0; i2 < m[i1]; i2++) {
					printf("     %d 番目の人の点は? ",i2+1);
					scanf("%d", &(ten[i1][i2]));
					mean += ten[i1][i2];
				}
			}
		}
		mean /= nin;
/*
          比較
*/
		for (i1 = 0; i1 < n; i1++) {
			num[i1] = 0;
			for (i2 = 0; i2 < m[i1]; i2++) {
				if (ten[i1][i2] > max)
					max = ten[i1][i2];
				if (ten[i1][i2] >= mean)
					num[i1]++;
			}
		}
/*
          出力
*/
		printf("最高点=%d 平均点=%d\n", max, mean);
		printf("平均点以上の人数は\n");
		for (i1 = 0; i1 < n; i1=i1+1)
			printf("   クラス %d 人数 %d\n", i1+1, num[i1]);
	}

	return 0;
}
		
[問13]平面上の n (入力)個の点の座標を入力した後,すべての点の間の距離を計算し,その距離が最大になる点の組( 2 つの点の座標),及び,その距離を出力するプログラムを書け.
/****************************/
/* 点間の距離の計算         */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>

int main()
{
	double max_r, r, r1, r2, x[10], y[10];
	int k1 = 0, k2 = 0, max, n, i1, i2;
/*
          初期設定
*/
	max   = 10;
	max_r = 0.0;
/*
          データの入力
*/
	printf("点の数は? ");
	scanf("%d", &n);
	if (n > max)
		printf("点の数が大きすぎます!\n");
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("   %d 番目の点の座標は? ", i1+1);
			scanf("%lf %lf", &(x[i1]), &(y[i1]));
		}
/*
          計算
*/
		for (i1 = 0; i1 < n-1; i1++) {
			for (i2 = i1+1; i2 < n; i2++) {
				r1 = x[i1] - x[i2];
				r2 = y[i1] - y[i2];
				r  = sqrt(r1 * r1 + r2 * r2);
				if (r > max_r) {
					max_r = r;
					k1    = i1;
					k2    = i2;
				}
			}
		}
/*
          出力
*/
		printf("点(%f,%f)と(%f,%f)間で距離は %f\n",
				 x[k1], y[k1], x[k2], y[k2], max_r);
	}

	return 0;
}
		
[問14]n (入力)人の試験の点を入力し,上位 m (入力)人の平均点を計算するプログラムを書け.ただし,m << n ( m は n に比較して十分小さい)とし,すべての( n 人の)データを配列に保存し,並べ替えるようなことはしないものとする.
/****************************/
/* 上位m人の平均           */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>

int main()
{
	double data[10], mean, x;
	int i1, i2, m, n, limit, num, min;
/*
          初期設定
*/
	limit = 10;
	num   = 0;
	min   = -1;
	mean  = 0.0;
/*
          人数の入力
*/
	printf("人数は? ");
	scanf("%d", &n);
	printf("上位何人? ");
	scanf("%d", &m);
	if (m > limit)
		printf("データが多すぎます!\n");
/*
          データの入力
*/
	else {
		for (i1 = 0; i1 < n; i1++) {
			printf("   データは? ");
			scanf("%lf", &x);
					// m人以下のとき
			if (num < m) {
				data[num] = x;
				if (min < 0 || x < data[min])
					min = num;
			}
					// m人より多いとき
			else {
				if (x > data[min]) {
					data[min] = x;
					min       = 0;
					for (i2 = 1; i2 < m; i2++) {
						if (data[i2] < data[min])
							min = i2;
					}
				}
			}
			num++;
		}
/*
          平均値の計算
*/
		if (m <= 0 || n <= 0 || num <= 0)
			printf("データがない!\n");
		else {
			if (num < m)
				m = num;
			for (i1 = 0; i1 < m; i1++)
				mean += data[i1];
			mean /= m;
			printf("\n平均値=%f\n", mean);
		}
	}

	return 0;
}
		
[問15]今,ある物質を構成する成分の数 n と各成分の質量がファイルに保存されていたとする.これらの成分を動的確保した配列に入力した後,各成分の全体に対する%を出力するプログラムを書け.

(calloc)を使用した場合)
/****************************/
/* 成分の%の計算(calloc)   */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	double sum, *x;
	int n, i1;
	FILE *in;
/*
         初期設定
*/
	sum = 0.0;
	in  = fopen("input", "r");
/*
         データ数の読み込みとメモリの確保
*/
	fscanf(in, "%d", &n);
	x = (double *)calloc(n, sizeof(double));
/*
         データの読み込み
*/
	for (i1 = 0; i1 < n; i1++) {
		fscanf(in, "%lf", &x[i1]);
		sum += x[i1];
	}
/*
          %の計算と出力
*/
	for (i1 = 0; i1 < n; i1++)
		printf("%d 番目の成分 %6.2f %\n", i1+1, x[i1]/sum*100.0);

	free(x);

	return 0;
}
		
(new)を使用した場合)
/****************************/
/* 成分の%の計算(new)      */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	double sum, *x;
	int n, i1;
	FILE *in;
/*
         初期設定
*/
	sum = 0.0;
	in  = fopen("input", "r");
/*
         データ数の読み込みとメモリの確保
*/
	fscanf(in, "%d", &n);
	x = new double [n];
/*
         データの読み込み
*/
	for (i1 = 0; i1 < n; i1++) {
		fscanf(in, "%lf", &x[i1]);
		sum += x[i1];
	}
/*
          %の計算と出力
*/
	for (i1 = 0; i1 < n; i1++)
		printf("%d 番目の成分 %6.2f %\n", i1+1, x[i1]/sum*100.0);

	delete [] x;

	return 0;
}
		
[問16]ある学年に n (入力)クラスあり,各クラスには m 人(入力,クラス毎に異なる)の生徒がいるものとする.全員に対しある試験を実施したとき,各人の名前,点数を動的確保した配列に保存した後,学年平均点以下の人の名前とその点数を出力するプログラムを書け.

(calloc)を使用した場合)
/**********************************/
/* 平均点と平均点以下の人(calloc) */
/*      coded by Y.Suganuma       */
/**********************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i1, i2, **cl, mean = 0, n, nin = 0, *m;
	char ***name;
/*
     データの入力と平均点の計算
*/
	printf("クラスの数は? ");
	scanf("%d", &n);

	m    = (int *)calloc(n, sizeof(int));   // 各クラスの人数
	cl   = (int **)calloc(n, sizeof(int *));   // 点数
	name = (char ***)calloc(n, sizeof(char **));   // 名前

	for (i1 = 0; i1 < n; i1++) {

		printf("%d 番目のクラスの人数は ",i1+1);
		scanf("%d", &m[i1]);

		cl[i1]    = (int *)calloc(m[i1], sizeof(int));
		name[i1]  = (char **)calloc(m[i1], sizeof(char *));
		nin      += m[i1];

		for (i2 = 0; i2 < m[i1]; i2++) {
			name[i1][i2] = (char *)calloc(20, sizeof(char));
			printf("     %d 番目の人の名前は? ",i2+1);
			scanf("%s", name[i1][i2]);
			printf("          点は? ");
			scanf("%d", &(cl[i1][i2]));
			mean += cl[i1][i2];
		}
	}

	mean /= nin;
	printf("平均値 %d\n", mean);
/*
     比較と出力
*/
	for (i1 = 0; i1 < n; i1++) {
		for (i2 = 0; i2 < m[i1]; i2++) {
			if (cl[i1][i2] <= mean)
				printf("   %3d 点  %s\n", cl[i1][i2], name[i1][i2]);
			free(name[i1][i2]);
		}
		free(cl[i1]);
		free(name[i1]);
	}

	free(cl);
	free(name);

	return 0;
}
		
(new)を使用した場合)
/*******************************/
/* 平均点と平均点以下の人(new) */
/*      coded by Y.Suganuma    */
/*******************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i1, i2, **cl, mean = 0, n, nin = 0, *m;
	char ***name;
/*
     データの入力と平均点の計算
*/
	printf("クラスの数は? ");
	scanf("%d", &n);

	m    = new int [n];   // 各クラスの人数
	cl   = new int * [n];   // 点数
	name = new char ** [n];   // 名前

	for (i1 = 0; i1 < n; i1++) {

		printf("%d 番目のクラスの人数は ",i1+1);
		scanf("%d", &m[i1]);

		cl[i1]    = new int [m[i1]];
		name[i1]  = new char * [m[i1]];
		nin      += m[i1];

		for (i2 = 0; i2 < m[i1]; i2++) {
			name[i1][i2] = new char [20];
			printf("     %d 番目の人の名前は? ",i2+1);
			scanf("%s", name[i1][i2]);
			printf("          点は? ");
			scanf("%d", &(cl[i1][i2]));
			mean += cl[i1][i2];
		}
	}

	mean /= nin;
	printf("平均値 %d\n", mean);
/*
     比較と出力
*/
	for (i1 = 0; i1 < n; i1++) {
		for (i2 = 0; i2 < m[i1]; i2++) {
			if (cl[i1][i2] <= mean)
				printf("   %3d 点  %s\n", cl[i1][i2], name[i1][i2]);
			delete [] name[i1][i2];
		}
		delete [] cl[i1];
		delete [] name[i1];
	}

	delete [] cl;
	delete [] name;

	return 0;
}
		

菅沼ホーム 演習解答例目次 本文目次 付録 索引