プログラミング実習II (2026) 課題

[E7] 第6章 配列(2)

(E7_1)

行列の積を計算するプログラムを完成せよ.ただし,行列 A, B, C, D はそれぞれプログラム内で配列 a, b, c, d で表されるとする.

考察事項:

#include <stdio.h>
#include <math.h>

#define M 3

void print_array( double a[M][M] ){
    // 以前の課題で作成した print_array 関数をここで使用する
}

int main ( void )
{
    double a[ M ][ M ] = {
        { -1.0/sqrt(2.0), -1.0/sqrt(3.0), 1.0/sqrt(6.0) },
        {  1.0/sqrt(2.0), -1.0/sqrt(3.0), 1.0/sqrt(6.0) },
        {            0.0,  1.0/sqrt(3.0), 2.0/sqrt(6.0) },
    };

    double b[ M ][ M ] = {
        { -1.0/sqrt(2.0),  1.0/sqrt(2.0),          0.0  },
        { -1.0/sqrt(3.0), -1.0/sqrt(3.0), 1.0/sqrt(3.0) },
        {  1.0/sqrt(6.0),  1.0/sqrt(6.0), 2.0/sqrt(6.0) },
    };

    double c[ M ][ M ], d[ M ][ M ];

    // ここで行列の積 C = A B を求める

    print_array( c );

    // ここで行列の積 D = B A を求める

    print_array( d );

    return 0;
}
(E7_2)

複数の点の座標が与えられたとき,各点間の距離の最大値とそれを与える点の組を求めるプログラムを作成する.

[リスト 6.14]のプログラムを入力し実行せよ.ただし,以下の点に注意すること:

(E7_3)

10 点満点のテストを受験した 50 人分の点数が配列 data に格納されている.また,配列 freq の要素 freq[ i ] は,i 点の人数を表すこととする.i = 0, 1, ..., 10 のそれぞれの値に対して i 点の人数を数えて freq[ i ] に代入せよ.その結果(度数分布という)を表示すること.

最後に,配列 freq の要素の和を計算し,全員分の点数が正しく集計されていることを確認せよ.
表示例:
0点: 1
1点: 3
2点: 7
3点: 4
4点: 3
5点: 8
6点: 6
7点: 5
8点: 2
9点: 7
10点: 4
合計: 50
#include <stdio.h>

#define N 10
#define NUM_SCORE 50

int main ( void ) 
{
    int data[ NUM_SCORE ] = {
        1,  4,  9,  9,  8, 10, 10,  9,  5, 10, 
        2,  9,  6,  4,  0,  7,  3,  5,  6,  6, 
        7,  4,  2,  9,  2,  5,  5,  3,  1,  9, 
        5,  7,  3,  2,  7,  9,  1,  7,  6,  6, 
        5,  8,  2,  5,  3, 10,  6,  2,  2,  5, 
    };

    int freq[ N+1 ] = {0}; 

	// 結果の表示
	for ( int i = 0; i <= N; i++ ){
		printf(" %2d点: %d\n ", i, freq[i] );
	}

	printf(" 合計: %d\n ",  );

    return 0;
}
(E7_4)

キックオフC言語 8.5.2項,ソースコード8.9を参考にして,(E7_3) で与えた 50名の成績データに対する度数分布を作成せよ.

この方法によると,for 文の 1 重ループのみで処理されている.どのように度数分布が作成されているか,レポートにて説明せよ.

(E7_5)

「キックオフ C言語」第 8 章 練習問題 6(【度数分布】 137ページ…)を解答せよ.データは以下のものを使用し,度数分布を表示すること.


    int data[ ] = {
        89,  76,  72,  79,  48,  49,  51,  40,  67,  80,
        47,   0,  71,  39,  55,  64,  67,  32,  23,  29,
        58,  72, 100,  26,  75,  95,  18,  77,  69,  60, 
        93,  27,  50,  58,  84,  66,  70,   9,   7,  33, 
        72,  24,  90,  68,  48,  29, 100,  61,  32,  19,
        13,  47,  92,  94,  85, 100,  97,  52,  38,  22, 
        50,  88, 100,  64,  41,  58,  87,  56,  96,  57, 
         0,  77,  47 };
(E7_6)

M 人が受験し N 回実施された試験の点数(2次元配列 a[i][j]は,学生 ij 回目の試験の点数)について,

を表示せよ.提出の前に,電卓やMS Excel などの表計算ソフトで検算すること.

表示例:

学生0: 81.25
学生1: 45.00
学生2: 56.25
学生3: 88.75
学生4: 75.00

試験0: 67.00
試験1: 73.00
試験2: 65.00
試験3: 72.00
#include <stdio.h>

#define M 5
#define N 4

int main( void )
{
    int a[ M ][ N ] = { 
        { 70,  85,  70, 100 }, 
        { 60,  30,  40,  50 }, 
        { 50,  60,  70,  45 }, 
        { 80, 100,  90,  85 }, 
        { 75,  90,  55,  80 }, 
    };




    return 0;
}
(E7_A)

「キックオフ C言語」第 8 章 ソースコード 8.8 を作成・実行し,その処理(論理型の変数・定数など)を詳しく説明せよ. 「キックオフC言語」p. 64~65 に説明がある.

(E7_B*)

「キックオフ C言語」第 12 章 202ページ,「9章」(void put_change( int x ))を解答せよ.