プログラミング実習II (2025) 課題
[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) 複数の点の座標が与えられたとき,各点間の距離の最大値とそれを与える点の組を求めるプログラムを作成する.
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 }, }; |
(E7_3) 10 点満点のテストを受験した 50 人分の点数が配列 score に格納されている.度数分布を作成して表示したい.
#include <stdio.h> #define N 10 #define NUM_SCORE 50 int main ( void ) { int score[ 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 freq1[ N+1 ]; /* 点数 i の学生の人数を格納する配列 */ int freq2[ N+1 ]; /* 点数 i の学生の人数を格納する配列 */ /////////////////////////////////////////////////////// // 【方法1】により度数分布を求めて配列 freq1 に代入 //////////////////////////////////////////////////////. // 結果の表示 printf("【方法1】点数の分布は以下の通りです.\n"); for ( int i = 0; i <= N; i++ ){ printf(" %2d点: %d\n ", i, freq1[i] ); } printf(" 合計: %d\n ", ); /////////////////////////////////////////////////////// // 【方法2】により度数分布を求めて配列 freq2 に代入 //////////////////////////////////////////////////////. // 結果の表示 printf("【方法2】点数の分布は以下の通りです.\n"); for ( int i = 0; i <= N; i++ ){ printf(" %2d点: %d\n ", i, freq2[i] ); } printf(" 合計: %d\n ", ); return 0; } |
表示例(freq1,freq2 とも): 0点: 1 1点: 3 2点: 7 3点: 4 4点: 3 5点: 8 6点: 6 7点: 5 8点: 2 9点: 7 10点: 4 合計: 50
(E7_4) 100 点満点のテストの点数が配列 score に格納されている.区間幅を10点とした度数分布を作成して表示せよ.
#include <stdio.h> #define N 10 int main ( void ) { int score[ ] = { 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 }; int freq[ N+1 ]; // 結果の表示 for ( int i = 0; i < N; i++ ){ printf("%2d - %2d: %2d\n", i*10, i*10+9, freq[i] ); } printf("100: %6d\n", freq[N] ); printf(" 合計: %d\n ", ); return 0; } |
表示例: 0 - 9: 4 10 - 19: 3 20 - 29: 7 30 - 39: 5 40 - 49: 8 50 - 59: 10 60 - 69: 9 70 - 79: 10 80 - 89: 6 90 - 99: 7 100: 4 合計: 73
(E7_5) 10点満点の試験の度数分布が配列 freq として与えられている.freq[ i ] は,i 点の人数である.
以下のプログラムを作成せよ.
#include <stdio.h> #define N 10 int main ( void ) { /* 点数 i の学生の人数を格納する配列 freq[i] */ int freq[ N+1 ] = { 2, 5, 10, 9, 16, 27, 41, 30, 19, 8, 5 }; return 0; } |
表示例: 和: ???? 2乗和: ???? 平均: ???? 標準偏差: ????
(E7_6) 以下のプログラムの配列 a には,M 人が受験し, N 回実施された試験の点数が格納されている. 配列の要素 a[ i ][ j ] は,学生 i の j 回目の試験の点数とする.以下を計算して表示するプログラムを for 文を用いて作成せよ.
表示例: 学生0: ???? 学生1: ???? 学生2: ???? 学生3: ???? 学生4: ????
試験0: ???? 試験1: ???? 試験2: ???? 試験3: ????
#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 章 練習問題7(【2次元配列】 141ページの…)を解答せよ.
作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.
(E7_B)
「キックオフ C言語」の第 8 章 ソースコード 8.8 を作成し,コンパイル・実行せよ.
レポートにて,このプログラムの処理を詳しく説明せよ.たとえば,論理型の変数・定数については「キックオフ C言語」p. 64〜65 に説明がある.
(E7_C*)
「キックオフ C言語」の第 12 章,p. 202,「9章」(void put_change( int x ) )を解答せよ.
作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.