プログラミング実習II (2026) 課題
行列の積を計算するプログラムを完成せよ.ただし,行列 A, B, C, D はそれぞれプログラム内で配列 a, b, c, d で表されるとする.
A と B の積 C = AB を計算し,C を関数 print_array を用いて表示せよ.手計算と結果が一致することを必ず確認すること.B と A の積 D = BA を計算し,D を関数 print_array を用いて表示せよ.AB = BA は成り立ちません)
考察事項:
C および D の計算を行う上で,各要素に対して初期化が必要となる.[リスト6.13] のプログラムではどのように初期化がされているかをレポートで説明せよ.#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;
}
複数の点の座標が与えられたとき,各点間の距離の最大値とそれを与える点の組を求めるプログラムを作成する.
[リスト 6.14]のプログラムを入力し実行せよ.ただし,以下の点に注意すること:
int seat_no[ MAX_SEAT ] = { 1, 5, 8, 10, 15, 16, 20, 22, 25, 30, };
double point[ MAX_SEAT ][ 2 ] = {
{ 1.1, 5.2 }, { 3.4, 1.6 }, { 4.5, 3.4 }, { 2.3, 2.6 }, { 6.4, 5.7 },
{ 7.6, 7.8 }, { 5.2, 4.4 }, { 1.7, 3.5 }, { 3.8, 6.3 }, { 5.8, 6.3 },
};
for 文のカウンタ変数 j の初期値を j = i + 1 に変更し,その動作の意味をレポートで説明せよ.j = i + 1 の場合と j = 0 の場合で結果がどう変わるか考察せよ.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;
}
キックオフC言語 8.5.2項,ソースコード8.9を参考にして,(E7_3) で与えた 50名の成績データに対する度数分布を作成せよ.
この方法によると,for 文の 1 重ループのみで処理されている.どのように度数分布が作成されているか,レポートにて説明せよ.
「キックオフ 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 };
M 人が受験し N 回実施された試験の点数(2次元配列 a[i][j]は,学生 i の j 回目の試験の点数)について,
N 回の平均点M 人の平均点表示例: 学生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;
}
「キックオフ C言語」第 8 章 ソースコード 8.8 を作成・実行し,その処理(論理型の変数・定数など)を詳しく説明せよ. 「キックオフC言語」p. 64~65 に説明がある.
「キックオフ C言語」第 12 章 202ページ,「9章」(void put_change( int x ))を解答せよ.