プログラミング実習II (2025) 課題
[T7] 第6章 配列(2)
(T7_1) 配列の要素数と実際のデータの個数が一致しない場合,あるいは配列の要素数が明示されていない場合を考える.
#include <stdio.h> int main( void ) { int a[ 50 ] = { 75, 44, 98, 76, 42, 87, 64, 88, 78, 55, 91, 69, 47, 84, 75, 63, 81, 29, 42, 53, -1, }; int b[ ] = { 75, 44, 98, 76, 42, 87, 64, 88, 78, 55, 91, 69, 47, 84, 75, 63, 81, 29, 42, 53, }; return 0; } |
(T7_2) 配列を引数として,関数を呼び出すことができる.以下のプログラムを作成せよ.
下のプログラムは,6 種類の硬貨(1円, 5円, 10円, 50円, 100円, 500円)についてそれぞれの枚数に対して,金額の合計を表示するプログラムである.以下に沿うように完成せよ.
#include <stdio.h> #define N 6 /* プロトタイプ宣言,配列の引数の書き方に注意 */ void array_print( int a[], int b[] ); int array_sum( int a[], int b[] ); int main ( void ) { int value[ N ] = { 1, 5, 10, 50, 100, 500 }; int num[ N ] = { 3, 2, 0, 5, 3, 1 }; int sum; printf(" 硬貨の額面,枚数\n "); array_print( value, num ); sum = array_sum( value, num ); printf(" 硬貨の合計金額は %d 円です\n ", sum); return 0; } void array_print( int a[], int b[] ) /* 表示を行う関数の本体 */ { /* 金額と枚数を順に出力する */ } int array_sum( int a[], int b[] ) /* 合計を求める関数の本体 */ { /* 合計金額を求めて戻り値とする */ } |
(T7_3) 教科書 6.5節を読んだ上で,以下のプログラムの出力を予想してレポートに記せ.次に,プログラムを入力,コンパイル・実行して結果を確認せよ.予想が間違った場合はその理由をレポートにて報告すること.
#include <stdio.h> #define M 3 int main ( void ) { int a[ M ][ M ]; int sum; a[0][0] = 2; a[0][1] = 0; a[0][2] = -1; a[1][0] = -1; a[1][1] = 2; a[1][2] = 3; a[2][0] = 5; a[2][1] = 4; a[2][2] = 3; sum = 0; for( int i = 0; i < M; i++ ){ sum += a[ 1 ][ i ]; } printf("%d \n", sum ); sum = 0; for( int i = 0; i < M; i++ ){ sum += a[ i ][ 2 ]; } printf("%d \n", sum ); sum = 0; for( int i = 0; i < M; i++ ){ for( int j = 0; j < M; j++ ){ sum += a[ i ][ j ]; } } printf("%d \n", sum ); sum = 0; for( int i = 0; i < M; i++ ){ for( int j = 0; j < M; j++ ){ if( (i+j)%2 == 0 ) sum += a[ i ][ j ]; } } printf("%d \n", sum ); return 0; } |
(T7_4) 行列の和を求めるプログラムを作成する.
3.5 9.0 -1.0 5.0 -1.5 5.0 10.0 12.0 5.0
#include <stdio.h> #define M 3 void print_array( double a[M][M] ){ // 配列 a を表示.printf の書式は "% 2.1f" など(% の後ろにスペース). } int main ( void ) { double a[ M ][ M ], b[ M ][ M ], c[ M ][ M ]; a[0][0] = 2.5; a[0][1] = 0.0; a[0][2] = -1.0; a[1][0] = -1.0; a[1][1] = 1.5; a[1][2] = 0.0; a[2][0] = 5.0; a[2][1] = 4.0; a[2][2] = 3.0; b[0][0] = -2.0; b[0][1] = 4.5; b[0][2] = 1.0; b[1][0] = 4.0; b[1][1] = -3.0; b[1][2] = 2.5; b[2][0] = -2.5; b[2][1] = 0.0; b[2][2] = -2.0; // ここで行列の和を求める print_array( c ); return 0; } |
(T7_5) 正方行列 A に対して,その転置,トレース,フロベニウスノルムを求める関数を作成して,プログラムを完成せよ.
3 -2 5 1 -4 1 0 2 1 -6 4 3 7 0 -3 -2
表示例: 3 -4 1 7 -2 1 -6 0 5 0 4 -3 1 2 3 -2 trace = 6, Frobenius norm = 13.564660
#include <stdio.h> #include <math.h> #define M 4 void transpose( int a[M][M] ){ int b[M][M]; // A の転置を求めて表示する.printf の書式は %2d // この関数で配列 a の要素を変更しないこと. // 変更した場合は,main 関数で参照する配列 a も値が変わってしまう. } int comp_trace( int a[M][M] ){ } double comp_fnorm( int a[M][M] ){ } int main ( void ) { transpose( a ); printf("trace = %d, Frobenius norm = %f \n", , ); return 0; } |